zoukankan      html  css  js  c++  java
  • [极客大挑战 2019]BuyFlag

    0x00

    打开WEB界面如下

    大致浏览一下网页,在pay.php页面发现如下

    这里我们知道了几个获取flag需要满足的条件,查看该界面源码发现如下

    通过代码审计和以上条件综合得到如下:

    • 1.必须为CUIT的学生(暂时不知道如何使用)
    • 2.money需要传入100000000
    • 3.password需要通过 ==404的验证,但是还需要绕过is_numeric函数(这里我们可以根据php弱类型语言的特性进行绕过,令password=404a)
      我们进行如下请求

      得到如下结果,可能我们还忽略了某些参数,导致第一个条件不会使用

      我们使用BurpSuite抓包,来获得更多的信息,得到结果如下

      发现cookie里面的数据有点奇怪,将它修改为1,重新请求得到如下

      发现返回结果变了,看来第一个条件是这样使用,但是新的问题是数字太长(这里应该是对位数进行了过滤)
      我们在开发的时候比较较长的整型时,一般都是将其看成字符串进行比较的
      所以我猜测money的比较是使用php的字符串比较函数strcmp()函数
      php的strcmp()函数存在一些安全问题,当传入的类型不是字符串类型,函数就会发生错误,显示报错信息后会return 0
      strcmp()函数正确的使用方法中 0 表示相同,所以我们可以以此来绕过位数过滤
      修改数据包如下(money修改为数组类型),重新进行请求

      得到结果如下

    0x01 总结

    • 1.php弱类型语言 == 比较问题
    php == 比较字符串与整型,会将字符串转化成整型,后再比较
    字符串为字母开头转化为 0
    字符串为数字开头转化为 开头的一系列数字,去掉字符串部分
    
    • 2.php strcmp()函数安全问题
    strcmp()函数进行比较时,当传入结果不为字符串时 return 0,与正确使用时两字符串相同的返回结果一样
    
  • 相关阅读:
    ASP.Net无法连接Oracle的一个案例
    给Oracle添加split和splitstr函数
    笨猪大改造
    设计模式(一)策略模式
    jQuery select 操作全集
    现在的心情
    jquery 自动实现autocomplete+ajax
    c# 配置连接 mysql
    jquery.ajax和Ajax 获取数据
    C# 加密可逆
  • 原文地址:https://www.cnblogs.com/Wuser/p/13634128.html
Copyright © 2011-2022 走看看