当前位置:首页 > 未分类 > 正文内容

(原创)代码审计社团官网的典型 SQL 注入漏洞 [代码审计][sql 注入漏洞][ip 注入][emlog 漏洞]

admin8年前 (2018-02-25)未分类250

本次文章内容为典型 SQL 注入与代码审计。社团网站使用的是 emlog 大前端(基于 emlog 改进的版本),漏洞出现在统计文章阅读量的代码处。该漏洞不算 0day,但特殊之处在于此前黑盒测试时未被发现,而代码本身存在典型的注入风险,此次发现未造成损失,但再次印证了开发者的核心原则:永远不要相信来自用户的输入

一、漏洞发现

1. 漏洞线索来源

某微信群中出现一张盲注测试截图,显示攻击者构造请求头注入 IP 8.8.8.8",Emlog 返回 SQL 语法错误: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 输入未经过滤

盲注测试截图:

2. 漏洞真实性验证

使用抓包工具复现请求,发送构造的数据包到服务器,服务器返回的错误与截图一致,确认漏洞真实存在。

抓包请求内容:

服务器返回报错(确认漏洞存在):

二、注入测试(使用 SQLMap)

由于注入点位于 HTTP 请求头(X-Forwarded-For 字段),需通过抓包获取请求头并结合 SQLMap 进行测试,步骤如下:

1. 工具准备(SQLMap 更新)

因 PentestBox 自带 SQLMap 可能版本陈旧,先手动更新 SQLMap:

2. 构造注入材料

将抓包获取的 HTTP 请求头保存为文件(重点关注 X-Forwarded-For 字段,标记为注入点):

3. 执行 SQLMap 注入测试

使用以下命令加载请求头文件,启动 SQLMap 测试:

sqlmap -r request.txt -p X-Forwarded-For --dbs

(-r 指定请求文件,-p 指定注入点字段)

SQLMap 执行过程:

4. 测试结果与影响

SQLMap 报告显示注入点可成功利用,支持多种注入方式(如布尔盲注、时间盲注):

但由于 SQLMap 的高并发请求,测试过程中社团网站出现宕机(无法连接),印证了此前网站可能被 SQLMap 扫描导致故障:

网站宕机现象:

三、源码分析(定位漏洞代码)

Emlog 基于 PHP 开发,通过以下思路定位漏洞代码:

1. 审计关键词

根据报错信息(含view_ip字段)和注入点(X-Forwarded-For),确定审计关键词:

  • HTTP_X_FORWARDED_FOR(获取 X-Forwarded-For 字段的 PHP 关键字)

  • view_ip(报错中出现的字段,与 IP 记录相关)

2. 定位漏洞代码

通过关键词搜索,找到记录文章阅读量的核心代码,发现以下问题:

  1. IP 获取未过滤:直接通过$_SERVER['HTTP_X_FORWARDED_FOR']获取用户 IP,未做任何过滤或转义;

  1. SQL 语句直接拼接:将未过滤的 IP 直接拼接到 SQL 语句中,导致注入漏洞。

漏洞代码定位:

IP 获取逻辑(未过滤):

SQL 语句拼接(直接使用未过滤 IP):

3. 对比官方源码(确认非原生漏洞)

查看 emlog 官方 GitHub 仓库的源码,发现官方代码不存在该漏洞,确认此漏洞为第三方改进(统计阅读量功能)时添加的自定义代码导致:

四、漏洞修复

为保证 “统计文章阅读量” 功能可用,采用最小修改原则,通过IP 哈希化避免直接使用用户输入的 IP,修复步骤如下:

修复思路

将用户 IP 通过md5()哈希处理后再存入数据库,既保留 “唯一 IP 统计” 的功能,又彻底消除注入风险(哈希值为固定格式字符串,无注入字符)。

修复代码

修改 IP 记录逻辑,在获取 IP 后添加哈希处理:

// 原代码(存在漏洞)
$view_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$sql = "INSERT INTO em_view (view_ip, post_id) VALUES ('$view_ip', $post_id)";

// 修复后代码(哈希处理IP)
$view_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$view_ip_hash = md5($view_ip); // 对IP进行哈希处理
$sql = "INSERT INTO em_view (view_ip, post_id) VALUES ('$view_ip_hash', $post_id)";

修复代码截图:

