首页 » Web前端 » 防御代码php技巧_MySQL 注入进击与防御

防御代码php技巧_MySQL 注入进击与防御

访客 2024-12-06 0

扫一扫用手机浏览

文章目录 [+]

作者:rootclay

预估稿费:500RMB

防御代码php技巧_MySQL 注入进击与防御

投稿办法:发送邮件至linwei#360.cn,或上岸网页版在线投稿

防御代码php技巧_MySQL 注入进击与防御
(图片来自网络侵删)

本文紧张是做一个Mysql的注入总结,对付Mysql来说利用的办法太过于灵巧,这里总结了一些主流的一些姿势,如果有好的姿势可以多加互换,文章如果有错也欢迎各位dalao指出:)

注入常用函数与字符

下面几点是注入中常常会用到的语句

掌握语句操作(select, case, if(), ...)

比较操作(=, like, mod(), ...)

字符串的猜解操作(mid(), left(), rpad(), …)

字符串天生操作(0x61, hex(), conv()(利用conv([10-36],10,36)可以实现所有字符的表示))

测试注入

可以用以下语句对一个可能的注入点进行测试

注释符

以下是Mysql中可以用到的注释符:

Examples:

版本&主机名&用户&库名

表和字段

确定字段数

ORDER BY

ORDER BY用于判断表中的字段个数

SELECT ... INTO

关于SELECT ... INTO 的阐明可以看这一篇文章SELECT ... INTO阐明

当涌现LIMIT时可以用以下语句:

判断已知表名的字段数

查表名

以下提过几种办法对库中表进行查询

查列名

以下提过几种办法对表中列进行查询

字符串连接

下面的几条语句都可以用以连接字符

条件语句&韶光函数

个中BENCHMARK函数是指实行某函数的次数,次数多时能够达到与sleep函数相同的效果

文件操作

文件操作权限

在MySQL中,存在一个称为secure_file_priv的全局系统变量。
该变量用于限定数据的导入和导出操作,例如SELECT … INTO OUTFILE语句和LOAD_FILE()

如果secure_file_priv变量为空那么直接可以利用函数,如果为null是不能利用

但在mysql的5.5.53之前的版本是默认为空,之后的版本为null,所有是将这个功能禁掉了

也可利用如下语句查询

读文件

读文件函数LOAD_FILE()

Examples:

把稳点:

1. LOAD_FILE的默认目录@@datadir

2. 文件必须是当前用户可读

3. 读文件最大的为1047552个byte, @@max_allowed_packet可以查看文件读取最大值

写文件

INTO OUTFILE/DUMPFILE

经典写文件例子:

To write a PHP shell:

这两个函数都可以写文件,但是有很大的差别

INTO OUTFILE函数写文件时会在每一行的结束自动加上换行符

INTO DUMPFILE函数在写文件会保持文件得到原生内容,这种办法对付二进制文件是最好的选择

当我们在UDF提权的场景是须要上传二进制文件等等用OUTFILE函数是不能成功的

网上有很多文章先容,比如这篇

把稳点:

1. INTO OUTFILE不会覆盖文件

2. INTO OUTFILE必须是查询语句的末了一句

3. 路径名是不能编码的,必须利用单引号

带外通道

关于带外通道的注入前段韶光国外的大佬已经总结过了,我基本复现了一下,博客有文章,这里大略提一下

什么是带外通道注入?

带外通道攻击紧张是利用其他协议或者渠道从做事器提取数据. 它可能是HTTP(S)要求,DNS解析做事,SMB做事,Mail做事等.

条件限定

首先不用多说,这些函数是须要绝对路径的

如果secure_file_priv变量为空那么直接可以利用函数,如果为null是不能利用

但在mysql的5.5.53之前的版本是默认为空,之后的版本为null,所有是将这个功能禁掉了

DNS注入

上面的语句实行的结果我们可以通过wireshark抓包看一下,过滤一下DNS协议即可清晰看到数据出去的样子,如下图

进行DNS注入须要域名解析,自己有的话最好,但是没有的朋友也没事,这里推举一个网站CEYE可以查看数据

SMB Relay 注入攻击

What is SMB relay

这里大略的描述一下SMB relay这个过程

假设有主机B与A

(1) A向B发起连接要求

(2) B向A发送寻衅(一组随机数据,8字节)

(3) A用源自明文口令的DESKEY对寻衅进行标准DES加密得到相应,并发往B

(4) B从SAM中获取A的LM Hash、NTLM Hash,打算出DESKEY,并对前面发往A的寻衅进

行标准DES加密

(5) 如果(4)中计算结果与A送过来的相应匹配,A被许可访问B

现在假设一个攻击者C卷入个中

(1) C向B发起连接要求

