电商网站首页布局,好网站分享,广西网站建设制作,徐州网站二次开发文章目录 1 SSRF 服务端请求伪造1.1 SSRF(curl)1.1.1 漏洞防御 1.2 SSRF(file_get_content)1.2.1 漏洞防御1.2.3 SSRF 防御 1 SSRF 服务端请求伪造
SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能但又没有对目标地址做严格过滤与限制从而导致攻击者可以传入任意的地址来让后端服务器对其发起请求并返回对该目标地址请求的数据。
数据流攻击者-----服务器----目标地址
根据后台使用的函数的不同对应的影响和利用方法又有不一样。
PHP中下面函数的使用不当会导致SSRF
file_get_contents()
fsockopen()
curl_exec()如果一定要通过后台服务器远程去对用户指定(“或者预埋在前端的请求”)的地址进行资源请求则请做好目标地址的过滤。
1.1 SSRF(curl)
cURL用法PHP: cURL - Manual。
点击链接查看页面变化
http://192.168.188.183/pikachu/vul/ssrf/ssrf_curl.php发现页面的URL中多了一个url参数。
http://192.168.188.183/pikachu/vul/ssrf/ssrf_curl.php?urlhttp://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php因为curl支持很多协议就可以做以下尝试
通过网址访问
比如说修改url为urlhttp://www.baidu.com访问百度页面 利用file协议查看本地文件 file协议file://是一种在本地文件系统中读取或写入文件的协议。通过file://协议可以使用Curl直接读取本地文件或将数据写入到本地文件。 修改url为:urlfile:///c:/test/wuhu.txt查看文件的内容 dict协议扫描内网主机开放端口 dict协议dict://是一种用于在Curl命令中传递字典参数的协议。该协议通常用于向服务器发送包含键值对的数据。 使用dict协议可以获取内网主机开放端口相应服务的指纹信息修改url为urldict://192.168.188.183:80 1.1.1 漏洞防御
修改代码前可以看到代码中没有做任何的过滤操作 对代码做一些改动
echo $URL.br \;
$octet explode(.,$URL);
echo $octet[1].br \;
if($octet[1]!php){die(黑客);
}代码解析 die等同于 exit()终止程序的执行。 explode 使用一个字符串分割另一个字符串。 explode(string $separator, string $string, int $limit PHP_INT_MAX): array此函数返回由字符串组成的数组每个元素都是 string 的一个子串它们被字符串 separator 作为边界点分割出来。 这样我们就可以让页面访问的时候只能去访问info1.php和info2.php文件这里以点作为分割所以如果后缀名不为php的话那么就不允许通过。
页面访问
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?urlhttp://localhost/pikachu/vul/ssrf/ssrf_info/info1.php如果访问其他的路径例如访问本地文件
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?urlfile:///c:/test/wuhu.txt访问其他网站
127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?urlhttp://www.baidu.com1.2 SSRF(file_get_content)
点击链接查看页面变化 发现路径中的参数从url变成了file file_get_content使用方法。
file读取本地文件
修改file为filefile:///../../../../../../../../windows/system32/drivers/etc/hosts
查看页面效果 http协议请求内网资源
为了演示效果开启一台kali主机并且开启一个http服务
python3 -m http.server 8888修改file为filehttp://192.168.188.185:8888
查看页面效果 1.2.1 漏洞防御
修改之前的代码 修改后的代码
echo $filename.br \;
$octet explode(.,$filename);
echo $octet[1].br \;
if($octet[1]!php){die(黑客);
}页面访问读取本地文件
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?filefile://../../../../../../../../windows/system32/drivers/etc/hosts1.2.3 SSRF 防御
参看我写的另一篇博客服务端请求伪造(SSRF)及漏洞复现