最近跟appscan干上了

发表于:2017-9-21 16:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:信息安全工程师    来源:51Testing软件测试网采编

  像我这种甲方的安全工程师检测Web Application的安全性靠自己去做系统的渗透测试肯定是不可能的了,Web扫描器成为了我的依靠。
  话说之前一直觉得免费的软件肯定没有付费的好嘛,那么是不是从绿盟啊启明星辰这种安全厂商购买的扫描器比AppScan好用呢?后来一想不对啊,AppScan也是IBM的付费软件啊,查了一下一年的使用费也20多万人民币呢。只不过我用的破解版。。。
  为了完成组织上交代的任务,修复扫描出来的这些漏洞,跟程序员大哥们和谐友好的磋商是不可避免的了。最近涉及到的几个漏洞,为了去协助程序员大哥修复也好好的研究了一下AppScan的测试方式。
  我接触到的高危基本就这么三类
  1、SQL注入、盲 注
  2、XSS
  3、被解密的登录请求
  第三个最容易理解了,就是登陆界面的用户名密码传送给服务器的过程中没有任何加密。AppScan在测试的时候就是分析出哪里是登陆页面,哪些参数是用户名密码,一般就user、password这样。然后对请求包进行抓包分析,默认AppScan填入的参数是1234.如果抓到发现就是裸的1234,那么就会爆这个漏洞。修复方式当然最好是能做到HTTPS,但是总会因为各种各样的原因不能做成HTTPS,于是程序员大哥选择了前端JS脚本加密的方法。修复之后我自己拿burp抓包看是加密过的,但是再扫一遍还是会存在这个漏洞。而且查看AppScan抓到的请求包里面还是明文。是因为AppScan只认HTTPS?还是它把前端JS脚本禁用了等于没加密?不太懂这里。
  第二个呢 跨站脚本
  这个不是AppScan测的是某程序员大哥用的某扫描器,但是让我帮忙协助分析了一下。验证漏洞的请求包如下:
  date1=><ScriPt>alert(777)</ScriPt>&date2=2099-01-01&gglx=0&id=61234&loadnum=0&msg=61234&pageNo=1
  扫描器在参数date1后面插入了脚本语句<ScriPt>alert(777)</ScriPt>,发送给了服务器没有收到任何阻拦。然后检测服务器的响应包,在包内发现了植入的危险语句,并且得到了浏览器的执行。说明服务器端并没有对危险语句进行过滤,而且会将该语句放在响应包内返回,由此得出该web存在跨站脚本漏洞。
  :哥你得在服务器端做过滤啊
  :哦
  第三个SQL注入、盲注
  盲注放后面说先说【SQL注入】
  在查询数据的请求包里AppScan在用户数据处插入了含有SQL命令的参数数据,然后在服务器的响应包里发现了oracle的报错信息。这说明AppScan所插入的命令确实被数据库所执行了,虽然不是什么有害信息只是一个报错。但是服务器理应发现用户输入包含有危险字符将其过滤,不应使其到达数据库层。如果是精心设计过的注入语句,那么将得到有害的执行。这说明该网站存在SQL注入漏洞。
  :哥你得在服务器端做过滤啊
  :我们后台入库都是用的java的PreparedStatement,这个本身就能防止参数的注入写法。虽然能收到Oracle的报错,但是是注入不进来的。
  :哦。。。(PreparedStatement是啥...赶紧百度...)
  使用PreparedStatement的好处是数据库会对sql语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率,如果sql语句只执行一次,以后不再复用。 
  SQL注入 攻 击 只 对 Statement有效, 对 PreparedStatement 是无效的; 
  PreparedStatement可以在传入sql后,执行语句前,给参数赋值,避免了因普通的拼接sql字符串语句所带来的安全问题,而且准备sql和执行sql是在两个语句里面完成的,也提高了语句执行的效率 比如单引号会给你加一个转义,加个斜杠。
  然后今天早晨在某网站上又扫到了两个SQL盲注
  SQL盲注和SQL注入有啥区别?SQL盲注是纯手工测出来的,SQL注入不是?
  那SQL注入AppScan也只是添加了危险字符引得数据库报错而已啊。AppScan的检测方式上到底是什么区分SQL注入和SQL盲注的呢。
  盲注AppScan对参数修改了四次,发送了四次请求包,每个请求包都对在参数上添加的SQL语句进行了修改,多一个单引号,或者挪一下位置什么的。然后拿他们的响应包与原始包(未经修改)的响应包做对比。然后说结果返回的包并不一样,所以得出可能存在危险性有SQL盲注。蛋疼的是他喵的我肉眼观察明明特么的就是都一样啊!明明四个请求包的返回包一模一样,琢磨了一上午也没明白为什么把这个漏洞标为盲注,有没有路过的大哥能给我讲个清楚。
  看着HTTP包怎么也想不明白的我拿Burp打算自己改包发送试试,然后有意思的事情来了,用户名是x1aoh0n。我添加了x1aoh0n'+''转码后在burp里发了出去。然后有意思的事情不在返回包里,肉眼看到在网页的文本输入框内 出现了【x1aoh0n/'+/'/'】的字样。。。是把单引号都转义了啊。。。重点是你特么怎么还给显示出来了呢。。。然后百度如何绕过单引号转义实现sql注入。修改语句后提交,boom,可能是成功了?【该网页无法显示】大概是被发现了之后,我的IP被屏蔽了吧。。。
  话说现在专栏更新的速率就定位一个月一次了吧,3月份的话工作上不得不提的就是struts2 s2-045的漏洞了吧。为了这个漏洞贡献出了我工作生涯中第一次加班:15分钟。
  远程任意代码执行漏洞,凶。覆盖了目测超过10%的服务器?凶。抓好时间差赶紧把struts2升级就行了,在升级之前接到好几个补天白帽子提交的漏洞。大概因为漏洞类型是高危?每个奖励的钱都还不少呢,早知道我也网上下几个POC去找找。。。匿名领个几百块钱。。。
  今天又出了S2-046,和S2-045危害一样作用范围一样,修复过045的046面对就也是安全的。
  嗯,没啥想说的了,今天就这样吧。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号