安洵杯2022 Writeups - CNSS
Re
REEE
没难度的花指令,patch一下就过了
1 | Text = [0 for i in range(24)] |
好像有反调,但是也不用调
Re1
看了半天才看出来是虚拟机(
1 | this[3] = &byte_405018; |
相当于一个分发器,找到opcode对应的代码
虚拟机第一段大概结构
1 | 0xF1, 0xE1, 0x00, 0x00, 0x00, 0x00, |
即
1 | for i in range(12): |
第二段重复结构
1 | 0xF1, 0xE1, 0x20, 0x00, 0x00, 0x00, |
直接写exp解就可以了
1 | xorkey = "abcdefghijkl" |
exp有一点小写挂,但是第一个字母很好猜,懒得调了。
flower.pyc
pycdas反汇编成字节码,太长不放了
直接看字节码就可以了
My_base64_encode函数返回的是tmp2,也就是使用Base64Table而不是Base46Table
1 | 626 LOAD_GLOBAL 6: ord |
这一段其实是把原来的base64[i]改成base64[i^22]而已,没啥难度
后面分析一下jump可以知道充当密文的是KeyInputCmp
1 | 258 LOAD_NAME 16: ret |
人脑反编译一下这段,
1 | input_srt = input() |
大概是这样,后面是重复的比较,但是是乱序的,基本都是这样的代码:
1 | 668 LOAD_NAME 19: Key1 |
可以很轻松的找出对应关系:
1 | 0 == 8 |
写exp解一下就行了
1 | inputcmp = ['63356268', '75344678', '75386c6c', '2b69755a', '53546c57', '31396c34', '35547376', '36546c73', '3038736f','2b4f6167'] |
Crypto
Cry1
直接猜
Cry2
由于是ECB模式,直接每个字符枚举以下,判断多出来的那个块加密结果和中间是否一致,然后得到flag2,然后解密flag1
1 | from Crypto.Util.number import * |
Cry3
重放一下,然后跟裴蜀定理差不多思路直接搞出m
1 | from Crypto.Util.number import * |
Pwn
babyarm
首先过变表base64,msg=b’s1mpl3Dec0d4r\n’
然后一个裸的栈溢出,ret2libc即可
1 | from pwn import * |
easybf
对栈上的指针做操作,修改九号函数为one_gadget,最后执行jmp rax的时候跳转到one_gadget,不过要对函数表中的0号函数清零,使得[rsp+0x40] = NULL
,最后的时候也用不到这个函数进行指针偏移,所以没有影响
1 | from pwn import * |
Web
easy_php
pop链
1 | $a = new A(); |
查看 phpinfo发现session.serialize_handler=php,ini_set($_GET['baby'], $_GET['d0g3']);
可以设置 php_serialize
利用session序列化不一致,根据flag.php, 构造$_SESSION[‘sess’] 对象,到 call_user_func(…) 执行,那么可以用 SoapClient 调用任意不存在的方法造成ssrf访问flag.php
首先根据提示,利用GlobIterator查找根目录文件
1 | $a = new SoapClient(null, array('location' => 'http://127.0.0.1/flag.php?a=GlobIterator&b=/f*', 'uri' => 'http://127.0.0.1/')); |
通过 var_dump($_SESSION);
拿到 sessionid 设置后再访问,拿到flag文件名 f1111llllllaagg
再利用SplFileObject读flag
1 | $a = new SoapClient(null, array('location' => 'http://127.0.0.1/flag.php?a=SplFileObject&b=/f1111llllllaagg', 'uri' => 'http://127.0.0.1/')); |
EZ_JS
根据注释
1 | <!--This secret is 7 characters long for security! |
爆破得到secret = abcdefg,admin cookie = ed63246fb602056fee4a7ec886d0a3c2,用admin尝试登录,/cookie jsfuck注解提示 admin大写,用Admin登录,改cookie里的hash为ed63246fb602056fee4a7ec886d0a3c2拿到flag