the vigenere cipher is a method of encrypting alphabetic text by using a series of different caesar ciphers based on the letters of a keyword it is a simple form of polyalphabetic substitution so password is vigenere cipher funny
DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------- 12 0xC TIFF image data, little-endian 478718 0x74DFE Zip archive data, at least v2.0 to extract, compressed size: 153767, uncompressed size: 3145728, name: "flag.vmdk" 632637 0x9A73D End of Zip archive
let's begin! the flag is :SUCTF{dsjwnhfwidsfmsainewmnci} now,this chengxu wil tuichu......... pwn100@test-vm-x86:$$ zhimakaimen SUCTF{5tack0verTlow_!S_s0_e4sy}
.data:0000000000476010 ; char secret[23] .data:0000000000476010 secret db 0BBh .data:0000000000476011 db 90h ; .data:0000000000476012 db 0A0h ; .data:0000000000476013 db 0A6h ; .data:0000000000476014 db 90h ; .data:0000000000476015 db 8Ah ; .data:0000000000476016 db 0A0h ; .data:0000000000476017 db 94h ; .data:0000000000476018 db 91h ; .data:0000000000476019 db 90h ; .data:000000000047601A db 88h ; .data:000000000047601B db 0A0h ; .data:000000000047601C db 0AFh ; .data:000000000047601D db 0BAh ; .data:000000000047601E db 0A0h ; .data:000000000047601F db 0B9h ; .data:0000000000476020 db 90h ; .data:0000000000476021 db 8Dh ; .data:0000000000476022 db 92h ; .data:0000000000476023 db 9Eh ; .data:0000000000476024 db 8Bh ; .data:0000000000476025 db 0C0h ; .data:0000000000476026 db 0
前几天,半个美国的吃瓜群众纷纷表示上不了网了。经过各种调查,发现是一个代号为 Mirai(日语:未来)的病毒感染了物联网设备,形成了一个僵尸网络,最终这个超大型的僵尸网络向美国某 DNS 公司的服务器发起了 DDoS 攻击。Mirai 的 C 语言源码在网上很容易获取到,刚好我最近在上计算机病毒课,于是就下载下来研究了一下,顺便看一下以自己现在的能力可以理解到哪一步。
However, I know every skid and their mama, it’s their wet dream to have something besides qbot. So, I am your senpai, and I will treat you real nice, my hf-chan. Don’t make me laugh please, you made so many mistakes and even confused some different binaries with my. LOL Why are you writing reverse engineer tools? You cannot even correctly reverse in the first place.
得益于初赛的人品,我们有幸入围了决赛。但是对于决赛的比赛方式:攻防赛,我们并不了解,事先也不知道需要准备哪些东西,只是配了几个扫描器,然后就是之前用的 IDA 之类的工具和各种语言环境。经过两天的比赛,最终成绩是第 12 名(如果没有赛后的名次变动的话)。这次比赛确实让我学到了一些东西,下面我就来说一说吧~
各组选手维护相同的一系列服务,每五分钟(第二天改为了三分钟)为一轮,有一个flag 文件是 /home/flag/flag,你需要努力获取其它队伍的 flag 文件,也要尽量保证自己的 flag 文件不会被获取。每一轮这个文件的内容都会变,每一轮每个队伍只能提交获取到的其它各个队伍的 flag 各一次。也就是说,如果你不把漏洞修好,那么每一轮都可以被所有发现该漏洞的队伍攻击一次;每一轮会有一次服务存活检测,如果服务 down 掉了,丢失的分数会更多。
由于这次的题目类型大多是 PWN 的,而我是一只 WEB 狗,所以大部分的分数并不是我拿的,对于 PWN 的题目我也没法做什么分析。这次比赛的 WEB 题是这样的:你要维护的是一个简单的博客系统,使用的框架是 PHP Slim,支持最简单的注册、登录、发博文(标题、纯文本内容、模板名称)的功能。flag 文件是 /home/flag/flag,属于 www-data,权限为 511(每一轮自动换)。我们需要获取其它队伍的 flag 文件中的内容。
这下管你什么文件包含呢,通通没办法了吧?于是第一天我们的 WEB 题没有丢分(有一段时间许多队伍的 WEB 被 DoS 了,而 DoS 是被规则禁止的攻击方式,不知道主办方会怎么处理,这段时间的丢分我就认为不算丢分吧),反倒还拿了其它队伍不少分。
但是第二天就奇怪了,一大片队伍的 WEB 题都 down 掉了,我们不光 down 了,还被拿到了 flag。这怎么能忍?我们一遍遍排查代码,确认没有什么逻辑上的漏洞。然后突然发现服务器操作特别慢,于是 ps aux 了一下,发现了一大堆这样的命令:
1
sh -c echo 123;x() { x|x& };x
卧槽,居然连 fork 炸弹都上了!这也是被规则禁止的,于是我们通知了主办方,主办方把所有队伍的 WEB 服务都重启了一遍,但是我们的 WEB 题还是既 down 又被 flag,简直神奇。看了一下 /tmp 目录下被上传了一堆 shell,但是我们的 ctf 用户没权限删除 www-data 用户创建的内容。后来我们直接给自己的服务器上了一个 webshell(这就是俗话说的:我急了连自己的机器都上 shell!),因为 webshell 就是以 www-data 用户身份运行的。我们没发现有什么可以上传文件的地方,但是确实是被 get shell 了,于是在找出上传方法之前,先将所有的 shell 文件 kill 掉,然后对其执行 chmod 000;刚才 ps 的时候还发现了一个定时发送 flag 的 crontab,于是也果断将其清空。
就算这样还是被 flag 了,而且还在 down 着。我们在改完代码测试流程的时候偶然发现无法注册无法登录,于是猜想是不是数据库挂掉了,于是连进数据库一看,发现整个 database 全部被 drop 掉了……我们之前没有备份数据库,但是凭借着一点点记忆力以及@SummerZhang 同学根据代码推断数据库结构的能力,直接手动建起了数据库,恢复了服务的运行:
我们自己尝试了一下,第二个请求之后会直接报 Slim application error,但是保险起见我们将所有 UA 带有 -kali- 字样的请求全部 die 掉,第一个请求貌似是主办方的服务存活检测,因为将其 die 掉之后我们的网站虽然还能正常运行,但是被判定为 down(但是没有被 flag,这一点我没有及时注意到,这是我的锅),取消 die 之后又变回了只被 flag 的状态。后来惊觉:这是主办方留的后门被人利用了!在 vendor/autoload.php 下面发现了后门:
$ d2j-dex2jar.sh qq_secret.apk dex2jar qq_secret.apk -> qq_secret-dex2jar.jar com.googlecode.dex2jar.DexException: java.util.zip.ZipException: invalid entry compressed size (expected 252773 but got 252747 bytes) at com.googlecode.dex2jar.reader.DexFileReader.opDataIn(DexFileReader.java:217) at com.googlecode.dex2jar.reader.DexFileReader.<init>(DexFileReader.java:229) at com.googlecode.dex2jar.reader.DexFileReader.</init><init>(DexFileReader.java:240) at com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine(Dex2jarCmd.java:104) at com.googlecode.dex2jar.tools.BaseCmd.doMain(BaseCmd.java:174) at com.googlecode.dex2jar.tools.Dex2jarCmd.main(Dex2jarCmd.java:34) Caused by: java.util.zip.ZipException: invalid entry compressed size (expected 252773 but got 252747 bytes) at java.util.zip.ZipInputStream.readEnd(Unknown Source) at java.util.zip.ZipInputStream.read(Unknown Source) at java.util.zip.ZipInputStream.closeEntry(Unknown Source) at java.util.zip.ZipInputStream.getNextEntry(Unknown Source) at com.googlecode.dex2jar.reader.ZipExtractor.extract(ZipExtractor.java:31) at com.googlecode.dex2jar.reader.DexFileReader.readDex(DexFileReader.java:129) at com.googlecode.dex2jar.reader.DexFileReader.opDataIn(DexFileReader.java:213) ... 5 more</init>