利用SQL注入获得教育考试院查询中心管理员账户密码

突然想起年初时到某省教育考试院查询考试成绩无意间发现的漏洞,通过漏洞可以获取管理员账号和密码哈希,后来提交到WooYun网站了,过了很长时间没有关注这个事情,今天偶然想起,于是去看看厂商处理得怎么样,当时漏洞提交的地址在《江苏教育考试院查询中心查询中心管理员账号密码泄露漏洞》,看样子厂商早已经修复了,漏洞细节早已经公开,我在这里再叙述一遍留作备忘吧。

漏洞所在URL地址http://stat.jseea.cn/jseea_query/input.do?catlog=1&database=21%2Cdb_169,通过测试猜测到江苏省教育考试中心查询系统采取分数据库操作,各个数据库的选择通过Query String参数database来实现,其中以database=21%2Cdb_169为例,21表示查询模板(用于生成各类表单供用户填写),%2C表示编码的逗号,db_169表示数据库名称,上述解码后为21,db_169,当数据库名称不存在时构造SQL语句出现错误,程序崩溃(显示Java错误)可以看到SQL语句:

继续阅读

博客被疑似自动化黑客工具攻击

就在刚才收到了WordPress的Login Lock报警邮件,IP地址为118.192.35.178尝试登录博客后台失败多次,并且IP地址已经被阻止,所尝试的用户名为88888\’。

顿觉奇怪,心想不会谁无聊蛋疼到想去通过程序漏洞尝试黑WP吧,至少WP有这么多朋友使用,加上官方强有力的支持,安全性还是有保障的。于是尝试搜索这个IP地址,果然被我找到了一些痕迹,主要是一些留言和评论板,基本上都是用户名为88888内容为空,或者用户名和内容都是88888。到这里,我心里稍稍有了点底,至少可以判断是自动化程序自动攻击的,然后看到那么多网站的帖子都有88888的痕迹,再推断是不是自动发贴机在作怪,就像WP里屡禁不止的垃圾评论一样,但是想想奇怪的是我垃圾评论里没有收到该IP类似的帖子,看来不仅仅是这么简单。

登录服务器,使用下面的命令导出和该IP相关的Nginx访问日志。

cd /var/log/nginx
cat *.log | grep 118.192.35.178 > /tmp/attack.log
cd /tmp
more attack.log

继续阅读

程序处理用户输入过滤不严导致BUG及安全问题

这算是个老生常谈的问题了,我前面的文章也提到了由此导致的SQL注入漏洞或者XSS跨站漏洞,总结了一下,对于Web有4大漏洞是需要严肃对待的,比如SQL注入、XSS跨站另外还有上传漏洞以及对URL地址处理不严导致的越权漏洞,这个改天单独开一篇文章介绍一下,下面继续谈用户输入过滤不严导致的问题,前天正好帮一个客户处理一个程序问题,一个10年前的计票程序,当然不是我开发的,所以处理起来非常棘手,主要是计票汇总时程序出现了崩溃,仔细研究了这个程序的开发语言,发现是用PowerBuilder构建的,而且留下了PBL文件,用PowerBuilder分析了这个文件,大概知道了BUG的位置。查看了之前录入的数据,发现有个别票选项是0,该软件使用说明上注明只能使用1~4选项,那么说0就是非法的数据选项,那么这个汇总导致程序崩溃的Bug很有可能是由于这个导致的,删除了所有的0选项票,然后再汇总,一切正常!为了切实说明导致Bug的原因,我尝试重现了这个问题,开启一张新选票,然后输入某被选举人票数,输入过程故意输错一项,然后再尝试清除,结果发现无法清除,将该选项设置为0则程序提示“必须为1~4数字”,但是不对0这个无效数据做出处理,也就是说0依旧存在,下一步汇总,结果崩溃如愿的发生了,总结一下,初步判断该程序为“赶工”产品,后期测试不足,所以导致该隐性Bug没有能及时发现。

同样的问题依旧出现在某些网站上,比如经典的SQL注射漏洞,以SQL Server的Transact-SQL语言为例,我们就需要过滤一些危险的字符,比如像单引号,在SQL Server中,如果字符串包含单引号,我们就必须将其转换为两个单引号,避免可能的错误和已知的攻击,参考微软官方的《SQL 注入》(SQL Injection)文章,提供下面一个转换单引号的VBScript函数:

继续阅读

由获取的IP地址数据校验不严格导致XSS以及SQL注入的安全漏洞

不久前看到WAVDB上一篇《BlueCMS信息门户系统存在getip()注射漏洞》,让我感觉到WEB编程中安全隐患处处都会存在,往往很多情况下都是我们大意,导致问题的产生,经典的安全问题就是SQL注入攻击(SQL Injection Attack)以及XSS跨站脚本攻击,这些安全问题说到底就是对用户数据校验不严格所造成的,经典的安全编程模式应该是脱离程序员假定的数据格式,要能够接受来自客户任何数据,然后对这些数据进行甄别,过滤掉不符合原假定格式的数据,因为这些数据可能是无用的或者是有害的,说到底,大部分安全问题还是由于对来自用户数据的不严格判断过滤所导致的。

下面再来看看BlueCMS的getip()安全漏洞,原有的代码摘录如下:

继续阅读