wqpw_blog

= =

View on GitHub
14 April 2019

NWU-moeCTF题解1(2018)

by wqpw

平台地址

目录

一. 预备知识

1.欢迎来到__NWU__CTF!

1

  签到题。
  提示查看源代码,所以按Ctrl+U(火狐),之后看到flag.

2

2.How to get flag? (1)

3

  使用GET方法发送flag参数即可。

4

3.How to get flag? (2)

5

  使用POST方法发送flag。

67

4.base64是啥

8

  Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。--百度百科
  直接解密得到flag。

9

5.Let's learn html

10

打开一看啥也没有,就一个框和发送。

11

然后查看源代码,发现没有</html>而且行号也不正常,所以往下翻,发现注释里有密码。

12

在框中输入密码qswdef,发现只能输五位,为啥呢?

13

因为限制了最大长度为5......

14

然后有n多方法来突破限制...比如使用鼠标右键查看元素修改输入框的属性或者在浏览器控制台输入下面的代码然后回车之后可以看到flag
document.getElementsByName("pass")[0].value='qswdef';
document.forms[0].submit();

6.Let's learn javascript

下载prob.html打开看一下,发现完全不知道是啥qwq。

10

然后打开学习资料。

11

12

然后把那一堆颜表情放到<script></script>之间,用浏览器打开prob.html。会弹两个框,第二个才是flag(不要激动)。

13

对原理有兴趣的可以看一下 http://utf-8.jp/public/aaencode.html

7.Let's learn CSS

打开题目发现有张奇怪的图片。

14

根据学习资料,使用样式编辑器删掉定位得到flag。

15

8.Let's learn javascript :D

16

  看中间的js代码,第一句是输出控制台日志,打开控制台得到密码 heythisispasswd
然后复制进输入框中发送,然而发送不了,为啥呢?
  因为表单提交时会调用函数check()进行验证, 然而这个函数只会一直返回false(假),所以不管怎么点Submit表单也不会提交。
(详细资料:http://www.w3school.com.cn/jsref/prop_form_onsubmit.asp)
解决方法:控制台输入check = true然后再点Submit提交。

17

二. Crypto

注:其实前三个一般都当作misc的题,只有最后一个才能算是Crypto的题(入门)。

1.Caesar's code

经典的凯撒加密,写个程序跑一下看一看开头是nwuctf就行。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main(){
    string s, t;
    s = "fomulx{uswksj_ak_udskkausd_vg_m_cfgo}";
    for(int i = 0; i < 26; i++){
        t = s;
        for(int k = 0; k < s.size(); k++){
            if(t[k] != '{' && t[k] != '}' && t[k] != '_'){
                t[k] = (t[k]-'a'+i)%26+'a';
            }
        }
        cout << t << endl;
    }
    return 0;
}

18

2.栅栏密码

密文是 ntm__f}wfmiulu{mtracems_g , 直接利用百度到的工具解决。

19

3.维吉尼亚密码

使用http://rumkin.com/tools/cipher/vigenere.php

20

4.Open the door of Crypto

下载rsa.zip后得到加密后的flag(enc.txt)和公匙pub_key.pem
用openssl通过公匙生成n和e。
openssl rsa -pubin -text -modulus -in pub_key.pem
根据提示得到n的分解
然后用学习资料一里的脚本生成私匙
import math
import sys
from Crypto.PublicKey import RSA

keypair = RSA.generate(1024)
keypair.p = 0xDC3CB9B115B3C80976F4D6DCE3DE1FAB
keypair.q = 0xE5F3739071ED299674250CA91F122FBB
keypair.e = 65537

keypair.n = keypair.p * keypair.q
Qn = long((keypair.p-1) * (keypair.q-1))

i = 1
while (True):
    x = (Qn * i ) + 1
    if (x % keypair.e == 0):
        keypair.d = x / keypair.e
        break
    i += 1

private = open('private.pem','w')
private.write(keypair.exportKey())
private.close()
再用私匙解密,即可得到flag。
openssl rsautl -decrypt -in enc.txt -inkey private.pem -out flag.txt

三. Misc

1.zip文件伪加密

使用16进制编辑器照着学习资料改就行,或者修复压缩文件,或者有的软件可以直接无视伪加密。

2.弄脏的二维码

原图:

233

使用Stegsolve异或一下,然后保存:

21

然后用mspaint.exe(就是windows自带的画图)复制粘贴修复定位符。

22

随便用个啥扫一下,搞定

23

3.送分

修复文件头然后分解一下就行。

4.来玩游戏吧~

本来是模仿西电的re里的2048,所以就放re里。后来看到西安工业大学的2048是js+html5,又仔细想想发现我写的这个2048应该算misc里比较合适......

首先把game.bin下下来,发现不知道是啥文件。用16进制编辑器打开看一下,文件头是NES。

24

百度一下,知道nes是啥格式。

25

然后下个nes模拟器看一下,发现是个2048……

26

然后可以正常通关获得flag或者作弊(金手指是 6000-02-0800 就是把6000这个地方的数值改成0x0800(占两个字节),或者用CheatEngine之类的)。

flag是:nwuctf{Con9r4tu!at1onS_T0_U} 看不清可以用模拟器看一下字模。
原来放re里就怕真有人去学6502汇编,然后研究flag怎么解密的(当然不可能( ´_ゝ`)。
顺便一提,这个2048是用C语言写的,然后用cc65编译成fc平台的程序。

5.常规隐写

出题思路参考了这个题http://0ops.sjtu.cn/

开始有两种方法:

1.windows

用16进制编辑器打开发现文件末尾有个压缩文件,手动抠出来。

27

打开压缩文件,查看funage,显然是加密过的。猜测是base64(最后有=)

28

随便找个解密,得到一大坨brainfk代码。 **随便百度一篇http://www.mahaixiang.cn/bcyy/358.html

29

然后上gayhub找一个bf解释器https://github.com/fatiherikli/brainfuck-visualizer运行一下得到flag

2.kali

binwalk发现zip, 然后用foremost分解,剩下的同上。

30

6.lsb

31

7.我永远喜欢珂朵莉.jpg

先下下来看一下,是一张正常图片,就是文件名有点奇怪(发给一个师傅验题发现一点问题后加的提示)。

32

用16进制编辑器看下,在文件末尾发现”233.pdf”,以及熟悉的zip文件结尾特征串504b0506。

33

然后找到zip开头把文件抠出来,然后兴奋地打开pdf。

34

为啥打不开呢,因为这个zip确实有问题鸭,回到misc第一题的资料看下。

35

手工把文件修复一下…打开pdf

36

什么鬼flag在哪啊QAQ,不过图片下面貌似有啥东西被遮住了。这时有经验的师傅会尝试各种pdf隐写的姿势…还有个提示没用呢,smallxxx.com是啥?
经过一番探索,你发现了 http://smallpdf.com ,看见一排格式转换功能顿时明白了该怎么做(怎么可能啊 #゚Å゚)⊂彡☆))゚Д゚)・∵

37

然后使用pdf2word,下载然后打开生成的doc开始研究。发现图片显然有问题,应该是两张图片叠在一起了,然后有n多方法把图片分开,从而看到flag。 比如把下面的图片缩小。 38

tags: blog