【CTFSHOW】web入门SSRF

写在前面

发现学习渗透和ctf对xss,ssrf,csrf,ssti都有挺高要求的,一直没怎么系统刷过题。今天学习学习,补补之前落下的债(* ̄3 ̄)╭

web351

扫描网站发现存在flag.php文件,通过分析和测试发现需要服务器本地访问,故使用传入127.0.0.1/flag.php

ssrfweb351

web352

payload:

ssrfweb352

web353

过滤代码:

if($x['scheme']==='http'||$x['scheme']==='https'){
    if(!preg_match('/localhost|127\.0\.|\。/i', $url)){

payload:

  1. 使用127.1代替127.0.0.1

ssrfweb353

  1. 将127.0.0.1转成十进制

ssrfweb353_2

  1. 十六进制(记得添加0x前缀)

ssrfweb353_3

  1. 二进制(但不知到为什么没有回显flag(;´д`)ゞ)

ssrfweb353_4二进制失败

附:

  • 正则表达式分析网站:Regulex

具体使用如下:

ssrf正则表达式分析网站

具体使用如下:

ssrf进制转换网站

web354

过滤代码:

if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|1|0|。/i', $url)){

可以看到1也被过滤了

payload:

  1. 将域名解析的A记录指向127.0.0.1即可,下面用的域名sudo.cc已指向127.0.0.1。有条件的朋友可以更改自己域名的A记录

ssrfweb354_1A记录解析为127

  1. 在vps上设置302跳转(但不知道为啥不回显flag)

ssrfweb354_2vps302跳转

文件设置如下:

ssrfweb354_2vps目录

ssrfweb354_2vps302内容

访问http://truthahn.top/SSRF/302.php结果:

ssrfweb354_2vps302跳转结果

  1. 用预期解替换原字符串localhost(但不知道为啥还是不回显flag)

ssrfweb354_3预期解替换

生成预期解代码如下:

with open('Expectedsolution.txt','w') as f:
    for i in range(128,65537):    
        tmp=chr(i)    
        try:        
            res = tmp.encode('idna').decode('utf-8')        
            if("-") in res:            
                continue
            f.write("U:{}    A:{}      ascii:{} ".format(tmp, res, i) + '\n')       
            print("U:{}    A:{}      ascii:{} ".format(tmp, res, i))    
        except:        
            pass
f.close()

替换字符a为£Á:

ssrfweb354_3预期解替换a

即loc£Álhost

web355

要求host长度小于5,用127.1即可

payload:

ssrfweb355

web356

要求host长度小于3,补知识点咯:linux里0解析为127.0.0.1,而windows里解析为0.0.0.0

payload:

ssrfweb356

web357

代码:

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

payload:

  1. 使用web354中的302重定向
  2. 羽神提供了一种方法:使用dns重绑定

ssrfweb357

食用 方法如下:

在网站http://ceye.io/注册账号,会自动分配一个域名给你:

ssrfweb357_ceye

在profile最下面的DNS Rebinding里添加127.0.0.1

然后payload为:url=http://r.你的域名/flag.php

注意要多试几次才会回显flag

web358

过滤代码:

if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){
    echo file_get_contents($url);
}

正则逻辑如下:

ssrfweb358regulex

考察的是parse_url地址解析问题,具体解释可以看yq1ng师傅推荐的17年blackhat峰会PDF

自己测试了几下,觉得挺好玩的:

ssrfweb358test1

ssrfweb358test2

具体原理以后找点时间多研究研究。

payload:

ssrfweb358

web359

打开靶机显示一个登陆界面,随便输入用户名和密码,跳转到check.php。

ssrfweb359returl

发现post了两个参数:returl和u。参考了下大佬博客,原来注入点不是username,而是使用gopher工具在returl上做文章。

本题需要使用的工具:Gopherus

ssrfweb359gopher_git

下载完code,在对应目录下输入sudo ./install.sh进行安装。安装完毕后:

ssrfweb359gopher

根据题目提示选择 mysql,输入数据库用户名root,并输入要执行的传马sql语句。之后会returl对应的payload。注意,在3306/_后面的一串字符串需要再进行一次url编码才可以使用。

最终payload如下:

ssrfweb359

这样名称为truthahn.php的🐎就上传成功了。使用蚁剑连接,在根目录找到flag:

ssrfweb359蚁剑1

ssrfweb359flag

web360

题目提示为redis

和web359思路相似,exploit后面为redis:

ssrfweb360gopher

将生成的 payload url编码一下,再用url作为参数post(不知道咋回事post完后显示404容器未生成,不过不影响shell.php的访问)。

默认生成的🐎名称为shell.php,浏览器访问shell.php并使用cmd作为参数执行命令即可。

ssrfweb360cmd1

吐槽: 感觉最近ctfshow的靶机生成速度越来越慢了,不知道是不是因为被DDos了(ToT)/~~~

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TurkeyMan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值