私信回复001。获取更多干货。
前言
许多web应用都提供从其他服务器获取数据的功能,可以根据用户指定的URL下载或读取文件,服务端请求伪造攻击(SSRF)就是利用这一功能实现的。
比如,正常的web应用应该从指定的URL获取网页内容,而攻击者利用漏洞伪造服务端发起请求,可以突破客户端获取数据的限制,如获取内网资源,服务器本地资源等。
示例
pika CH u靶场中的SSRF通关演示。
SSRF第一关 ,先点击蓝色字体,可以看到URL发生变化。
将URL修改即可,如下图。
主要PHP源码如下,curl 模拟浏览器请求,比如获取远程浏览器内容,虽然可以用file_get-contents来代替,但curl还支持浏览器类型,cookie和ip等,功能相比强大。
curl_init() 初始化curl会话
curl_setopt() 设置curl传输选项
curl_exec 执行curl会话
if(isset($_GET['url']) && $_GET['url'] != null){
//接收前端URL没问题,但是要做好过滤,如果不做过滤,就会导致SSRF
$URL = $_GET['url'];
$CH = curl_init($URL);
curl_setopt($CH, CURLOPT_HEADER, FALSE);
curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
$RES = curl_exec($CH);
curl_close($CH) ;
//ssrf的问是:前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。
//除了http/https外,curl还支持一些其他的协议curl --version 可以查看其支持的协议,telnet
//curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, file 以及LDAP
echo $RES;
SSRF第二关 ,先在如下路径新建一个hello.txt文件内容如下。
同样点击蓝色字体,然后修改URL读取刚才创建的hello.txt文件。
可以看到hello.txt文件内容输出到浏览器页面。如下图。
主要PHP源码
//读取PHP文件的源码:php://filter/read= convert .base64-encode/resource=ssrf.php
//内网请求:
if(isset($_GET['file']) && $_GET['file'] !=null){
$filename = $_GET['file'];
$str = file_get_contents($filename);
echo $str;
防护与绕过
常见防护是通过正则表达式的方式对请求地址过滤,如限制请求特定域名,禁止请求内网IP。
绕过方式
(1)使用格式绕过。
(2)转换IP地址的进制及IP地址省略写法。
如:IP为127.0.0.1,具体绕过0177.00.00.01(八进制),2130706433(十进制),0x7f.0x0.0x0.0x1(十六进制),127.1(IP地址省略写法)
(3)配置域名。若我们有可控域名,可将域名A记录指向要请求的IP进行绕过。如:evil.example.com=>10.11.11.3
(4)网址后加 xip.io,例如 127.0.0.1.xip.io 会被解析成 127.0.0.1
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~