Web系统常见安全漏洞介绍及解决方案-sql注入
来源:http://www.tudoupe.com时间:2022-07-31
先看一下目录
- 一、常见漏洞类型
- 二、SQL注入
- SQL注射器危险及可能原因
- 2、场景重现
- 3、sql盲注
- 4、检测?法
- 5、防护?案
- 三、使用ORM框架
一、常见漏洞类型
关于网络安全测试,主要有以下攻击方法:
- XSS跨站脚本攻击
- CSRF跨站请求伪造
- 点击劫持(覆盖用户页面上方透明的iframe)
- h5新标签漏洞
SQL注入- 跨目录访问
- 缓冲区溢出
- cookies修改
- Htth方法操作(包括隐藏字段修改和参数修改)
- 命令行注入
今天的讨论主要是SQL注入问题。
二、SQL注入
SQL注射器危险及可能原因
严重性:高
类型:应用级别测试
WASC威胁分类:WASC-19 SQL Injection(sql注入)
WASC对脆弱性分类参考布尔法的介绍
CVE参考:不适用
CVE 的英文全称是“Common Vulnerabilities & Exposures”通用漏洞披露。CVE就像字典。为广为人知的资讯保安漏洞或暴露的弱点提供公开名称。使用一个共同的名称,帮助用户在自己的独立脆弱性数据库和脆弱性评估工具中共享数据,尽管这些工具很难结合起来。这使得CVE成为安全信息共享的“关键字”。如果 vulnerability报告中发现一个漏洞,如果有CVE名称,您可以在任何其他CVE兼容的数据库中快速找到相应的补丁信息,解决安全问题。
安全风险:
- 查看、修改或删除数据库条目和表 - SQL Blind Notes
- 可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务 —跨站的脚本编制
可能原因:
用户输入时不正确执行危险字符的清洁
2、场景重现
攻击者LiSQL注意到一个漏洞,可以获取数据库中的多个信息(例如管理员的后端密码),从数据库中删除内容。在特殊情况下,可以修改数据库的内容或将它们插入数据库,如果数据库权限分配有问题,或者数据库本身有缺陷,然后攻击者直接通过SQL Notes漏洞访问Web壳或服务器系统权限。
例如,如果应用程序根据用户输入(如用户名和密码)查询用户帐户数据库表,以认证用户,攻击者可以将恶意数据注入查询的用户名部分(和/或密码部分),查询可以更改为完全不同的数据复制查询,可以修改数据库查询,或者在数据库服务器上运行壳牌命令查询。
一般来说,攻击者将逐步实现这个目标。 他首先学习SQL查询的结构,然后利用这个知识来封锁查询(通过对查询语法数据注入更改),使执行的查询与预期的不同。
$user和$pass是用户在登录页面中输入的值(可能来自GET请求查询参数),它也可以来自 POST请求主体参数。此查询的一般用法,它的值是: u s e r = j o h n, user=john, user=john, password=secret123。形成的查询如下:
如果数据库中没有用户密码匹配,预期查询结果为0,如果该阵列存在(即数据库中的用户称为 john),它的密码是"秘密123"),结果便是 >0。这是应用程序的基本认证机制。但攻击者可以以下列方式更改查询:
攻击者可以提供一个由单数字符(')组成的输入,要使数据库发送错误消息,它通常包含关于SQL查询的宝贵信息。攻击者只是在发送的请求中包含了用户值,包含密码中任何值(例如 foobar)。结果便是下列(格式错误)的 SQL 查询:SELECT COUNT(*) FROM accounts WHERE username=''' AND password='foobar'
该代码查询数据的后端执行可能导致语法错误,这时攻击者便得知查询是根据表达式 username=‘ u s e r ′ a n d p a s s w o r d = ′ user’ and password=’ user′andpassword=′pass’ 来构建的。一旦攻击者了解查询格式的关键信息,下一步只需使用:
user =' or 1=1 or ''=' password = foobar
生成的查询如下:
该SQL代表查询“帐户”表中的所有记录,因为表达式1=1总是正确的,用户(攻击者)也被视为有效。这种检测方法有几个变量,例如,发送 '; or '(您应该记住,几乎所有供应商都有自己的独一无二的SQL版本。具体地说,发送出有1 = 1,也会生成错误消息,这个消息泄露了列名称的信息。
3、sql盲注
降低 SQL 注入攻击风险的一般方式,是禁止详细的 SQL 错误消息,攻击者通常便利用这些消息(如上述示例所示报错信息提供了sql具体内容),轻易找出容易遭受“SQL 注入”的脚本。
这种隐藏报错信息的解决方案还不能够真正解决问题,攻击者可以通过sql盲注技术进行攻击,这种注入方法不需要依赖返回 SQL 错误消息,便能找出容易遭受“SQL 注入”的脚本。
sql盲注要求修改发送请求的参数(嵌入SQL查询的参数),该修改包括使用 AND 布尔表达式匹配原始字符串,使sql条件能够直接得出 true或 false,最终的结果应该与原来的结果相同(例如登录成功)或不同(例如登录失败)。在一些罕见情况下,也可以得到真的OR表达式。
4、检测法
- SQL Notes的漏洞可能存在于系统传输参数中,这些参数将数据库绑定到操作中。
- GET, POST参数。
- COOKIE参数。
- http请求头。主机头、引站点(referer)、User-Agent和X-Forwarded-For等。
- 测试SQL注释. 创建SQL注释测试句子测试输入参数.
- 特殊符号:单位数,子位数,网络服务器响应错误。
- 条件响应:and 1=1、and 1=2、’ or ‘1’=‘1、’ or ‘1’='2,两次web服务器响应不同。
- 时间延迟: sleep(5),等待延迟'0:0:5',系统服务器延迟响应。
- 参数添加:增加和减少数值类型的操作,字符类型将数据库连接符号转换为连接。 系统服务器响应与原始响应相同。
- SQL注释:为完成上述测试,请构造SQL注释或让SQLMAP检测脚本构造注释。
5、防护案
解决这个问题的办法是筛选、校正或提取用户输入参数?预处理参数?表格。
通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意 SQL 查询、嵌入将在客户端执行的 Javascript. 代码、运行各种操作系统命令,等等。
建议筛选下列所有字符:
[1]|(垂直符号)
[2] & (& 符号)
[3];(分号)
[4]$(美元符号)
[5]%(百分比符号)
[6] @(以符号)
[7]’(单一引言)
[8] "(引号)
[9]'(反斜角字典)
[10](防滑栏翻译)
这就是我们的方法。我们将特殊代码添加到黑名单中,将包含黑名单中的特殊代码的查询筛选到全球听众中,并基本上解决SQL注入问题。

三、使用ORM框架
使用ORM框架进行SQL注入是积极的,在SQL注入的实际解决方案中,另一个困难是应用复杂性后,代码数量庞大,很难找到SQL注入可能存在的地方。ORM框架为我们提供了一种方便的方法来发现问题。举例来说,迈巴斯。它生成的SQL语句结构编写在XML文件中,它支持动态sql,您可以将动态变量${keyid}插入SQL声明中,如果用户可以控制这个变量,将存在SQL注入中的漏洞。
而静态变量#{userid}是安全的,因此,当使用Mybatis时,你只需要搜索所有映射文件中的动态变量。当业务需要使用 dynamicsql时,可以作为特例处理,例如,在上层代码逻辑中,对变量施加严格控制。确保没有注射问题。
先自我介绍一下,他高中毕业了13年,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。了解大多数年轻的Java工程师,想要升技能,经常需要找到自己的成长或向班上汇报。但对于培训机构来说,学费大约是人民币,着实压力不小。当你不在系统时,自我学习的效率很低,而且很持久。也很容易停止天花板技术。所以我为你收集了一个"java开发工具"初衷也很简单,这是一个想帮助自己学习的朋友,却不知道该从哪里学习。同时减少每个人的负担.添加下方名片,你可以得到完整的学习信息
相关新闻
- 2023-04-16 2台电脑怎么共享(2台电脑怎么共享
- 2023-04-16 主板检测卡代码(电脑主板检测卡代
- 2023-04-16 dnf未响应(dnf未响应老是上不去)
- 2023-04-16 ppoe(pppoe拨号上网)
- 2023-04-16 网速不稳定(网速不稳定是路由器的
- 2023-04-16 wds状态(Wds状态成功)
- 2023-04-16 光标键(光标键不动了怎么办)
- 2023-04-16 电脑提速(电脑提速100倍的方法)
- 2023-04-16 切换用户(切换用户怎么切换回来
- 2023-04-16 数据包是什么(产品数据包是什么
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
