某单位网站逻辑验证漏洞引发的入侵战争
华域联盟
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 1153|回复: 95

某单位网站逻辑验证漏洞引发的入侵战争

  [复制链接]
发表于 2015-8-8 10:33:34 | 显示全部楼层 |阅读模式

【CHU】
信息来源: 华域联盟(www.cnhackhy.com)

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
前因

某某客户在试用东巽科技的“铁穹高级持续性威胁预警系统”过程我们发现有明显的木马通讯特征并通知客户,但客户始终不肯承认自己的环境被入侵了甚至被植入木马事实,迫于无奈我们只好又一次的免费为这些钢牙客户做免费的渗透测试来证明他们的网络环境是有多么的脆弱。

- N6 N& @6 [7 o8 Y7 ?* ~

0x00【备战】

这个有趣逻辑验证漏洞是在帮某单位做网站的安全风险评估时候遇到的,当时正值年前。在开年会的当天中午接到的通知,明天上午要到某单位做一次现场的渗透测试。伟大领袖毛主席曾经说过 “不打无准备之仗,不打无把握之仗,每战都应力求有准备,力求在敌我条件对比下有胜利的把握”。根据可靠来源的情报称,这个单位的网站是有一家当地专门做信息安全的公司在做日常维护。可是只剩下半天时间的时间让我去准备了,这可怎么办?没时间多想了,只能立刻搞起。

; T( U* L  E1 H! k. e5 o

0x01【开战】

开战的第一步自然是要打开我们的Kali了。前期的信息收集我喜欢用市面上较为流行也较为简单的Maltego还有Theharvester来作为前期的收集信息工具,可是两个工具跑了半天基本没有什么有用的信息。

于是就用了dnsmap还有fierce来收集下域名的信息,结果搞了半天只有一个www域名

20150306163626529.png   F) r4 i* X' t1 |& g; S" ~

20150306163626174.png

( ]( U' F9 L0 g1 K1 K

只好找出Nmap来扫一下到底还开了什么其他的端口没有。这时候突然想起来手上正好有一台东巽公司的云狐自动化渗透测试系统,干脆就用他来扫吧。由于网络扫描都比较耗时,加上我设置的超时延迟事件也比较大,所以在扫描期间我就只好手工测试下,看有没有什么问题。打开网站第一眼看过去就知道是Apache Tomcat的服务器,用了Struts的框架,心中一阵窃喜。因为Struts的漏洞还比较多,就赶紧拿出一系列的Struts2工具测试了一圈,结果发现没有一个能用,看来有专业的维护团队就是不一样,没那么好对付,毕竟有同行在,那么容易就做下来了那别人的面子往哪搁呀!看来Struts2这条路是走不通了,只能换一个办法。这时候就想到了找robots.txt看看会不会有一些有价值的信息。结果返回了404 看来也是没有什么可以利用的东西了。拿出whatweb扫一扫看是什么CMS,结果啥都没发现,又是一阵悲剧。于是就找了两个连接,看看是不是有SQL注入可利用。尝试了简单的手工注入以后发现没简单,一出现有非法字符就跳转回首页,判断应该是存在WAF(Web Application Firewall)。有WAF也没关系,因为部分WAF是可以绕过的。尝试了一些常用的绕过WAF手法之后也没成功于是就放弃了。其实在乌云上有一篇“深入了解SQL注入绕过waf和过滤机制”的文章,大家有兴趣的可以参考一下,文章里面提出了以下几种绕过WAF的方法。

1、 大小写混合

2、 关键字替换

3、 使用编码

4、 使用注释

5、 使用等价函数与命令

6、 使用特殊符号

7、 HTTP参数控制

8、 缓冲区溢出

9、 整合绕过

到这里就想到偷懒了,拿出注入神器SQLMap里面就带有一个专门用来绕过WAF的参数tamper。这个参数后面跟着的是绕过waf的脚本,一般是放在/usr/share/sqlmap/tamper这个目录下面。使用方法是:

sqlmap -u "http://www.site.com/abc.do?n_id=999" --tamper="space2comment.py"

因为有WAF所以SQL注入也陷入了僵局,这个时候Nmap扫完了,知道结果的我眼泪流下来啊。只开了80还有8080端口。

20150306163627553.png
! F; K/ T7 i1 o# S# o& a2 X. Y4 [0 n. w- L* A2 O4 p$ s: |; R. `  e0 U

这个时候云狐也扫完了,在WEB上到是发现了三个高危漏洞。一个是CVE-2011-3190,另一个是XSS,还有一个HPP(HTTP Parameter Pollution)。CVE-2011-3190这个漏洞在网上搜素了一下,没发现有EXP。于是看看XSS,看了一下因为有WAF在的原因好多参数也都过滤了,只剩下一个prompt可以触发,而且只能在火狐下触发,那么意义不大了。

20150306163627752.png

剩下一个HPP了,HPP可以利用来绕过WAF,于是手工尝试了一遍没有成功,又丢到了SQLMap里面,也没成功,感觉这次也找不到什么大问题了。

20150306163628994.png
: D9 z4 W/ t9 b5 y

* w# U( ^' X) O% _+ w4 g$ c

毕竟有专门的安全公司做维护,设备也上得很齐全,再加上只有半天的时间,估计一时半会能找到的问题也就那么多了。

+ J/ P% ^  X" _( j

0x02【纵深打击】

原本打算就这样出一份初步的报告了,可是想到文章开头提到的毛主席语录的经典名言觉得不应该就此放弃。又返回去仔细看了一遍云狐自动化渗透测试系统的报告。发现里面有一个登录的页面,就上去看了看。输入完帐号密码还有验证码以后点登录立马就弹出了帐号不存在。看了一下,页面没有跳转,应该是用了Ajax来做的页面。这时候心想有验证码也不好跑弱口令,但是出于职业病的原因,还没想完这个问题就已经打开了查看源代码的页面。反正打开就打开了吧,顺便就看看。结果这一看把我乐坏了,心里又想,还好手快看了下源代码,幸好没关掉,要是没看这损失有多大啊。在登录页面里找到了那么一段登录的源码。

- m1 H5 l. T) I

function login(){

    var userName = document.getElementById("username").value;

   var password = document.getElementById("password").value;

   if(userName==""||password==""){

   alert("用户名或密码不能为空");

   return false;

   }

  $.ajax({

  url:"/user/Login_Check.do?userName="+userName + '&password='+ password,

  success:function(value) {

if(value=="true"){

document.getElementById('form1').submit();

  } else{

alert(value.split(",")[1]);

return false;

  }

  },

dataType:'text'

  });

}

原来可以跑密码,这个验证码是javascript的,不需要验证码验证。于是拿出hydra跑了一圈,发现还是没跑出来用户名,又心灰意冷了。看了一下发现另一个URL,这个才是真的后台呀,而且没有验证码,随便输入了一个admin就弹出密码错误,看样子应该也用的Ajax来实现的。于是也查看了一下源代码,这一看突然发现前方的道路是光明的。

% A. v/ |4 c8 N9 p

var xmlhttp;

function login(){

   if (window.XMLHttpRequest){

   xmlhttp = new XMLHttpRequest();

    if (xmlhttp.overrideMimeType){

      xmlhttp.overrideMimeType('text/xml');

    }

   }else{

    if(window.ActiveXObject){

     try{   

      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");   

     }catch(e){   

      try{   

       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");   

        }catch(e){}   

     }

    }

   }

  var userName = document.getElementById("userName").value;

  var password = document.getElementById("password").value;  

  xmlhttp.open("POST","/@dmin/CheckLoginForAdmin.do?userName="+userName,true);

  xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

  xmlhttp.send(null);

  xmlhttp.onreadystatechange=function(){

  if(xmlhttp.readyState==4)

  {if(xmlhttp.status==200){

  var value=xmlhttp.responseText;

  if(value=="false"){

   alert("用户名不存在,请重新输入!");

   return false;

  }else{

if(value.split(",")[1]!=password){

alert("密码不正确,请重新输入!");

   return false;

}else{

document.form1.submit();

}  

}

      }

   }

}

}

问题就出在代码的第三十三行处,登录的时候Ajax返回的数据里面包含一个正确的密码,然后与密码框里面的密码对比看是否匹配,所有操作都是在客户端用Javascript来判断的,这个可就是很严重的问题了,而且刚才访问的时候用户名是存在的。那说明我们可以拿到真的密码了,于是直接访问

http://www.xxx.com/@dmin/CheckLoginForAdmin.do?userName=admin


) n5 q) }' R+ C+ y) y# n

