-
题目
监听服务器端口,得到题目如下:
-
源码解析
-
主函数
主函数中是题目界面的逻辑,对应于用户的选择做出相应的操作,其中需要注意的是选项2,解压操作需要获得root权限(uid==0).
-
选项1,2:文件压缩和解压缩,是常规的文件压缩代码,不做解释。
-
选项3:buy操作,buy()函数调用了加密函数encrypt();根据具体的实现逻辑,可知使用的是RSA加密算法。其中n=221,e=7,从传入参数和题目中的tips都能得到。如果满足密文的前三个字符的ascii码值为149,108和21,则获得root权限。
-
题解
整个解题思路如下。首先选择3,通过加密操作获得root权限。
获得CDK的脚本如下(RSA解密):
pythonimport gmpy2 def Decrypt(c,e,p,q): L = (p-1)*(q-1) d = gmpy2.invert(e, L) n = p*q crypto = gmpy2.powmod(c, d, n) print(chr(crypto)) if __name__ == "__main__": p = 17 q = 13 e = 7 c = 149 Decrypt(c,e,p,q)
然后选择1,对目标文件flag进行压缩,压缩文件的命名为pwn,即当前正在运行的文件,压缩的同名文件不会影响此次程序的运行,因为程序运行尚未结束,其挂载到了/proc目录下。然而下次运行时,真正运行的文件将会是原来的flag而不是pwn。最后选择3,由于解压操作接收到的文件名的长度只有1,不能正确解压上一步得到的pwn文件(flag),所以需要手动终止程序的运行。此处涉及到一个知识点,即unzip函数和zip函数都是main函数的子函数,利用子函数同栈内存大小相等的特点,在手动结束程序运行时,unzip的局部变量filename正是上次在zip函数中输入的文件名,即pwn。
-
zip-zip(子函数调用)
yuanyy7202024-07-02 21:40
相关推荐
H轨迹H2 天前
BUUCTF-Web方向16-20wpМартин.2 天前
[Meachines] [Easy] Horizontall Strapi RCE+KTOR-HTTP扫描+Laravel Monolog 权限提升lally.6 天前
web信息泄露 ctfshow-web入门web1-web10希望奇迹很安静9 天前
CTFSHOW-WEB入门-PHP特性109-1150DayHP10 天前
[HCTF 2018]WarmUpМартин.12 天前
[Meachines] [Easy] Soccer Tiny 2.4.3-RCE+WS-SQLI+Doas权限提升+dstat权限提升希望奇迹很安静17 天前
CTFSHOW-WEB入门-PHP特性89-100希望奇迹很安静23 天前
CTFSHOW-WEB入门-命令执行29-32希望奇迹很安静1 个月前
CTFSHOW-WEB入门-文件包含78-81H轨迹H1 个月前
BUUCTF刷题-Web方向1~5wp