记录一下寒假闲着没事干打的一个国外的比赛,签到题比较多,对我十分友好(bushi)
个人排名:

个人解答情况:

Crypto
big e
| 1 | from Crypto.Util.number import bytes_to_long, getPrime | 
一个简单的共模攻击,签到题了算是
直接上py脚本:
| 1 | from Crypto.Util.number import long_to_bytes | 

得到flag:
| 1 | lactf{b1g_3_but_sm4ll_d!!!_part2_since_i_trolled} | 
Extremely Convenient Breaker
| 1 | #!/usr/local/bin/python3 | 
一个简单的AES,连接远程之后,会给你一个将flag加密的hex字符串
我们只需要改变其中的某一位hex值,就可以还原部分结果出来,多尝试几次就还原出全部的flag了
前半部分:

后半部分:

完整的flag为:
| 1 | lactf{seems_it_was_extremely_convenient_to_get_the_flag_too_heh} | 
RSAaaS
| 1 | #!/usr/local/bin/python3 | 
一个交互题,和之前有个题很像,就是要找出代码的异常之处,触发异常就可以
我们发现一些简单的异常,代码都帮我们排除了,所以我们只能在其他的代码段触发异常
定位到这一段代码:
| 1 | n = p * q | 
求d的时候,可能会出现没有逆元的情况,之前也做过类似的题,就是e与phi不互素的情况
那我们只需要找出合适的p和q,不触发代码中约束的异常,但是触发这个逆元异常就可以了
暴力穷举一下范围内的素数,找到了一个合适的p,满足: 
| 1 | from Crypto.Util.number import isPrime | 
然后我们随便生成一个范围内的满足条件的素数q就可以了
| 1 | q=9223372036854775837 | 
最后nc交互即可

得到flag:
| 1 | lactf{actually_though_whens_the_last_time_someone_checked_for_that} | 
bigram-times
| 1 | characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}~_" | 
很明显是一个暴力穷举的题
首先我们试一下前几组对不对,拿jl试一下,发现得到了mC,PK和la,la是我们的答案中的一部分,其他两个就是我们的假flag中的前两个字母,这样就知道全部的思路了,我们只需要暴力逆向求解出全部的可能,然后使用假flag进行排除就可以了
| 1 | characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}~_" | 
得到:
| 1 | 密文二元组: (j, l) | 
然后把错误的flag部分全部去除就可以了
最后的flag为:
| 1 | lactf{mULT1pl1cAtiV3_6R0uPz_4rE_9RE77y_5we3t~~~} | 
Misc
Extended
| 1 | flag = "lactf{REDACTED}" | 
简单的逆向一下就可以了
py脚本:
| 1 | # 读取chall.txt文件内容 | 
得到结果:

得到flag:
| 1 | lactf{Funnily_Enough_This_Looks_Different_On_Mac_And_Windows} | 
Danger Searching
My friend told me that they hiked on a trail that had 4 warning signs at the trailhead: Hazardous cliff, falling rocks, flash flood, AND strong currents! Could you tell me where they went? They did hint that these signs were posted on a public hawaiian hiking trail.
Note: the intended location has all 4 signs in the same spot. It is 4 distinct signs - not 4 warnings on one sign.
Flag is the full 10 digit plus code containing the signs they are mentioning, (e.g. lactf{85633HC3+9X} would be the flag for Bruin Bear Statue at UCLA). The plus code is in the URL when you select a location, or click the
^at the bottom of the screen next to the short plus code to get the full length one.
直接google搜图就可以了

定位到73G66738+9C

所以flag为:
| 1 | lactf{73G66738+9C} | 
Web
lucky-flag
打开来发现全是图标

打开源代码查看:
| 1 | const $ = q => document.querySelector(q); | 
发现如果点击正确的话,就可以进行输出正确的flag,我们逆向还原一下就可以了
| 1 | # 原代码中的编码字符串 | 
得到flag:
| 1 | lactf{w4s_i7_luck_0r_ski11} | 
Reverse
javascryption
打开一看是个web页面,查看源代码
| 1 | const msg = document.getElementById("msg"); | 
签到题,直接逆向就可以了
| 1 | import base64 | 
得到flag:
| 1 | lactf{no_grizzly_walls_here} | 
patricks-paraflag
也是签到题
| 1 | int __fastcall main(int argc, const char **argv, const char **envp) | 
可以知道,flag是由target分为两部分,再拼接而成的
我们找到对应的target即可
target为:
| 1 | l_alcotsft{_tihne__ifnlfaign_igtoyt} | 
然后还原即可
| 1 | target = "l_alcotsft{_tihne__ifnlfaign_igtoyt}" | 
得到flag:
| 1 | lactf{the_flag_got_lost_in_infinity} | 
nine-solves
先查看一下main函数逆向的c++代码:
| 1 | int __fastcall main(int argc, const char **argv, const char **envp) | 
说明我们要寻找的是六位的访问码,交互即可获得flag
只需要简单的进行逆向的分析即可还原六位的访问码
首先查看yi数组的值,为[27, 38, 87, 95, 118, 9]

| 1 | yi = [27, 38, 87, 95, 118, 9] | 
输出:The access code is: AigyaP
交互输入AigyaP即可获得flag

得到flag:
| 1 | lactf{the_only_valid_solution_is_BigyaP} | 
Pwn
2password
直接用户名栈溢出就可以了

得到十六进制小端序:0x75687b667463616c0x66635f327265746e0x7d38367a783063
| 1 | hex_strings = ["0x75687b667463616c", "0x66635f327265746e", "0x7d38367a783063"] | 
得到flag:
| 1 | lactf{hunter2_cfc0xz68} |