我是靠谱客的博主 含蓄香烟,最近开发中收集的这篇文章主要介绍CTFHUB--技能树--SSRF全解(上篇)前言内网访问伪协议读取文件端口扫描POST请求上传文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先声明这不是一篇完全讲SSRF原理的文章,我仅仅用我浅薄的知识介绍如何将CTFHUB技能树中与SSRF相关的题目解出,碰到一些有记录价值的题目我会顺便谈一下其中的部分原理。

附上一张图片,以便更好的理解SSRF。(网上找的)

前言

我简单谈一下在已知ssrf漏洞的条件下我们可以利用到的伪协议,

http://:探测内网主机存活、端口开放情况,可以通过访问其它网站确定存活,如百度

gopher://:发送GET或POST请求(需要配合http协议二次url编码上传);攻击内网应用,如FastCGI、Redis

dict://:泄露安装软件版本信息,查看端口,操作内网redis访问等

file://:读取本地文件,如/etc/passwd、/etc/hosts、web网站等等

其实本来还想讲一讲一些Bypass(绕过),但是后面的题目其实也都会遇到,我们在题目中碰到再一道一道的说,便于理解。一起来看看吧!

内网访问

打开GET给了一个url参数,我们用http协议盲测一下可不可以使用 

可以就说明内网主机应该是存活的

题目提示了flag在本地127.0.0.1中,我们直接访问即可

 flag出来了。

伪协议读取文件

这一题的考点主要是希望做题者能掌握file协议读取文件,当然题目的hint也是这么些的哈哈哈。

看提示已经猜到flag在网站目录下,流程不走了,我们直接读取

看看源码,

flag就出来了,简单吧?觉得没意思?别着急,后面会有有意思的。

端口扫描

这个题目主要是要会利用burp的爆破,思路很简单,来看看吧。

 本地端口开了一个在8000-9000,如果纯手注,运气不好要一千次,所以我们利用该dict协议探测端口加上burp爆破,当然也可以用http探测端口,无所谓。

  

 爆出了端口号为8593,我们用http协议访问一下,

POST请求

和上面几题不同,这个题要求 POST传数据,

hint留个印象,我们先用file协议看看源码,

同时,发现目录下还有一个flag.php文件

这个flag.php文件很关键,flag就藏在这里面, 通过代码审计我们需要一个key的值,因为它的全局变量读取的IP需要为127.0.0.1,所以在这里我们需要本地访问。key的值好解决,我们http一访问flag.php就会发现,

key值出了, 那怎么解决在本地的基础上POST传参呢?这里就要用到前面讲到的gopher协议传POST数据,将HTTP文件小改一下伪装成本地127.0.0.1即可。

伪装一下host,再加一个keyPOST传参即可。

POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Length: 36
Content-Type: application/x-www-form-urlencoded

key=050a8579908e458e32497b1e96b08a28

 需要对该数据进行二次url编码,第一次编码后的数据%0A替换%0D%0A,把替换后的数据进行第二次url编码,为什么要把%0A替换呢?这是因为CRLF回车换行相当于是tcp数据流中的一个断点,所以一次编码忽略了的LF我们要在编码后加上再进行一次编码。

一次编码(%0A已被%0D%0A替换):

POST%20%2Fflag.php%20HTTP%2F1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Length%3A%2036%0D%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0D%0A%0D%0Akey%3D050a8579908e458e32497b1e96b08a28

二次编码(对第一次替换后的编码再编一次):

POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Length%253A%252036%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250A%250D%250Akey%253D050a8579908e458e32497b1e96b08a28

最后打入gopher中得到如下,

上传文件

这个是在上一题gopherPOST数据的基础上升了一个档次,但解法其实也就八九不离十吧,都是利用http的请求包二次编码打入gopher而已。

这个题目有点子怪,可能需要稍微要了解一点点HTML标签的东西,因为等会我们要加个按钮。

老办法,能用file协议的话我们读读看源代码,

 还是和上一题的POST传参思路一样,关键点在于这个flag.php文件,它的需要在本地127.0.0.1环境下访问,以及我们需要利用POST/flag.php中上传一个文件,成功后会输出一个环境变量CTFHUB的值,这里面应该放的是flag。

先用http访问一下这个flag.php,看看能不能上传文件

有个文件选择,但是提交按钮到哪去了???所以这里我们要自己写一个提交按钮,前端的东西还是比较容易修改的,把如下标签插入html中即可

<input type="submit" name="errorr0">

 我们随便上传一个文件,抓一手提交文件的包

随便上传什么文件都可,因为代码审计中我们知道只要上传了文件它就会打印CTFHUB全局变量的值。所以上面是我传的文件,后面就和上一题的POST上传一样了,二次URL编码,URL第一次编码后要把%0A替换为%0D%0A,是什么原因上一题也解释了,不多说了,我们直接把二次编码过后的数据打入到gopher协议中。

 flag就出了。

后面几题是关键非常非常的有意思,而且它的绕过什么也很灵性,下篇文章讲。

最后

以上就是含蓄香烟为你收集整理的CTFHUB--技能树--SSRF全解(上篇)前言内网访问伪协议读取文件端口扫描POST请求上传文件的全部内容,希望文章能够帮你解决CTFHUB--技能树--SSRF全解(上篇)前言内网访问伪协议读取文件端口扫描POST请求上传文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部