NPUCTF部分WP

[我的第一次ctf线上比赛经历]

*西工大ctf公开赛

*由于是校外通道,题目做得异常的艰辛。。。。

*这次比赛学到了许多,这次经历还是挺不错的,能做出题目也是很开心呀。。

*菜还是菜得明白哈哈哈哈哈,加油吧!


[web]查源码(50)

直接F12得到flag


[web]RealEzPHP(190)

ps:我发现题目的分数会越来越少。。。

这题在做题的过程中学到了许多。

拿到题还是熟悉的骷髅头,查看源码发现了time.php页面,发现源代码:

 <?php
 #error_reporting(0);
 class HelloPhp
 {
     public $a;
     public $b;
     public function __construct(){
         $this->a = "Y-m-d h:i:s";
         $this->b = "date";
     }
     public function __destruct(){
         $a = $this->a;
         $b = $this->b;
         echo $b($a);
     }
 }
 $c = new HelloPhp;
 ​
 if(isset($_GET['source']))
 {
     highlight_file(__FILE__);
     die(0);
 }
 ​
 @$ppp = unserialize($_GET["data"]);

一眼可见,核心代码应该是unserialize那里的反序列化操作。

之前一直不知道反序列化是啥(之前部门讲过,不过那时候连php都不怎么会Orz),就去B站看了看,看了一个同时大一新生的up主发的视频,大概已经了解得比较清楚了,感谢up主,已三连哈哈哈哈哈。

大概可以知道传入data参数为序列化之后的字符串,反序列化后触发__destruct函数里面的操作,打印我们想要的结果,其中变量a,b的值是我们可控的。

然后就开始构造payload,最开始不知道$b($a)表示啥意思,手动敲了敲代码,发现应该是b的内容可以当函数名字来调用。

既然可以直接调用函数的话,首先想到的是一句话拿shell,发现变量函数屏蔽掉了eval等函数,

后面想到了看源码,file_get_contents,发现源码里面啥也没有。。。后面又想到直接看flag文件,发现找不到。。。。佛了。。。

后面去Google找php有啥关于shell的函数,找到的函数大部分都被屏蔽掉了,后面才找到assert函数,直接payload

 /time.php?data=O:8:"HelloPhp":2:{s:1:"a";s:10:"phpinfo();";s:1:"b";s:6:"assert";}

发现此函数可以用,顺手Ctrl+F,得到flag。

后面想构造$_post拿shell发现失败了也不知道啥原因。不过已经得到flag了,真的超开心,在我之前只有16个人做出来了!!!!开心

后记:一位学长提到可以用file_put_contents提权,但是我操作了半天也没弄好,学长也指点了很久,最后还是放弃了,这里还是要感谢star学长,谢谢!!!


[Crypto]这是什么觅駡(108)

打开看是一张图片

右下角看首字母还是很有直觉,分别对应了星期几的首字母,但是红圈把我迷惑了,以为红圈的里面不算,结果没有成功解出来,Google了日历密码发现跟我想的一样(我太聪明了),然后后面还是把他试出来了。

其中,找到每个符号对应的日期,再对应到字母表中很容易解出结果(具体可以看图):flag{calendar}。


[Crypto]Classical Cipher(135)

这道题下载源码下来发现压缩包密码要自己解,后面对应了已有的明文密文对应关系,很容易看出,这个密文就是把明文对应的字母表翻转了过来,a对应z,b对应y,以此类推。

打开压缩包后发现一张图,可以看出是猪圈密码,但是是猪圈密码的变形,在Google上找到图对应了出来,但是那个象形图还是不知道是啥,就在Google图片上搜索了一下,也找到了对应关系,解出flag{classicalcode}。



附上官方wp: https://github.com/sqxssss/NPUCTF_WriteUps