逻辑漏洞是脑洞大开的一种漏洞形式,只要你想不到,没有你做不到的。作为安全测试的人员来讲,不要放过对任何一个参数进行大胆猜想的各种可能。逻辑漏洞挖掘一直是安全测试中“经久不衰”的话题。相比SQL注入、XSS漏洞等传统安全漏洞,现在的攻击者更倾向于利用业务逻辑层的应用安全问题,这类问题往往危害巨大,可能造成了企业的资产损失和名誉受损,并且传统的安全防御设备和措施收效甚微。

概念

逻辑漏洞是指由于程序逻辑输入管控不严,导致程序不能够正常处理或处理错误,一般出现在登录注册、密码找回、信息查看、交易支付金额等。一句话,就是程序员的思维逻辑不走常识路了。或者是岗不配位。思维可能源于为了编程而编程,或者最早的原始学习环境带入造成。

如何挖掘逻辑漏洞

确定业务流程—->寻找流程中可以被操控的环节—->分析可被操控环节中可能产生的逻辑问题—->尝试修改参数触发逻辑问题
[

](http://192.168.182.147/vul/overpermission/op1/op1_mem.php)

会使用到工具

burpsite 方便对逻辑业务里面的参数进行修改和重放

先举个粒子

打开webug的靶场docker,选择越权修改密码。
image.png
即可来到一个登录页面,要求属于后台账号密码。后台账号和密码分别输入admin和admin即可进入。
image.png
进入的界面如下:
image.png

http://192.168.182.147/pt_env/control/auth_cross/cross_auth_passwd2.php?id=1

旧密码,我们知道是:admin
既然程序为我们提供了修改密码的功能,我们修改密码以后,再数据库了,立即就能反馈出来。于是我们在数据库这边也打开了上帝视角,在数据库里去查看。

如何进入数据库

mysql -u root -p enter your password: toot use webug; select * from user_test;

image.png
请在线修改密码(此时此刻的默许情景应该是告诉我们,修改的是自己的密码吧?!),然后观察后台数据库里admin用户的password字段的变化。

开脑洞时间

用你智慧的双眼去发现一下整个页面,包括源代码,url,视觉,听觉,能有点什么发现吗?
我发现url地址那里有个id=1的数字,这个数字有什么特别的意思吗?从程序员的思维来看问题是比较直接和本质的。

  1. id=1,代表数据库里的第一条记录,这里面的第一条记录不是admin就是版主。
  2. id=1,可以修改账号,id=2的话也可以修改账号吗?
  3. id这个参数就是序号的意思。

于是,把id修改成2后,再次修改密码,页面虽然没有给我们什么明确提示。但去后台,我们发现,id=2 的用户的密码被改掉了。
image.png
image.png
image.png
从上图的3步指示,我们已经看到用户2的密码被我们修改掉了。

漏洞成因

程序员为了完成密码修改的任务,直接根据地址栏传入的id,相对应的去修改对应id的密码字段。需知道,外部传入的任何数据,如果不经过筛选和处理,都是非常危险的。