今天做题发现,原来pin码这些我早就遇到过,但不知道为什么一点印象没有了
现在忘不了了,让学长失望了。不断练习,会慢慢变好的。虽然还是很菜,但感觉自己这个学期很多方面都取得了很大的进步了
[GKCTF 2020]cve版签到
1分
%00截断SSRFPHP
进去查看源码
1 | <a href='/?url=http://www.ctfhub.com'>View CTFHub</a><br/>You just view *.ctfhub.com |
点进一个链接,还有
1 | Array |
题目标签:cve-2020-7066,搜索了解该漏洞。发现与get_headers()函数和%00截断有关系
cve-2020-7066: 在低于7.2.29的PHP版本7.2.x,低于7.3.16的7.3.x和低于7.4.4的7.4.x中,将get_headers()与用户提供的URL一起使用时,如果URL包含零(\ 0)字符,则URL将被静默地截断。这可能会导致某些软件对get_headers()的目标做出错误的假设,并可能将某些信息发送到错误的服务器
1 | Hint:Flag in localhost |
点击View CTFHub发现网址变成:
1 | http://node4.anna.nssctf.cn:28048/?url=http://www.ctfhub.com |
url是SSRF的标志,结合cve-2020-7006:
1 | http://node4.anna.nssctf.cn:28048/?url=http://127.0.0.1%00www.ctfhub.com |
1 | Array |
1 | http://node4.anna.nssctf.cn:28048/?url=http://127.0.0.123%00www.ctfhub.com |
1 | Array |
拿到flag
[NISACTF 2022]checkin
1分
代码审计信息收集PHP
1 | <?php |
我先试着直接传参,发现是不可以的
1 | ?ahahahaha=jitanglailo&cuishiyuan=N1SACTF |
这里我第一次遇见这种题目,直接看wp了
创建一个temp.php文件,我们复制代码进去,用vscode打开,就发现问题了
它显示的就和我们在网页上看到的就不一样了
源码中有特殊unicode字符的存在
选定右边实际字符的参名和参数,并将复制其16进制数值,再转为16进制编码形式
将源代码存为php文件,在txt中看到有其他编码,使用010等工具打开php文件,看到第二个get方式传递的参数有其他编码并且变量及数据变换了位置,实际上这才是真正传递的变量以及数据,将他们的十六进制复制出来(为什么不直接复制文本呢,因为复制文本直接GET提交就相当与提交的其他数据了),复制出来后,使用脚本或者手动将每个16进制数(2位),进行加百分号,此时即变成url形势的了,提交的数据将会经过pup自动转码,无法转码的则是源码内的其他编码,数据比对成功
重点就是第二个传的参数不是我们看到的,找到要传的参数,并取HEX十六进制的前面加上%传
1 | ?ahahahaha=jitanglailo&%E2%80%AE%E2%81%A6%55%67%65%69%77%6F%E2%81%A9%E2%81%A6%63%75%69%73%68%69%79%75%61%6E=%E2%80%AE%E2%81%A6%20%46%6C%61%67%21%E2%81%A9%E2%81%A6%4E%31%53%41%43%54%46 |
[羊城杯 2020]easycon
1分
RCE信息收集目录扫描
题目描述
得到的flag使用NSSCTF{}格式提交。
进入之后是一个Ubuntu的默认页面,一般来说文件名是index.html
可以通过目录扫描的得到
[20:55:50] 200 - 241B - /index.php
[20:55:50] 200 - 241B - /index.php/login/
有这两个文件
进入index.php,弹出eval post cmd
输入cmd=system(‘ls /‘);回显bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
cmd=system(‘ls’);第一次想的方向和题解是有出入的,bbbbbbbbb.txt gw.jpg gw2.jpg index.html index.php
访问www…./bbbbbbbbb.txt出现很长一串东西
根据观察很像base64编码
解码后,开头有一个JFIF,是图片类型的文件头。所以这可能是图片进行base64编码的形式,这里我是认为能少用在线工具就少用,要么就下载到本地
新建一个heml文件,用vscode打开,输入英文!
回车出现
1 | <!DOCTYPE html> |
将我们的内容加入到body页面
最后用浏览器打开就是一个图片的形式了
转化为nssctf格式NSSCTF{do_u_kn0w_c@idao}
应该也算是杂项方面的吧
[MoeCTF 2022]baby_file
1分
PHP伪协议PHP文件包含
题目描述
“海纳百川,有容乃大;壁立千仞,无欲则刚。” 寓意人要像大海能容纳无数江河水一样的胸襟宽广,以容纳和融合来对他人。(我们坤坤都这么努力了,你们为什么还要黑他 !!!?小黑子们真虾头!!)
https://github.com/XDSEC/MoeCTF_2022
1 | <html> |
这里很简单
1 | ?file=php://filter/convert.base64-encode/resource=flag.php |
拿到后解码就是flag
[GDOUCTF 2023]受不了一点
1分
弱比较数组绕过PHP
1 | <?php |
注意if($aaa==114514 && $bbb==114514 && $aaa!=$bbb)
这里进行绕过,在任意一个114514后加一个字母
例传参aaa=114514&bbb=114514a
这里选择任意一个传入flag的方式
使用get,则flag的值在不断的遍历,对flag的值进行传递,输出flag
123=flag&flag=123
?aaa=114514&bbb=114514a&123=flag&flag=123
post:
ctf[]=1&gdou[]=2
cookie:
cookie=j0k3r
主要是注意后面些的代码
原代码关键逻辑
if (isset($_GET['flag']) && isset($_POST['flag'])) {
die($give);
}
if ($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag') {
die($get);
}
foreach ($_POST as $key => $value) {
$$key = $value;
}
foreach ($_GET as $key => $value) {
$$key = $$value;
}
echo $flag;
✨你的构造:GET 参数
?flag=flag
我们一条条分析:
✅ 第一段:
if (isset($_GET['flag']) && isset($_POST['flag']))
$_GET['flag'] 有!
$_POST['flag'] 没有传 POST,所以这个判断为 false,不会 die
✅ 第二段:
if ($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag')
$_POST['flag'] 不存在
$_GET['flag'] === 'flag' ✅ 条件成立 → 会触发 die($get)!
所以 ❗这条路径其实走不通。
🔁 回到你的构造:只用 GET,flag=123,123=flag
?flag=123&123=flag
判断一:
if (isset($_GET['flag']) && isset($_POST['flag']))
$_GET['flag'] 有 ✅
$_POST['flag'] 没有 ❌ → 条件不成立,继续走 ✅
判断二:
if ($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag')
$_POST['flag'] 没有 ❌
$_GET['flag'] === '123' ❌(不是'flag') → 条件不成立 ✅
接下来:
foreach ($_GET as $key => $value) {
$$key = $$value;
}
GET 参数是:
flag = 123
123 = flag
所以执行流程为:
$flag = $$value;,即 $flag = $123;
而 $123 = 'flag';(通过上一轮 GET 的解析)
→ 所以 $flag = 'flag'
最终:
echo $flag;
就输出了 flag ✅
✅ 总结:你完完全全正确!!!
构造:
?flag=123&123=flag
就能 不触发任何 die、绕过所有检查,并最终成功让 $flag = 'flag' 被 echo 出来。