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

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

admin9年前 (2018-02-25)未分类488

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

(原创)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...

(原创)空间可以查秘密了你们知道了嘛?

(原创)空间可以查秘密了你们知道了嘛?

一、前期准备:工具下载与安装1. 核心工具:蓝光安卓模拟器官网下载地址:https://www.bluestacks.cn/bdsem_anmnqpm.html用途:模拟安卓环境,用于登录 QQ 并访问空间小秘密(PC 端暂不支持直接查秘密,需借助模拟器)。2. 安装 QQ 应用打开蓝光安卓模拟器,...

利用 Wireshark 任意获取 QQ 好友 IP 实施精准定位

利用 Wireshark 任意获取 QQ 好友 IP 实施精准定位

虽然网上已经有了很多获取 IP 的 QQ 插件,但是其原理大致都是相同的,但是插件的安全性而言就不敢恭维了,下面介绍如何利用 Wireshark 获取好友 IP。一、选择本机网卡并启动 Wireshark 监听打开 Wireshark 软件,在界面中选择需要监听的本机网卡(根据网络连接方式选择,如无...

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

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

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

2017_最新过狗一句话编写_附成品 [过狗一句话][过安全狗 bypass]

2017_最新过狗一句话编写_附成品 [过狗一句话][过安全狗 bypass]

环境:php+mysql+apche安全狗:apache版本+8.10规则库即刻安全即刻安全纯技术交流群:307283889如需转载,请联系本博主声明,私自转载必追究Prat 1:思路构思以及实现在 bypass 小分队中 V@1n3R 表哥提到他明天会分享过 waf 的一句话。爱搞事的我当然不能只...