前言
逻辑漏洞
因为代码的逻辑产生了问题所产生的漏洞
A -> B -> C
A -> C
常见逻辑漏洞
- 验证码绕过
- 密码找回
- 支付漏洞
- 越权漏洞
验证码
验证码的核心:区分用户是计算机还是人的公共全自动程序
- 如果没有验证码是不是就可以尝试用脚本去跑密码
- 6位 =100w种组合 (输错密码不会冻卡)
- 人脑的记忆是有限、人会有一些自己的习惯
弱密码
- 密码中存在名字、身份证、生日、电话号码
- 名字的缩写+生日
验证码绕过
- 识别并执行:代码基础(一般不一定会被认为是漏洞)
- 逻辑产生问题 - 漏洞:依靠的是程序逻辑(利用简单)
三、验证码绕过的常见姿势
前端验证码[JS处理]
1、前端验证验证码,并没有后端验证。
2、直接抓包然后进行跑数据包,反正有没有验证码的阻碍
任意验证码
验证码设置了但是并没有效验,乱输验证码也能够成功的登录(估计老板没给开发工资吧)
验证码重复使用
验证码可以重复使用,比如现在的验证码1111,然后虽然你登录失败后验证码会变,但是你输入1111他却判定你验证码正确(常见)
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0169672
验证码空值绕过
比如:我们现在抓一个包,发现登录参数是user=admin&password=admin&yzm=4123。
yzm验证码参数,但是我们如果去掉yzm的传参我们就可以绕过验证码机制,直接传参user=admin&password=admin,验证码就失效了。
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0155066
1、删除验证码可以绕过
2、输错密码两三次才需要输入验证码(替换Cookie\用户绑定)
3、if(如果有验证码传参){验证码校验}else{执行执行账号密码登录}
4、Cookie和Session
(1)Cookie 给用户的
(2)Session 和 Cookie 是绑定的
5、爆破
不仅仅是爆破密码 => 不断地替换密码(后台、前台都可以)
爆破账号:拿一个简单的密码,不断地去替换账号
脚本识别验证码
验证码干扰过低,轻松使用脚本识别
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0194576
验证码在前端输出
1、验证码会在HTML页面输出。
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0146767
2、前端源码你是知道的,写个简单的脚本就可以获得
验证码可控制
验证码可控制,比如他的验证码包含在URL里面,是一个URL传参,我们可以把URL设置定,那么验证码可控制。
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-071289
验证码有规则
验证码有规则,比如是时间戳的后6位(rand函数进行随机数)
万能验证码
- 有万能验证码,验证码无论是什么,只要输入000000就能直接绕过
- 通讯公司?超级密码:000000(设备 -> 做一些调试)
验证码藏在Cookie里
验证码有的时候会藏在cookie里面,分析一下是不是存在验证码的参数
图片验证码太少
图片验证码,类型太少,容易识别
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0102178
多次登录后才出现验证码绕过
- 基于session
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0114450 - 基于IP给验证码:Steam(登录验证码)
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-080327
- 换IP[脚本换IP -> 代理池、自搭建免费代理池]
- 换IP[X-FORWARDED-FOR: 127.0.0.1]
- 基于用户:爆破用户名,而非爆破密码
密码找回漏洞
验证码:是区分用户的身份(手机验证码、邮箱验证码)
验证码发送后前端返回
验证码无次数限制可爆破
4位 => 1w种组合 (5分钟 10分钟 15分钟过期)
6位 => 100w种组合
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0155994
验证码可控
2017年6月1号 法律里程碑 网络安全法
法律是有滞后性
但是不要做违法犯罪的事情
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-086716
直接修改密码页面
越权漏洞
自己验证码通过改包然后修改他们密码
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0102205
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2013-016896
密保问题
在注册之前,通过预先设定一个密保问题,忘记密码时,通过此密保进行认证,认证成功进入密码修改页面。
1、密保问题可能容易直接被猜测 (比如很多学校的知道学号和身份证号码就可以重置校园通的密码)
2、密保问题答案页面中显示(数据包里面可能自带了密保答案,可能在JS里面)
五、靶场做法-初识代码审计的魅力
(一)常规拿shell:SQL注入、文件上传
(二)代码审计拿shell
1、靶场使用的是一个CMS,叫做UsualToolCMS-8.0-Release,源码课件中有,后台存在验证码绕过漏洞。
2、进入后台之后我们其实也还是只能操作网站,如果想要操纵目标计算机就需要后台Getshell,想办法让自己的一句话木马到目标网站上。
(以往都是上传,但是其实不需要上传也能把自己的一句话木马搞到目标站点上)
3、打开cmsadmin/a_templetex.php
4、file_put_contents 是写文件,这个在条件竞争中接触过
5、看这个$content如果能由我决定,是不是就可以写一句话木马了?
6、$filename如果由我控制的话是不是就可以决定写的文件名字了?
7、在这里很明显$content是获取了POST传参
8、在这里很明显$filename是获取了POST传参
9、那只要确定传参不会被过滤、代码能执行到这一步,那就达成写马的一切条件了。
靶场实操



发现显示并不一样,用户名是admin
抓包跑密码

密码是root

成功进入后台
对CMS代码进行分析,这里存在漏洞

通过构造
对这个页面进行抓包

把数据包修改为post传参

写入马


得到shell
Comments NOTHING