ctfshow ssrf篇

web351

刚开始做的时候思路错了,我还想着找到内网ip访问内网,内网Ip是找到了,也访问成功了,但是里面随机数判等不会绕,看了wp直接访问flag文件就行了,人麻了。

 <?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);
?> 

我们直接访问127.0.0.1/flag.php,让服务器替我们发出请求,curl_exec会传回读取的内容。所以payload为

http://127.0.0.1/flag.php

成功得出flag。

web352

上一个payload为啥能用,无法理解。

web353

多了一些限制,看代码:

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|127\.0\.|\。/i', $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);
}
else{
    die('hacker');
}
}
else{
    die('hacker');
} 

这里只能用http和https协议,然后过滤了localhost等环回地址的过滤。我们可以通过127.0.0.1进制转换来绕过。一个ip进制转换网站:IP地址进制转换

这里测试只能用十进制来绕过。还有绕过姿势:

127.1可被解析为127.0.0.1,为0可缺省
在linux中,0会被解析为127.0.0.1
127.0.0.0/8是一个环回地址网段,从127.0.0.1 ~ 127.255.255.254都表示localhost

这些都可以来绕过上述正则的限制。其中一个payload为

url=http://2130706433/flag.php

成功得出flag。

web354

这一题貌似需要自己的域名,通过302跳转来绕过。但是没有也没关系,这里直接用sodo.cc这个来访问flag就可以,这里看羽师傅的wp是用脚本找一些字符来代替。

for i in range(128,65537):    
    tmp=chr(i)    
    try:        
        res = tmp.encode('idna').decode('utf-8')        
        if("-") in res:            
            continue        
        print("U:{}    A:{}      ascii:{} ".format(tmp, res, i))    
    except:        
        pass

感觉好厉害。

web355

这道题限制了host的长度,但是没了上题那么变态的过滤了,所以还是好做的。

if($x['scheme']==='http'||$x['scheme']==='https'){
$host=$x['host'];
if((strlen($host)<=5)){ 

其中一个payload为http://127.1/flag.php,得出flag。

web356

同样限制了长度,这次小于等于3,同样好绕过。

if($x['scheme']==='http'||$x['scheme']==='https'){
$host=$x['host'];
if((strlen($host)<=3)){ 

payload为url=http://0/flag.php。

web357

这题的host部分限制不能为ip了。

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!');
} 

看wp是利用302跳转或者dns重绑定。自己没有服务器的可以在http://ceye.io/这个网站上注册一个账号,然后就会给你分配一个域名。

然后在这里添加127.0.0.1的ip。 再用分配给你的域名去访问flag.php。基本格式为http://r.xxx/flag.php。注意一定要在前面加上r,添加ip的时候第一个随便写,第二个写127.0.0.1。多试几次,就能出flag了。

web358

<?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,尾部为show,可以用这样的骚姿势

这个问号也可以用#来替换,是将show作为了参数来处理。

所以payload为

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

web359(无密码的mysql)

打开题目是一个登录页面啊,我们随便输,登进去。登录到check.php,然后抓包看是有ssrf漏洞的。利用gopher协议去打无密码的mysql。对gopher协议相关利用:https://blog.csdn.net/qq_41107295/article/details/103026470

这里要用到工具Gopherus来生成payload进行rce了。通过这个工具来写一句话木马。

生成的payload再进行url编码一次。打进去访问1.php,执行命令成功,一句话应该写入成功。

再就命令执行就得到flag。

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);
?> 

这次的flag并不在本地的flag文件中。题目提示我们打redis,同样用Gopherus工具来生成我们的payload。同样写一句话木马进去。

再进行url编码。打进去会在网站根目录自动生成shell.php。其实不能只会用工具,还要注重理解原理。(浅析Redis中SSRF的利用 - 先知社区)再进行rce找到flag。

结语

这些都是比较基础的ssrf,了解更多参考bfengj师傅的文章。

CTFshow-WEB入门-SSRF_bfengj的博客-CSDN博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,通过利用服务器端请求功能,攻击者可以发送来自目标服务器的请求。在CTF比赛中,SSRF通常用于获取敏感信息或攻击内部系统。 在引用中提到了一系列与SSRF相关的内容,包括web351、web352、parse_url以及更改IP地址的写法等。些内容可能是指在CTF比赛中的具体题目或技术细节。 引用提到了SSRF的原理,即通过在URL中加入特殊字符来绕过解析过程,******<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ctfshow-web入门 ssrf](https://blog.csdn.net/weixin_45696568/article/details/114434596)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [ctfshow--ssrf](https://blog.csdn.net/ing_end/article/details/124369282)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [ctfshow ssrf](https://blog.csdn.net/weixin_52240463/article/details/122659261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XiLitter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值