社团官网的典型SQL注入漏洞

AlexFrankly 2018-3-5 黑客入侵 0 0

本次文章内容为典型SQL注入与代码审计。社团网站用的是emlog大前端,这套系统是在emlog的基础上改进的一个版本,漏洞出现在了统计文章的阅读量的代码处,倒不能算0day,只是比较奇怪的是在之前我们对社团网站黑盒测试的时候并未发现这个漏洞,但是这一段代码却是典型的注入代码,现在才被发现,也没造成什么损失,只是再次提醒了我们开发者一件事情:永远不要相信来自用户的输入。

漏洞发现

今天某人在某微信群突然发了这样一张盲注的图片,然后社长的一位朋友就告诉了社长此事,此时社团网站已经打不开了,准确的说是网站首页301无限重定向到首页了,怀疑是被sqlmao跑蹦了,从下图我们可以清晰的看到,该图构造了一个请求头,注入了一个IP: 8.8.8.8” 这是一个典型的盲注测试,在插入了该条IP的时候,Emlog给我们返回了一个报错:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"8.8.8.8""' at line 1。 从这里可以猜测这一段代码没有对用户的IP进行过滤。

图片1.png

为了确认这张图的真实性,使用了普通的抓包工具抓了个包,并且发送到服务器,包内容如下。

图片2.png

从服务器返回的情况来看,这个漏洞是真实存在的:

图片3.png

现在我们需要利用他来获取网站的数据了。

注入测试

因为注入的字段在HTTP内部,所以我们需要抓包,然后再进行测试,首先准备好此次实验用的工具sqlmap,使用前我们先更新一下,我严重怀疑我的PentestBox坏了,手动更新吧,
图片4.png

手动更新之后,把我们刚刚的HTTP请求头准备好,作为注入的一个材料:

图片5.png

注意红色的部分,保存到文件,然后使用sqlmap来跑一次:

图片6.png

感觉社团的网站会炸,哈哈,多并发的请求,很容易照成网站GG,现在看看首次的测试结果:

图片7.png

从sqlmap的报告中我们可以看到测试的结果,告诉我们什么可以注入,来看看测试的各种报告:

图片8.png

事实证明我的猜测是对的,跑到一半的时候,好像都连不上了。

图片9.png

服务器GG

图片10.png

这个证明了一件事,就是今天下午社团网站被跑了SQLMAP了。

源码分析

Emlog采用的是PHP,在PHP中获取X-Forwarded-For的字段一般采用 $_SERVER 全局变量或者 getenv函数获取环境变量或者使用 $HTTP_SERVER_VARS 来获取,这个HTTP_SERVER_VARS废弃了。一般不用,但是都有一个特定 “HTTP_X_FORWARDED_FOR” 来作为关键字审计代码,从报错中我们也可以看到一个字段 “view_ip” 来搜索代码。
搜索后我们定位到了BUG代码:

图片11.png

从这一份代码我们可以看到,通过这个部分函数来获取远程的IP,也就是X-Forwarded-For字段来记录ip:

图片12.png

获取完成后,用来记录文章阅读量:

图片13.png

从emlog的github上查看一下看看

图片14.png

从源码可以看到和注释的部分一样,也就确定了我看到的代码是别人写的。或者是为了修复一个功能:统计阅读量。

漏洞修复

为了保证功能可用,我也就不大改代码了,做一个最简单的处理,取IP的hash来统计文章阅读量即可。

图片15.png

注入总结

1. 不要相信任何用户的输入

2. 没事多试试注入网站,哪怕是开源的程序,也有菜鸟写的代码,比如各种插件

3. 不要有的没得跑SQLMAP,容易玩坏。

本博客所有文章如无特别注明均为原创。作者:ssnhy13 ,复制或转载请以超链接形式注明转自 克拉玛依市高级中学--十三年 。

转载请注明来自华盟网,本文标题:《社团官网的典型SQL注入漏洞》

喜欢 (0) 发布评论