20150306163628997.png

2 d2 Z8 k: s5 E$ K/ D2 @& l

这样密码就赤果果的出现在我们面前了,赶紧拿着它登录后台,发现一切正常。到这为止才算是完成了这次任务,对客户有所交代了。

! C3 |% U3 b: D0 S* Z' C0 r

0x04【战后总结】

从开始检测到成功登录后台用了不到两个小时时间,这个时间如此紧迫,过程如此曲折的任务总算是完成了,其实归根到底还是两个字“运气”。但是“龟仙人”也曾经说过,运气也是实力的一部分,总之是对客户有所交代了。其实最主要的问题应该是在开发者人员身上,毕竟对于密码验证这块第一首先是直接在客户端匹配密码,虽然即使密码正确,也会在服务器上再比对一次,但是直接在客户端上匹配这似乎不像是一个老程序员所写的东西。第二就是密码没有加密,经过几次互联网的脱裤事件之后应该对密码包括存储都应该进行加密才是。第三点就是验证码的问题,也是用JavaScript来实现的,这个验证码对稍微懂得一些技术的人来说就等于是形同虚设。

在解决方案上其实也很简单,毕竟服务器前面有WAF,这能阻挡了大部分的攻击,剩下要做的就是把之前提到的密码验证以及验证码验证这块放到服务器端来进行。对于XSS还有HPP来说过滤好传入的参数就可以了。

