11-1.逻辑漏洞-订单金额任意修改
1)逻辑漏洞介绍
逻辑漏洞挖掘一直是安全测试中"经久不衰"的话题。相比SQL注入、XSS漏洞等传统安全漏洞,现在的攻击者更倾向于利用业务逻辑层的应用安全问题,这类问题往往危害巨大,可能造成了企业的资产损失和名誉受损,并且传统的安全防御设备和措施收效甚微。
在存在功能性的接口中,都有可能存在程序逻辑功能的安全问题。例如:支付处的任意金额修改。
2)订单处逻辑分析
用户-->购买商品-->结账-->成功购买
商品的价格如何获得?
3)订单处逻辑漏洞
订单处的逻辑漏洞,大部分在于程序未能正确处理商品价格、数量等。
1、商品价格可以任意修改。
2、商品价格在后端存储,但是价格、数量可以修改。例如:输入-1价格等
<?php
if(isset($_POST["submit"])){
$num = $_POST["num"];
$price = $_POST["price"];
echo "需要支付:".$num*$price."元";
}
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>login price</title>
</head>
<body>
<h1>提交订单</h1>
<form method="post" action="">
手机名称:test
<br>
数量:<input type="text" name="num">
<br>
<input type="hidden" name="price" value="100">
<br>
<input type="submit" name="submit" value="确定">
</form>
</body>
</html>
4)逻辑漏洞防御
1、订单多重验证。
2、数额巨大采用人工验证。
11-2.逻辑漏洞-密码重置(简单验证码)
1)密码重置or密码找回
实际情况下,用户很有可能长时间不使用该系统忘记了对应的用户密码,此时系统应该提供密码找回或修改功能。但是大多数提供的是密码重置功能,而非密码找回。
明文存储和密文存储
2)密码重置逻辑分析
用户-->重置模块-->发送验证码,验证身份-->成功重置
3)密码重置处逻辑漏洞
如果手机验证码或邮箱验证码为一个4位数,且没有机制来验证输入次数,那么此时存在被破解的风险。
<?php
$code = 1234
echo $code
if(isset($_POST["submit"])){
if($_POST["code"] == $code){
echo "修改成功";
}else{
echo "验证码错误";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>重置密码</title>
</head>
<body>
<form action="" method="post">
新密码:<input type="password" name="new_pass">
确认密码:<input type="password" name="yes_pass">
手机验证码:<input ttype="text" name="code">
<input type="submit" name="submit" value="确认">
</form>
</body>
</html>
4)逻辑漏洞防御
1、设置复杂验证码,例如6位数字。
2、设置限制次数,比如3次输入错误需要重置验证码或者设置时间1分钟有效等。