代码执行与命令执行漏洞
代码执行与命令执行漏洞
[toc]
代码执行介绍
当用户提交的参数被作为代码的时候,此时称为代码注入。广义代码注入:覆盖大半安全漏洞分类,例如SQL注入、xss跨站等。狭义:动态代码执行函数的参数过滤不严格,导致用户输入数据作为服务端代码执行。
以php为例:
代码执行(相关函数)
大致分为五类:
1、eval+assert函数:接受字符串,使接受字符串作为脚本执行
2、preg_replace /e:正则匹配
3、用户自定义函数:用户可定义自己的函数执行
4、动态函数:声明变量,接受函数名称,通过变量名调用函数
5、其他
1.eval+assert
(1)直接输入
1 | eval(php 4,php 5,php 7) -把字符串作为php代码执行,当用户可以控制字符串那么此时存在代码注入漏洞 |
(2)通过GET|POST方式输入
1 |
|
安全人员手段:加引号
1 |
|
方法:闭合+注释1
输入:http://127.0.0.1/?cmd=');phpinfo()//
如果开启了GPC就无法使用(会自动消除\\成\)
如果使用stripslashes()会将传入的’变成\‘
2.preg_replace
执行正则表达式的搜索和替换
原本是执行正常的正则表达式的搜索和替换,但是存在危险的/e修饰,使preg_replace()将replacement参数当作PHP代码执行。
1 |
|
1 | 输入:http://127.0.0.1/?cmd=phpinfo() |
1 |
|
1 | 输入:http://127.0.0.1/?cmd=<data>{$(phpinfo())}</data> |
3.create_function执行漏洞
主要用来创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给create_function(string $args, string $code)执行任意命令
1 |
|
1 | 输入:http://127.0.0.1/?cmd=phpinfo(); |
动态函数调用
示例一:
1 |
|
1 | 输入:http://127.0.0.1/?func=phpinfo(); |
示例二:
1 |
|
1 | 输入:http://127.0.0.1/?a=assert&b=phpinfo(); |
此时等价于执行 assert(phpinfo());
用户自定义函数回调
call_user_func()、call_user_func_array():
1 |
|
1 | 输入:http://127.0.0.1/?cmd=phpinfo() |
1 |
|
1 | 输入:http://127.0.0.1/?cmd=phpinfo() |
array_filter、array_map:
1 |
|
1 | 输入:http://127.0.0.1/?func=system&cmd=whoami |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小chen妙妙屋!
评论

