黑客技术:一个“登录框”引发的安全问题(6)

3)搜索型。
搜索型注入:简单的判断搜索型注入漏洞是否存在的办法是:
先搜索(’),如果出错,说明90%存在这个漏洞。
然后搜索(%),如果正常返回,说明95%有洞了。
然后再搜索一个关键字,比如(2006)吧,正常返回所有2006相关的信息。
再搜索(2006%‘and 1=1 and ‘%’=’)和(2006%‘and 1=2 and ‘%’=’)

不同的SQL服务器连结字符串的语法不同,比如MS SQL Server使用符号+来连结字符串,而Oracle使用符号||来连结:

?ProdName=Book’ 返回错误
?ProdName=B’+’ook 返回正常
?ProdName=B’||’ook 返回正常说明有SQL注入

2.如果应用程序已经过滤了’和+等特殊字符,我们仍然可以在输入时过把字符转换成URL编码(即字符ASCII码的16进制)来绕过检查。

示例:暂无

此处常常伴随着万能密码漏洞,故不做展示
风险分析:在输入URL和表单处,攻击者通过输入精心构造的SQL语句,对数据库记录进行增删改查,或直接获取服务器权限。攻击者实施SQL注入攻击时大多借助自动化注入工具,如穿山甲、明小子、sqlmap、Havij等。

修复方案:

SQL注入的主要原因是程序没有严格过滤用户输入的数据,导致非法数据侵入系统。

1)对用户输入的特殊字符进行严格过滤,如’、”、<、>、/、*、;、+、-、&、|、(、)、and、or、select、union。

2)使用参数化查询(PreparedStatement),避免将未经过滤的输入直接拼接到SQL查询语句中。

3)Web应用中用于连接数据库的用户与数据库的系统管理员用户的权限有严格的区分(如不能执行drop等),并设置Web应用中用于连接数据库的用户不允许操作其他数据库。

4)设置Web应用中用于连接数据库的用户对Web目录不允许有写权限。

5)使用Web应用防火墙。

任意用户密码修改/重置

漏洞描述:

可通过篡改用户名或ID、暴力破解验证码等方式修改/重置任意账户的密码。

测试方法:

密码修改的步骤一般是先校验用户原始密码是否正确,再让用户输入新密码。修改密码机制绕过方式大概有以下三种:

1.如果输入新密码的接口可以直接访问,那么在未知原始密码的的情况下即可直接修改密码,通常知道了他人的用户名即可任意修改他人的密码。

2.如果系统未校验修改密码的用户身份,那么在提交修改密码请求时,攻击者通过输入密码,将用户名或者用户ID修改为其他人的,即可成功修改他人的密码。

3.当修改密码时系统需要电子邮件或者手机短信确认,而应用程序未校验用户输入的邮箱和手机号,那么攻击者通过填写自己的邮箱或手机号接收修改密码的链接和验证码,以此修改他人的密码。

密码重置机制绕过攻击方式主要有以下两种:

1.通过正常手段获取重置密码的链接,猜解链接的组成结构和内容(如用户名或者时间戳的MD5值)。在得知他人邮箱的情况下,构造重置他人密码的链接。

2.在得知他人手机号的情况下,通过穷举手机验证码重置他人的密码。

示例:

我遇到的密码重置漏洞,是忘记密码的时候会自动发送一条手机短信至绑定用户的手机中,而我做的则是在他发送之前拦截,而后修改手机号码,成功的接受到了手机短信,而后重置用户密码。
还有一种是手机短信验证成功后,重新设置密码时拦截数据包,通过修改类似username、userid等方式修改他人的账户密码。

风险分析:

密码修改功能常采用分步骤方式来实现,攻击者在未知原始密码的情况下绕过某些检验步骤修改用户密码。
重置密码过程一般是首先验证注册的邮箱或者手机号,获取重置密码的链接(一般会包含一串唯一的字符串)或者验证码,然后访问重置密码链接或者输入验证码,最后输入新密码。密码重置机制绕过攻击是指在未知他人的重置密码链接或手机验证码的情况下,通过构造重置密码链接或穷举手机验证码的方式直接重置他人的密码。

修复方案:

1.一次性填写校验信息(原始密码、新密码等)后再提交修改密码请求。

2.对客户端提交的修改密码请求,应对请求的用户身份与当前登录的用户身份进行校验,判断是否有权修改用户的密码并对原始密码是否正确也进行判断。

3.不应将用于接收验证信息的手机、邮箱等信息全部明文传到客户端,应对手机、邮箱等信息进行屏蔽处理,或不将此类信息返回到客户端。

4.对原始密码进行了验证的情况下,限制输入原始密码的错误次数,防止攻击者暴力破解原始密码。

5.重置密码链接中的关键信息应随机化,不可预测(例如token机制),且禁止将关键信息返回到客户端。

目录遍历

漏洞描述:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxsdz.html