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

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

admin2天前未分类5

本次文章内容为典型 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 输入未经过滤

盲注测试截图:

img

2. 漏洞真实性验证

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

抓包请求内容:

img

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

img

二、注入测试(使用 SQLMap)

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

1. 工具准备(SQLMap 更新)

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

img

2. 构造注入材料

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

img

3. 执行 SQLMap 注入测试

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

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

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

SQLMap 执行过程:

img

4. 测试结果与影响

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

img

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

img

网站宕机现象:

img

img

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

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 语句中,导致注入漏洞。

漏洞代码定位:

img

IP 获取逻辑(未过滤):

img

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

img

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

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

img

四、漏洞修复

为保证 “统计文章阅读量” 功能可用,采用最小修改原则,通过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)";

修复代码截图:

img

五、注入总结

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

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

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

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

补充说明

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


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

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

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

分享给朋友:

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

(转载) 告诉你被盗的 iPhone 是如何一步步被黑客解锁的 [解锁 iPhone]

(转载) 告诉你被盗的 iPhone 是如何一步步被黑客解锁的 [解锁 iPhone]

写在前面的话iPhone 到底安不安全?这个梗已经讨论了很久了。而我今天要告诉大家的是,就算你的 iPhone 6s 设置了六位数字密码,并且还有 touch ID 的保护,黑客同样能够解锁你的手机。故事背景就在三天之前,有一名用户告诉我们他的 iPhone 6s 被偷了。就在他的手机被盗之后不久,...

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

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

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

(原创) 校园卡破解系列之内网渗透提权校园卡服务器 [内网渗透][服务器提权][渗透内网]

(原创) 校园卡破解系列之内网渗透提权校园卡服务器 [内网渗透][服务器提权][渗透内网]

一、渗透背景与环境准备1. 时间与环境渗透时间:上午大课间(仅十几分钟完成)操作设备:班级 XP 系统电脑(性能有限,需选择轻量工具)内网 IP:本地 IP 为172.18.33.38,扫描网段定为172.18.32.0-172.18.33.02. 工具选择优先工具:Kali 的 MSF 模块(可直...

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

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

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

(原创)关于近期新疆地区部分用户在 AppStore 无法下载更新的解决办法(一)

(原创)关于近期新疆地区部分用户在 AppStore 无法下载更新的解决办法(一)

一、问题背景与更新说明1. 问题现象时间:2018 年 3 月 1 日左右开始,新疆地区部分用户在 AppStore 下载 / 更新应用时,点击 “获取” 后转圈,随即恢复 “获取” 状态,循环失败;附加问题:注销 Apple ID 后重新登录时提示 “无法连接到服务器”,修改 Apple ID 密...

(原创)关于近期 APP Store 无法下载及更新问题解决方案(二)

(原创)关于近期 APP Store 无法下载及更新问题解决方案(二)

之前一篇教程讲到 APP Store 无法下载时,可以通过挂 VPN 代理到内地或国外网站进行下载,本篇文章主要讲述 iPhone 手机修改 DNS解决下载和更新问题的方法,同时补充备用方案。一、iPhone 修改 DNS 解决 APP Store 问题首先打开 iPhone 的设置界面,点击「WI...