WEB进阶1

SSRF 漏洞

SSRF Training

<?php 
highlight_file(__FILE__);
function check_inner_ip($url) 
{ 
    $match_result=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url); 
    if (!$match_result) 
    { 
        die('url fomat error'); 
    } 
    try 
    { 
        $url_parse=parse_url($url); 
    } 
    catch(Exception $e) 
    { 
        die('url fomat error'); 
        return false; 
    } 
    $hostname=$url_parse['host']; 
    $ip=gethostbyname($hostname); 
    $int_ip=ip2long($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); 
        $result_info = curl_getinfo($ch); 
        if ($result_info['redirect_url']) 
        { 
            safe_request_url($result_info['redirect_url']); 
        } 
        curl_close($ch); 
        var_dump($output); 
    } 
     
} 

$url = $_GET['url']; 
if(!empty($url)){ 
    safe_request_url($url); 
} 

?>

正则匹配:

写一个脚本测试:

回显:

check检测到的值为['host']:www.baidu.com,而curl抓到的值为127.0.0.1,从而进行绕过。

命令执行漏洞

死亡ping命令

ping命令执行,但是没有回显。

存在WAF过滤字符,通过%0a绕过过滤并拼接命令,由于没有回显,只能考虑外带。

wp中使用了curl外带的方式。

编辑1.sh

执行Ping命令

给bash添加权限

监听

执行bash文件

XSS的魔力

XSS闯关

payload1:

payload2:

XSS语句已经在script中,直接闭合后alert

payload3:

DOMXSS,插入img

payload4:

js跳转,使用javascript伪协议

payload5:

表单自动提交,action可控,提交到伪协议。

payload6:

angular二次渲染导致XSS:

WEB文件上传漏洞

文件上传

这题还是让我学到了不少技巧的。

代码比较长,重新排版审计一下,留下关键WAF函数

简单概括一下WAF,首先是有一个白名单后缀检测,只允许上传图片以及压缩包;且如果压缩包的后缀以php结尾,就会解压失败并报错。解压结束后,再次调用检查函数对该压缩包解压出的文件进行删除。考虑这里可能会存在条件竞争。

接着往下分析,解压目录在一个随机生成的文件夹下,所以没有办法进行条件竞争,无法获取到文件夹的名字。

这里用到的第一个漏洞就是Apache多后缀文件解析漏洞,这个漏洞已经烂大街了就不解释了,版本号在1.x到2.x之间,刚好符合。

由于解压后会再次调用检查函数在随机生成的文件夹下进行扫描,看似无解,但是可以利用目录穿越的骚姿势绕过。压缩后,使用010 Editor修改文件名。

穿越目录上传后访问根目录下文件即可获得flag。

Last updated