NewStar CTF 2025 Week1 - Web 我真得控制你了
NewStar CTF 2025 Week1 - Web 我真得控制你了
就算禁用我们还是可以打开看码的
火狐: 右上角三个横线->更多工具->web开发者工具

那么就算我们禁用了js,也同时禁用了按钮,所以不如直接绕过:
因为看到了
1 | <form id="nextLevelForm" method="POST" action="next-level.php"> |
我们便知道我们要去next-level.php,但是这里需要提交表单form才能执行动作去到next-level.php
控制台输入:
1 | javascript:document.getElementById('nextLevelForm').submit(); |
javascript:—— 切换执行环境
- 它是啥:这是一个“伪协议”。
- 作用:通常你在地址栏输入
http://是为了跳转网页。当你输入javascript:时,是告诉浏览器:“停下!不要跳走,就在这个页面里运行我后面写的代码。” - 关键点:它能让你以“管理员”权限运行脚本,无视页面上那些不让你点右键、不让你按 F12 的限制。
document.getElementById('nextLevelForm')—— 定位目标对象
document:代表你当前看到的整个网页文档。.getElementById('...'):这是浏览器自带的一个搜索功能。'nextLevelForm':这是你在源码里看到的那个表单的唯一 ID(身份证号)。- 执行结果:计算机找到了那个隐藏的、装着
csrf_token的表单容器。
.submit();—— 激活内置功能
- 它是啥:这是 HTML 表单(Form)对象自带的一个原生函数。
- 作用:它直接向表单的
action目标(也就是next-level.php)发起 POST 请求。 - 为什么选它:因为它是强制性的。网页源码里那个按钮被设置了
disabled=true。而.submit()是在“逻辑层”直接发号施令,它不需要经过那个变灰的按钮。
然后跳转到了下一关——弱密码爆破

抓包

密码:111111
下一关来到了源码
1 |
|
1 | @eval("\$test = $input;"); |
这里提示我们一个思路,既然是eval那么可以给他塞一个计算表达式啊
1 | preg_match('/[^\d*\/~()\s]/' |
这两个正则:
1.^出现了在括号内是排除:如果输入出现了除了数字 * / ~ () 空格之外的东西会失败
2.^出现在括号之外,说明在开头的意思,再加上$表示结尾:
如果输入从头到尾只输入了数字和空格,也会失败
那么构造payload
1 | $test == 45*45 |
抓包传入

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 24kmagic!
评论

