1.八卦迷宫

签到题,没啥好说的。

首先拿到附件发现是走迷宫,然后对照着图片两边的提示得到中文,再转成小写全拼即可。

得到flag:

cazy{zhanchangyangchangzhanyanghechangshanshananzhanyiyizhanyianyichanganyang}


2.无字天书

拿到附件先将pcap流量包解压出来,然后Wireshark导出所有http对象

找到其中的这个文件,看出504B0304是zip文件头,将其放进Winhex生成单独压缩包并解压出内部的flag.txt和key.ws

发现文件内部显示空白,但Ctrl+A能选中这些元素。

我先将key.ws中元素放到Whitelips the Whitespace IDE (vii5ard.github.io)中解析Whitespace,得到字符串” XiAnWillBeSafe”

随后将flag.txt用snow.exe解,输入SNOW.EXE -p XiAnWillBeSafe -C flag.txt即可得到flag

得到flag:

cazy{C4n_y0u_underSt4nd_th3_b0oK_With0ut_Str1ng}


3.西安加油

拿到附件先将pcap流量包解压出来,然后Wireshark导出所有http对象,找到hint.txt,打开发现有base64编码,将其拿去解码,发现是zip文件,将其解压出来发现是一堆相同大小的图片,盲猜要进行拼接

然后在之前导出的http对象中发现hint.txt,扔去进行base32解码得到图片顺序

按照顺序将图片拼接完整得到flag,我用的是photoshop一张张手工拼接,写python脚本拼接亦可

得到flag:

cazy{make_XiAn_great_Again}


4.RCE_No_Para

开启环境查看web源码为


<?php
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {
if(!preg_match('/session|end|next|header|dir/i',$_GET['code'])){
eval($_GET['code']);
}else{
die("Hacker!");
}
}else{
show_source(__FILE__);
}
?>

 

现场学的,以下为查的资料:

一.

这里使用preg_replace替换匹配到的字符为空,\w匹配字母、数字和下划线,等价于 [^A-Za-z0-9_],然后(?R)?这个意思为递归整个匹配模式

所以正则的含义就是匹配无参数的函数,内部可以无限嵌套相同的模式(无参数函数),将匹配的替换为空,判断剩下的是否只有;

举个例子:

a(b(c()));可以使用,但是a('b')或者a('b','c')这种含有参数的都不能使用

所以我们要使用无参数的函数进行文件读取或者命令执行

原文:https://blog.csdn.net/qq_38154820/article/details/107171940?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%97%A0%E5%8F%82%E6%95%B0rce&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-1-107171940.nonecase&spm=1018.2226.3001.4450
二.

首先分析[^\W]:

​ 其中"[]"表示匹配的开始结束,"^"表示取反。

\W,(注意这个W是大写的),匹配非字母、数字、下划线。等价于 [^A-Za-z0-9_]

​ 所以[^\W]是对上面的\w取反: 匹配所有字母数字下划线的字母。

不太熟悉正则的注意正则中的 “+”,是为了拼接整个表达式的,并不是需要我们匹配 "+",

然后是\((?R)?\):

​ 其中两侧的\( 和\)表示匹配括号。

(?R),(?R)表示递归表达式本身,

(?R)?,最后的"?"表示匹配1个或者0个表达式本身,最后的 “?” 必不可少的。

综上,我们大概就清晰了。

整个正则是要把对应形式的内容提取出来,然后通过preg_replace函数,用空字符串进行代替,得到一个字符串。

得到的这个字符串必须是完全等于“;”的。

我们的payload大致为如下形式,可以带字母,数字,下划线。

一定明白好这个正则,使用函数必须无参。

原文:https://www.cnblogs.com/h3zh1/p/12590568.html

然后内层代码if(!preg_match('/session|end|next|header|dir/i',$_GET['code']))相当于做了一个黑名单,一旦你的payload含有session|end|next|header|dir这些元素便会跳出if条件语句攻击失败,因此要避开含有这些函数的payload

我首先测试得到:

?leon=phpinfo();&code=eval(pos(pos(get_defined_vars())));

成功运行phpinfo()获取到后台php版本

因此我开始找flag藏在哪里,输入url得到:

?leon=system('ls');&code=eval(pos(pos(get_defined_vars())));

找到flag后打开即可,最终构造的payload为:

/?leon=system(%27cat%20flag.php%27);&code=eval(pos(pos(get_defined_vars())));

此处需要注意的是原网页无消息返回,需要手动打开查看源代码才能看见flag(我就是这里慢了一点没提交上!)

最终payload的构造我暂时了解不深,以后有机会可以单独学一学再写成笔记,我是参考这篇文章对比比赛题目得到的最终payload:https://blog.csdn.net/qq_38154820/article/details/107171940?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%97%A0%E5%8F%82%E6%95%B0rce&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-1-107171940.nonecase&spm=1018.2226.3001.4450


至于其他MISC题我其实都有做,特别是朴实无华的取证,我感觉我已经做到最后阶段了,不过感觉还有所欠缺解不出最后的flag,之后官方题解出来之后或许我会在后面补上whiteup