polarCTFweb刷题记录(简单)02
polarCTFweb刷题记录(简单)02
SSTI
直接用焚靖cat /flag
签到题
查看网页源代码:

抓包发现cookie一行有关键词相关,修改no为yes,然后Base64解码切换路由。

得到源代码:
1 | |
1.需要传入GET型参数file 2.把file中的../替换为空 3.把file参数当作php文件执行
1 | |
JWT
随便注册登陆一下账号,
抓包后看到hint:

解码jwt看到签名验证失败,需要secret,

用jwt-cracker爆一下密码:

修改数据包,把username改成admin得到新的JWT数据。

修改JWT之后可以看到用户名已经改为admin

查看个人信息得到flag:

Login
是一个登陆界面,

查看源代码有学号密码,输入后登录成功。修改账号为20200102后出现一个f,爆破账号得到flag:


1 | |
rce1
1 | |
1.检查 URL 中是否有 ip 参数,并且该参数是否有值。2.将该 ip 参数值赋给 $ip 变量。
3.$ip 地址包含空格->将匹配到的空格信息(存储在 $m 中)赋值给 $res,而不是执行 ping 命令。
4.如果 IP 地址中没有空格->构造并执行 ping 命令,用 exec() 执行命令并将结果保存到 $res 中。
1 | |

1 | |

upload

根据提示传参得到源代码:
1 | |
1.定义黑名单。
2.获取上传文件的文件名,去掉两端空格。
3.将文件名中与黑名单中的扩展名匹配的部分替换为空。
4.$img_path 是目标路径,上传的文件将被存储到 UPLOAD_PATH 目录下,rand(10000,99999) 生成一个随机数加到文件名之前。
直接双写绕过,返回了文件上传路径:

然后用蚁剑连接。

XFF
修改XFF为1.1.1.1:

swp
dirsearch扫到一个叫做/.index.php.swp的备份文件。访问/.index.php.swp

1 | |
- 要传入POST型参数$xdmtql
- 参数不能与
/sys.*nb/is正则匹配 - 参数不能是数组
- 结果的sys nb要在第一位
使用回溯绕过法:
1 | |

投喂
dirsearch扫描发现有Dockerfile


暴露了flag在的位置,我们可以直接访问:

机器人
访问robots.txt得到一半flag和flag所在目录


井字棋

查看游戏源代码,这是一个判断哪位玩家获得胜利的函数。
代码解释:
1 | |
- **
fetch("game.php", {...})**:
- 这是一个 JavaScript
fetch请求,用来向服务器发送数据。fetch是一个现代的 Web API,用于发送 HTTP 请求。这里它向game.php发送了一个POST请求。
- **
method: "POST"**:
POST方法意味着请求的目的是发送数据(而非获取数据,GET通常用来获取数据)。通常用来提交表单数据或其他内容。
- **
headers: {"Content-Type": "application/json"}**:
headers指定了请求的头部信息,这里设置Content-Type为application/json,表示请求体中传递的数据是 JSON 格式。
- **
body: JSON.stringify({ winner: winner })**:
body代表请求的主体数据,这里它将{ winner: winner }转换成一个 JSON 字符串并发送。winner是一个变量,它的值可能是表示某个玩家或游戏条件的数据,具体取决于前端的状态。
1 | |
**.then(response => response.json())**:
- 这个
.then()接收服务器的响应并将其转换为 JSON 格式(通过response.json())。response是后端返回的原始响应数据。 response.json()返回的是一个包含 JSON 数据的 Promise,进一步解析后可以得到data。
**if (data.flag) {...}**:
- 这里检查
data中是否包含flag字段。如果存在flag字段,表示胜利条件达成,弹出一个包含flag内容的提示框(alert("Flag: " + data.flag))。
向 game.php 发送 POST 请求,把winner值改成player。

button
查看js代码,把9999999999999…改成0然后访问路由

查看源代码

upload1
直接上传png改后缀

