CTF web题总结--SSRF

admin 2021年3月27日05:53:31评论93 views字数 1511阅读5分2秒阅读模式

SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内网。(正因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网)。

SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制。即SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有发现这个请求是非法的,然后服务器以他的身份来访问其他服务器的资源。

利用php中file_get_contents()漏洞:

<?phpif (isset($_POST['url'])) {    $url = $_POST['url'];    if (preg_match('/^http
展开收缩
?://([(w|d)+.]+[/]?)*/'
, $url, $matches)) {
$content = file_get_contents($_POST['url']); $filename = str_replace('/', '', $matches[1]); $filename = './chuoybinu/' . md5($filename) . $matches[1]; file_put_contents($filename, $content); $image = getimagesize($filename); $image_type = $image[2]; if(in_array($image_type, array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_BMP))) { echo '<img src="' . $url . '">'; } else { echo '<a href="' . $url . '">' . $url . '</a>'; } } else if (preg_match('/^file://([/wd.]+)/', $url)) { $content = file_get_contents($url); readfile($file); $filename = './chuoybinu/' . md5(time()); file_put_contents($filename, $content); if (strpos($url, '_')) { echo '<p>Flag is not such easy to get!(:◎)≡</p>'; } else { echo '<a href="' . $filename . '">' . $filename . '</a>'; } } else { echo '<p>Protocol Not Supported!(:◎)≡</p>'; }} else {?>

审计代码发现开头必须是 http

展开收缩
😕/ 或者是 file:// ,可以进行SSRF攻击:

  1. 首先读取index.php:

file:///var/www/index.php
  1. 观察到flag在 flag_chunibyou.php 中,但是index限制读取的文文件不不能包含 _ ,所以只能找其他方法。

  2. 根据提示,数据库文件是可以访问的,从index文件中可以看到数据库结构,因此可以下载ibd文文件:

file://.../ctf/user.ibd

通过 strings user.idb 可以拿到password,进而拿到flag。


转载自CSDN,作者:bob62856链接:https://blog.csdn.net/qq_20817327/article/details/77686308

如果觉得文章对你有帮助,请点击右下角“在看”

CTF web题总结--SSRF


本文始发于微信公众号(LemonSec):CTF web题总结--SSRF

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年3月27日05:53:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CTF web题总结--SSRFhttps://cn-sec.com/archives/305009.html

发表评论

匿名网友 填写信息