事实证明这套程序验证码没有办法存在绕过。具体分析在t00ls上。但是这套程序获取验证码的逻辑是存在问题的,思路是可以借鉴的。

第一次请求后台是,红线位置是请求验证码的url。

当我们第一次请求时,也就是没有点击提交。程序会包含这个前台页面。

跟进前台页面,前台页面会通过img的src属性加载验证码。

<img id="code" src="../index.php?c=api&a=checkcode&width=85&height=26" align="absmiddle" title="看不清楚?换一张" onclick="document.getElementById('code').src='../index.php?c=api&a=checkcode&width=85&height=26&'+Math.random();" style="cursor:pointer; margin-top:-3px;"></td>

跟进生成验证码图片的代码(api控制器下的checkcodeAction方法),加载了image类,继续跟进:

     public function checkcodeAction() {
$api = xiaocms::load_class('image');
$width = $this->get('width');
$height = $this->get('height');
$api->checkcode($width,$height);
}

这里将生产的验证码赋值到session中了。

上面我们清楚了,验证码获取的流程。

我们看下验证码怎么验证的。

跟进checkCode函数。

     protected function checkCode($value)
{
$code = $this->session->get('checkcode');
var_dump($value);
$value = strtolower($value);
$this->session->delete('checkcode'); //删除session中的验证码
return $code === $value ? true : false;
}

就是我们post的验证码和session中生产的验证码比较。关键这里有一句删除验证码,就导致了问题。

捋一下逻辑,当我们第一次请求的时候submit为空,就不会进入if分支,就会包含前台页面,前台页面就会请求获取验证码。

当我们第一次提交验证码时候,sumbit就不为空了,会进入if分支。然而第一次提交验证码后会把存验证码的session删掉。session=null

当我们第二次请求的时候,submit不为空,继续进入if分支,就不会请求验证码。session=null 当我们post也是null时,就能绕过验证码了。

Xiaocms验证码绕过分析的更多相关文章

  1. WEB漏洞攻击之验证码绕过浅析

    最近安全部门对WEB系统进行了一次漏洞整改,发现了某个系统存在验证码绕过风险. 根据安全部门提供的信息,该漏洞构造场景是通过一层中间代理(Burpsuite Proxy)拦截客户端与服务端的请求,通过 ...

  2. 安全性测试入门 (五):Insecure CAPTCHA 验证码绕过

    本篇继续对于安全性测试话题,结合DVWA进行研习. Insecure Captcha不安全验证码 1. 验证码到底是怎么一回事 这个Captcha狭义而言就是谷歌提供的一种用户验证服务,全称为:Com ...

  3. Web安全之验证码绕过

    一,验证码绕过(on client) 首先让burpsuite处于抓包状态,打开pikachu的验证码绕过(on client)随意输入账号和密码,验证码先不输入,点击login,会提示验证码错误 然 ...

  4. weblogic之CVE-2017-3248,CVE-2018-2628,CVE-2018-2893,CVE-2018-3245反序列绕过分析

    说一下复现CVE-2017-3248可以参考p牛的环境,p牛的环境CVE-2018-2628实际就是CVE-2017-3248,他漏洞编号这块写错了. 攻击流程就如下图,攻击者开启JRMPListen ...

  5. 【代码审计】VAuditDemo 后台登录功能验证码绕过

    在 admin/logCheck.php中 $_POST['user']和$_POST['pass'] 未经过任何过滤或者编码处理就传入到$query中,可能存在万能密码绕过机制 但是$pass经过了 ...

  6. burp暴力破解之md5和绕过验证码

    Burpsuite是一个功能强大的工具,也是一个比较复杂的工具 本节主要说明一下burp的intruder模块中的2个技巧 1.md5加密 我们在payload Processing中的add选项可以 ...

  7. Nuxeo 认证绕过和RCE漏洞分析(CVE-2018-16341)

    简介 Nuxeo Platform是一款跨平台开源的企业级内容管理系统(CMS).nuxeo-jsf-ui组件处理facelet模板不当,当访问的facelet模板不存在时,相关的文件名会输出到错误页 ...

  8. 使用selesium和pytesseract识别验证码,达到登录网页目的

    关于验证码问题,大多可以在网上了解到目前有四种解决方案:1.开发注释验证码2.开发开一个“后门”,设置一个万能码,输入万能码则通过3.通过cookies绕过验证码4.图形识别技术 前三种是比较快速也是 ...

  9. python验证码识别

    关于利用python进行验证码识别的一些想法 用python加“验证码”为关键词在baidu里搜一下,可以找到很多关于验证码识别的文章.我大体看了一下,主要方法有几类:一类是通过对图片进行处 理,然后 ...

随机推荐

  1. Oracle中常用的命令,随着学习进度总结

    原创作品,欢迎转载,转载请在文章显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10016569.html 开始之前先注意:在linux中切换到sqlp ...

  2. 最大子序列和问题--时间复杂度O(NlogN)

    最大子序列和问题--时间复杂度O(NlogN) package a; /* * 最大子序列和问题,时间复杂度O(NlogN) */ public class Sequence { private st ...

  3. MySql的InnoDB存储引擎--索引

    索引分类: 1.聚集索引:索引顺序与物理顺序一致. MySql 的 InnoDB 中,主键索引就是聚集索引.好处是,进行搜索的时候,因为索引和物理顺序一致,所以找数据的时候更快. 2.非聚集索引:索引 ...

  4. Thymeleaf学习记录(5)--运算及表单

    Thymeleaf文本及预算: 字面 文本文字:'one text','Another one!',... 号码文字:0,34,3.0,12.3,... 布尔文字:true,false 空字面: nu ...

  5. python单继沿用父类属性的两种方法

    方法一 在子类中用父类调用其init方法(不建议) 方法二 在子类中使用super获得父类的方法 class Aaimal(object): type_name = '动物类' def __init_ ...

  6. [Code+#4]最短路

    考虑xor运算的自反性 我们可以直接枚举二进制位异或来进行转移 这样边数大约是\(n \log n\)级别的 总复杂度\(\Theta((n\log n+m)\log n)\) #include&qu ...

  7. LOJ6066:「2017 山东一轮集训 Day3」第二题

    传送门 二分答案 \(k\),考虑如何 \(hash\) 使得做起来方便 把每个点挂在 \(k+1\) 级祖先上,考虑在祖先上删除 这道题巧妙在于其可以对于 \(dfs\) 序/括号序列 \(hash ...

  8. 探索canvas画布绘制技术

    图片来自KrzysztofBanaś 下面我们开始尝试研究不同的绘图风格和技术 - 边缘平滑,贝塞尔曲线,墨水和粉笔,笔和印章和图案 -等等.事实证明,网上没有太多关于此的内容.在下面的示例中,您请大 ...

  9. spring 与mybatis 整合总结

    刚看完同学给我的代码,我忍不住爆粗.去TMD,写得像坨屎,恶心,乱七八糟,这让我怎么交差??一行代码注释都没有,还很自以为是的傲慢.“这都不懂?这就是Mybatis啊,有很多种方法实现.....” 操 ...

  10. 在linux中给你的应用做压力测试

    在linux中给你的应用做压力测试 作者: 立地 邮箱: jarvin_g@126.com QQ: 511363759 一.webbench 1.在Ubuntu中安装webbench —支持get,h ...