' F* h& ~, S, ^; ^

* z" c) q0 \7 K9 K
文章来源:华域联盟

 

                                                  




上一篇:简单入侵某设计站
下一篇:针对HTTPS的FREAK攻击变得简单

帖子的最近访客

回复 百度谷歌雅虎搜狗搜搜有道360奇虎 天涯海角搜一下: 百度 谷歌 360 搜狗 搜搜 有道 谷粉 雅虎 必应 即刻

使用道具 举报

二洋璜 该用户已被删除
发表于 2016-6-25 22:51:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
登洲远 该用户已被删除
发表于 2016-6-25 23:02:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
广翠宪 该用户已被删除
发表于 2016-6-26 07:43:39 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2016-6-26 07:47:56 | 显示全部楼层
说的不错!/ W) a" x" J9 l, D' }0 ~+ J
' s. K5 `0 b" H  c0 b# @

: B9 L" W. N- ~- f; b2 U6 L1 g- o& f  t9 I

$ Z+ e3 D( u. ~* X
2 W/ {; j/ P) Z( Q. y3 [1 \' F1 j- [/ [( b  ]0 F

( T; I7 y) o" F: T* V* M8 {/ m6 z; e& d$ w' [
. b- E" L, f$ ^3 q4 k! U6 _
' A% f1 \( Y2 j. X

" I+ Q) d2 E6 h0 m* o- {5 L
php?mod=logging&action=login'+'&referer='+encodeURIComponent(location))" src="static/image/common/sigline.gif" border="0" alt="" />
4 [, W' i9 X3 R1 l3 @                               
php?mod=logging&action=login" onclick="showWindow('login', this.href+'&referer='+encodeURIComponent(location));">登录/注册后可看大图

+ x$ `: S; N9 y* J' W) T白癜风的初期症状图
) H4 L9 O7 @1 |白癜风怎样治疗最快
; E2 }' t1 @6 E7 n9 D治疗白癜风医院哪个好5 t" U6 S# ~2 v, T5 L0 [  ]9 P* h, V
白癜风那家治疗好5 N# g( X, k# K; @8 B) A2 [' I$ u
白癜风怎么查病因
* [1 l  S3 g6 z3 Y/ H. D, w0 h外伤引起的白癜风
! h# R& p2 k( @9 n5 b癫痫病发作症状/ i8 m, m2 R) d0 g7 s
铁血女兵
% ?2 C- H1 @# d小儿癫痫的症状2 m8 j+ ]. Q$ g9 @9 C( ~
无敌神武
/ y0 b7 l8 G( `8 Z: s* e9 j羊癫疯发病的症状
' N  }. G& ^% C* ~( H) k3 _. l5 \吾家蛇女初养成
, p7 J$ I$ Y5 P4 f癫痫病到哪里治: |. ^' C2 J% a0 k& E
用伍德灯检查不排除有白癜风( c+ A9 o, E8 J" P- {
激光治疗白癜风的优点
, F( l. R4 `" u6 E3 I2 K女性白癜风什么偏方
) C0 ^$ v) N: s! w红氧治疗白癜风- ~! }$ [0 ?3 K
外伤性癫痫能治愈吗. |5 C4 Q/ }+ J( o9 ]& O
有什么土方法治疗白癜风: B. A* L6 D5 ^- }' a9 \
羊角风的医院
花传贺 该用户已被删除
发表于 2016-6-26 17:07:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
潮务点 该用户已被删除
发表于 2016-6-26 17:10:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
潮务点 该用户已被删除
发表于 2016-6-26 17:29:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
珍妨莲 该用户已被删除
发表于 2016-6-26 17:41:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
珍妨莲 该用户已被删除
发表于 2016-6-26 17:46:46 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

GMT+8, 2017-11-22 01:22 , Processed in 0.375000 second(s), 57 queries .

© 2020 华域联盟 | 蒙公网安备 15062202000105号 版权删帖举报人口

备案号: 蒙ICP备17000689号-2                                                                                                                                                                    

快速回复 返回列表