本次文章内容为典型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进行过滤。
为了确认这张图的真实性,使用了普通的抓包工具抓了个包,并且发送到服务器,包内容如下。
从服务器返回的情况来看,这个漏洞是真实存在的:
现在我们需要利用他来获取网站的数据了。
注入测试
因为注入的字段在HTTP内部,所以我们需要抓包,然后再进行测试,首先准备好此次实验用的工具sqlmap,使用前我们先更新一下,我严重怀疑我的PentestBox坏了,手动更新吧,
手动更新之后,把我们刚刚的HTTP请求头准备好,作为注入的一个材料:
注意红色的部分,保存到文件,然后使用sqlmap来跑一次:
感觉社团的网站会炸,哈哈,多并发的请求,很容易照成网站GG,现在看看首次的测试结果:
从sqlmap的报告中我们可以看到测试的结果,告诉我们什么可以注入,来看看测试的各种报告:
事实证明我的猜测是对的,跑到一半的时候,好像都连不上了。
服务器GG
这个证明了一件事,就是今天下午社团网站被跑了SQLMAP了。
源码分析
Emlog采用的是PHP,在PHP中获取X-Forwarded-For的字段一般采用 $_SERVER 全局变量或者 getenv函数获取环境变量或者使用 $HTTP_SERVER_VARS 来获取,这个HTTP_SERVER_VARS废弃了。一般不用,但是都有一个特定 “HTTP_X_FORWARDED_FOR” 来作为关键字审计代码,从报错中我们也可以看到一个字段 “view_ip” 来搜索代码。
搜索后我们定位到了BUG代码:
从这一份代码我们可以看到,通过这个部分函数来获取远程的IP,也就是X-Forwarded-For字段来记录ip:
获取完成后,用来记录文章阅读量:
从emlog的github上查看一下看看
从源码可以看到和注释的部分一样,也就确定了我看到的代码是别人写的。或者是为了修复一个功能:统计阅读量。
漏洞修复
为了保证功能可用,我也就不大改代码了,做一个最简单的处理,取IP的hash来统计文章阅读量即可。
注入总结
1. 不要相信任何用户的输入
2. 没事多试试注入网站,哪怕是开源的程序,也有菜鸟写的代码,比如各种插件
3. 不要有的没得跑SQLMAP,容易玩坏。
/ /最后社长通过圈子的朋友得知那位测试漏洞的朋友只是在看我们社团网站文章的时候,顺手来测试了下,我们对此测试表示欢迎,欢迎技术交流,但是希望这位朋友以后能在发现任何网站漏洞丢到公共场合交流的时候,把网址打上马赛克,一是为了避免别有用心的人恶意攻击,二是不会带给你不必要的麻烦~
小草 · 2018-09-01 15:22
ssnhy13 · 2018-09-27 18:12
crasnes · 2018-02-26 13:29
笑摸二狗头 · 2018-02-25 04:36
ssnhy13 · 2018-02-25 04:38