五、注入总结

  1. 核心原则:永远不要相信任何用户输入,即使是 HTTP 请求头(如 X-Forwarded-For),必须经过过滤、转义或哈希处理后再使用;

  1. 审计建议:开源程序的第三方插件 / 自定义代码是漏洞高发区,需重点审计;

  1. 测试规范:避免使用 SQLMap 等工具对生产环境进行高并发扫描,易导致网站宕机,应采用低流量手动测试或获得授权后进行;

  1. 漏洞披露:发现漏洞后应优先联系网站管理员,而非公开传播(需打码隐藏网址),避免被恶意利用。

补充说明

后续了解到,测试漏洞的人员仅为技术交流目的(阅读社团文章时顺手测试),社团欢迎此类技术交流,但提醒:公开漏洞相关内容时需隐藏网址,避免不必要的安全风险和麻烦。


扫描二维码推送至手机访问。

版权声明:本文由克拉玛依三十年社团发布,如需转载请注明出处。

本文链接:https://www.klmyssn.com/?id=51

分享给朋友:

“(原创)代码审计社团官网的典型 SQL 注入漏洞 [代码审计][sql 注入漏洞][ip 注入][emlog 漏洞]” 的相关文章

(原创)NOIP [全国青少年信息学奥林匹克联赛] 初赛之后的杂谈

(原创)NOIP [全国青少年信息学奥林匹克联赛] 初赛之后的杂谈

没人能比我更懂你。这次的 noip 初赛考的很砸,比数学还砸。深夜的情感就像熬过冬日的野草。我们都在寻找,寻找着一个能够和自己差不多的人,去对他倾诉自己的情感,去倾听他的情感。在一次一次的失败,一次又一次的成功后,留下的只是回忆;在一次次的交流中,一次次的倾听中,留下的是感情。就像我们总是在学习,却...

(原创)求人不如求己 -- 剪辑音乐就是这么简单 [如何剪辑音乐]

(原创)求人不如求己 -- 剪辑音乐就是这么简单 [如何剪辑音乐]

每每到了学校有活动,需要播放歌曲时,QQ 就多几个好友,消息又 99+,不消问什么事情,就知道是找我剪辑歌曲的同学了。怎么说,我这人对别人提出的需求,都尽力去帮助的,在剪辑音乐这事情上,从没拒绝过,但年复一年,每次剪辑音乐其实很简单,但是量多,就比较影响自己时间了,我又不会拒绝别人,很是尴尬,所以在...

(原创)sqlmap 注入初级教程 [sqlmap][sqlmap 指令][sqlmap 怎么用]

(原创)sqlmap 注入初级教程 [sqlmap][sqlmap 指令][sqlmap 怎么用]

一、熟悉 sqlmap 之路:核心注入场景与方法1. Sqlmap 之 Post 注入Post 注入适用于表单提交(如登录页、数据提交页)等场景,核心是通过抓取 Post 请求数据进行注入测试,以下为 4 种常用方法:方法一:基于请求文件(-r 参数)# 基础用法(请求文件与sqlmap同目录)sq...

(原创)Powershell And Metasploit (上)

(原创)Powershell And Metasploit (上)

00x01 #题外话作者: 墨 (X_Al3r)即刻安全:www.secist.com十三年社团:www.klmyssn.com一篇不知道该用什么名字的文章!00x02 #什么是 PowershellPowerShell 一般指 Windows Power ShellPowershell 是 Mic...

带你挖掘文件包含漏洞之代码审计 #4 实战五个案例

带你挖掘文件包含漏洞之代码审计 #4 实战五个案例

在 PHP 安全中,文件包含漏洞是危害严重的漏洞!本文不再讲解基础概念,直接进入实战环节。一、文件包含漏洞挖掘要点核心关键字:require()、require_once()、include()、include_once()(注意:函数名中括号与参数间存在空格,效果相同);本次实战对象:CMS 系统...

制作一个隐藏在黑页下的大马并且添加后门 [制作大马后门][隐藏后门]

制作一个隐藏在黑页下的大马并且添加后门 [制作大马后门][隐藏后门]

一、声明与目录(00x01)1. 基础信息团队(Team):即刻安全 | www.secist.com作者(Author):Szrzvdny2. 内容目录(table of Contents)隐藏在黑页下的大马隐藏在 404 页面下的大马插入后门并写入收信api.php二、制作开始(00x02)1....