CTF竞赛中无需pwntools/subprocess从Python启动bash会话的方法
解决Python中直接进入交互Shell的问题(CTF场景)
你的问题核心在于os.system每次调用都会启动独立的子Shell,第二个os.system("fg")所在的Shell和之前后台运行的bash不属于同一会话,因此无法恢复目标bash进程。下面是两种简便的实现方式:
方法一:用os.execve直接替换当前进程(推荐)
这种方式会把当前Python进程直接替换为bash,执行完前置操作后直接进入交互Shell,完全匹配你的需求:
import os # 先完成所有需要的前置操作,比如打印内容、写入文件 print("hello world") # 替换当前Python进程为bash,直接进入交互环境 os.execve("/bin/bash", ["/bin/bash"], os.environ)
execve会直接覆盖当前进程的内存空间,执行后Python进程消失,直接进入bash交互会话- 传入
os.environ可让bash继承当前Python进程的环境变量,适配CTF场景下的权限、路径等环境需求
方法二:直接调用bash(无后台)
如果不需要先执行前置操作再进入Shell,直接用os.system("/bin/bash")即可,但这种方式会先进入bash,退出bash后才会执行后续代码:
import os os.system("/bin/bash") print("hello world") # 该语句会在退出bash后才执行
内容的提问来源于stack exchange,提问作者spunkpike
相关产品推荐
相关产品推荐

