NWU-moeCTF题解1(2018)
by wqpw
目录
- 预备知识
- crypto
- misc
一. 预备知识
1.欢迎来到__NWU__CTF!
签到题。
提示查看源代码,所以按Ctrl+U(火狐),之后看到flag.
2.How to get flag? (1)
使用GET方法发送flag参数即可。
3.How to get flag? (2)
使用POST方法发送flag。
或
4.base64是啥
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。--百度百科
直接解密得到flag。
5.Let's learn html
打开一看啥也没有,就一个框和发送。
然后查看源代码,发现没有</html>而且行号也不正常,所以往下翻,发现注释里有密码。
在框中输入密码qswdef,发现只能输五位,为啥呢?
因为限制了最大长度为5......
然后有n多方法来突破限制...比如使用鼠标右键“查看元素”修改输入框的属性,或者在浏览器控制台输入下面的代码然后回车,之后可以看到flag。
document.getElementsByName("pass")[0].value='qswdef';
document.forms[0].submit();
6.Let's learn javascript
下载prob.html打开看一下,发现完全不知道是啥qwq。
然后打开学习资料。
然后把那一堆颜表情放到<script></script>之间,用浏览器打开prob.html。会弹两个框,第二个才是flag(不要激动)。
对原理有兴趣的可以看一下 http://utf-8.jp/public/aaencode.html
7.Let's learn CSS
打开题目发现有张奇怪的图片。
根据学习资料,使用样式编辑器删掉定位得到flag。
8.Let's learn javascript :D
看中间的js代码,第一句是输出控制台日志,打开控制台得到密码 heythisispasswd
然后复制进输入框中发送,然而发送不了,为啥呢?
因为表单提交时会调用函数check()进行验证, 然而这个函数只会一直返回false(假),所以不管怎么点Submit表单也不会提交。
(详细资料:http://www.w3school.com.cn/jsref/prop_form_onsubmit.asp)
解决方法:控制台输入check = true然后再点Submit提交。
二. 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;
}
2.栅栏密码
密文是 ntm__f}wfmiulu{mtracems_g , 直接利用百度到的工具解决。
3.维吉尼亚密码
使用http://rumkin.com/tools/cipher/vigenere.php
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.弄脏的二维码
原图:
使用Stegsolve异或一下,然后保存:
然后用mspaint.exe
(就是windows自带的画图)复制粘贴修复定位符。
随便用个啥扫一下,搞定
3.送分
修复文件头然后分解一下就行。
4.来玩游戏吧~
本来是模仿西电的re里的2048,所以就放re里。后来看到西安工业大学的2048是js+html5,又仔细想想发现我写的这个2048应该算misc里比较合适......
首先把game.bin下下来,发现不知道是啥文件。用16进制编辑器打开看一下,文件头是NES。
百度一下,知道nes是啥格式。
然后下个nes模拟器看一下,发现是个2048……
然后可以正常通关获得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进制编辑器打开发现文件末尾有个压缩文件,手动抠出来。
打开压缩文件,查看funage,显然是加密过的。猜测是base64(最后有=)
随便找个解密,得到一大坨brainfk代码。 **随便百度一篇http://www.mahaixiang.cn/bcyy/358.html
然后上gayhub找一个bf解释器https://github.com/fatiherikli/brainfuck-visualizer运行一下得到flag
2.kali
binwalk发现zip, 然后用foremost分解,剩下的同上。
6.lsb
7.我永远喜欢珂朵莉.jpg
先下下来看一下,是一张正常图片,就是文件名有点奇怪(发给一个师傅验题发现一点问题后加的提示)。
用16进制编辑器看下,在文件末尾发现”233.pdf”,以及熟悉的zip文件结尾特征串504b0506。
然后找到zip开头把文件抠出来,然后兴奋地打开pdf。
为啥打不开呢,因为这个zip确实有问题鸭,回到misc第一题的资料看下。
手工把文件修复一下…打开pdf
什么鬼flag在哪啊QAQ,不过图片下面貌似有啥东西被遮住了。这时有经验的师傅会尝试各种pdf隐写的姿势…还有个提示没用呢,smallxxx.com是啥?
经过一番探索,你发现了 http://smallpdf.com ,看见一排格式转换功能顿时明白了该怎么做(怎么可能啊 #゚Å゚)⊂彡☆))゚Д゚)・∵
然后使用pdf2word,下载然后打开生成的doc开始研究。发现图片显然有问题,应该是两张图片叠在一起了,然后有n多方法把图片分开,从而看到flag。 比如把下面的图片缩小。
tags: blog