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

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

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

本次文章内容为典型 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 漏洞]” 的相关文章

(原创) 校园卡破解系列之数据修改 [pm3 破解饭卡][pm3 修改数据][校园卡修改][IC 卡修改数据]

(原创) 校园卡破解系列之数据修改 [pm3 破解饭卡][pm3 修改数据][校园卡修改][IC 卡修改数据]

(二)吃不完的饭卡提升完 IC 卡权限,就该考虑能不能修改饭卡金额了。通过两次消费前后饭卡数据的对比分析,发现虽然卡片数据包含较多扇区和区块,但消费前后变化的地方仅涉及两个扇区,这为后续分析提供了便利。通过十六进制与十进制转换,可进一步拆解变化的数据:消费后金额:373.2(数字:37320;16...

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

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

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

(原创)Web 渗透实例之中国教育部青少年普法网站逻辑漏洞【网站逻辑漏洞】【网站逻辑漏洞挖掘】【网站逻辑漏洞实例】

(原创)Web 渗透实例之中国教育部青少年普法网站逻辑漏洞【网站逻辑漏洞】【网站逻辑漏洞挖掘】【网站逻辑漏洞实例】

重要声明:此漏洞于 2016 年 12 月 2 号由社团成员挖掘出来,已经第一时间提交到补天,现已修复,发出来仅供学习与讨论,请勿用于非法途径!!!一、漏洞基本信息漏洞关联网站:中国教育部青少年普法网站用户登录界面地址:https://user.qspfw.com具体漏洞页面:用户密码找回界面,地址...

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

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

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

(原创)IBM 服务器安装 windows sever 2008 R2 教程

(原创)IBM 服务器安装 windows sever 2008 R2 教程

首先讲一下我们需要的工具:两个大于 4G 的 U 盘,一个用来刻录 IBM 的官方引导镜像,一个用来刻录 2008 系统的镜像软件方面:需要一个软碟通(UItralISO) 软件,百度上资源较多,随便下载一个即可软件的图标做参考,实际打开界面如图:打开软件后插入 U 盘,在软件右上角选择「文件 --...