(2) B向C发送寻衅D(一组随机数据)

(3) C等待A向B发起连接要求

(4) 当A向B发起连接要求时,C假造成B向A发送寻衅D

(5) A用源自明文口令的DESKEY对寻衅D进行标准DES加密得到相应E,并发往B

(6) C截获到相应E,将它做为针对(2)中寻衅D的相应发往B,并声称自己是A

(7) B从SAM中获取A的LM Hash、NTLM Hash,打算出DESKEY,并对寻衅D进行标准DES

加密

(8) 如果(7)中计算结果与C送过来的相应匹配,C被许可以A的身份访问B。

攻击流程

关于SMB relay攻击盗取NTML与shell请看这篇文章SMB Relay Demystified and NTLMv2 Pwnage with Python

整理了一下实际操作的步骤如下:

1. 首先天生一个反向shell:

2. 运行smbrelayx,指定被攻击者和天生的反向shell,等待连接。

smbrelayx.py -h 被攻击者ip -e 反向shell文件位置

3. 利用模块multi/handler。
侦听攻击机ip,攻击机监听端口

4. 在MySQL Server上运行如下的代码,则会产生shell。
相称于访问攻击机的smb做事,但实际上是盗取了mysql_server的身份

绕过技巧

绕过单引号

宽字节注入

SQL注入中的宽字节海内最常利用的gbk编码,这种办法紧张是绕过addslashes等对分外字符进行转移的绕过。
反斜杠()的十六进制为%5c,在你输入%bf%27时,函数碰着单引号自动转移加入\,此时变为%bf%5c%27,%bf%5c在gbk中变为一个宽字符“縗”。
%bf那个位置可以是%81-%fe中间的任何字符。
不止在sql注入中,宽字符注入在很多地方都可以运用。

MySQL版本号字符

Examples:

这样的查询语句是可以实行的,我理解为类似Python中第一行注释指定解析器一样#!/bin/sh

对付小于或即是版本号的语句就会实行

例现在朝的Mysql版本为5.7.17那么/!50717/及其以下的语句即可实行

字符编码绕过

前段韶光看到ph师傅的博客是谈论mysql字符编码的文章,大概意思如下,原文在这里

当涌现有以下代码时,指设置了字符编码为utf-8,但并不是全部为utf-8,而在详细的转换过程中会涌现意外的情形,详细可以看ph师傅的文章

在sql查询中

test.php?username=admin%e4中的%e4会被admin忽略掉而绕过了一些逻辑,还有一些类似于$e4这样的字符如%c2等

绕空格

分外字符绕过空格

Example:

括号绕过空格

Example:

and/or后插入字符绕过空格

任意稠浊+ - ~ !可以达到绕过空格的效果(可以现在本地测试,稠浊后须要的奇偶数可能不同)

实在一下的字符都可以测试

注释符&引号

编码绕过

关键字绕过

测试用例information_schema.tables

认证绕过

绕过语句:'='

绕过语句:'-'

比如登录的时候须要输入email和passwd,可以这样输入

类型转换

我们还有关于此的漏洞,就以一次CTF的题目来说(源码如下):

这里过滤了很多关键词了,须要用到类型转换了,这里我们用+号

这样就可以开始写脚本跑数据了

除了+号,其他算术操作符号也会发生类型的类型转换,例如MOD,DIV,*,/,%,-,

关于隐式类型转换的文章可以看这里

HTTP参数污染

当我们传入的参数为

http://sqlinjection.com/?par1=val1&par1=val2

进入到不同的Web Server就可能得到不同的结果,这里借鉴一下国外大佬一篇文章的总结,如下:

不同的web server的处理结果截然不同

这里也推举一篇国外的文章

实战正则过滤绕过

防御手段(代码以PHP为例)

像WAF之类防御手段自己无能为力常常打补丁就好,这里紧张提一下代码层面的问题

推举利用下面的办法进行查询:

参考

这篇文章紧张是做一个总结,有的点可能描述的不是很细致,可以自己再深入研究

https://www.defcon.org/images/defcon-17/dc-17-presentations/defcon-17-joseph_mccray-adv_sql_injection.pdf

https://www.ptsecurity.com/upload/corporate/ww-en/download/PT-devteev-CC-WAF-ENG.pdf

https://media.blackhat.com/bh-us-12/Briefings/Ristic/BH_US_12_Ristic_Protocol_Level_Slides.pdf

https://www.exploit-db.com/papers/17934/

http://wooyun.jozxing.cc/static/drops/tips-7299.html

http://www.cnblogs.com/helingfeng/p/6486854.html

http://voice0fblackhat.blogspot.com/2012/01/tut-waf-bypassing-tut-sharing.html

标签:

相关文章