您现在的位置是:热点 >>正文

python ptrace 渗透测试

热点12人已围观

简介 用Python的ptrace库做渗透测试,本质上是在跟操作系统玩一场“信任游戏”。ptrace是Linux提供的进程跟踪接口,调试器、系统监控工具都靠它吃饭。但在攻击者手里,它就成了撬开目标进程内存 ...

用Python的渗透ptrace库做渗透测试,本质上是测试在跟操作系统玩一场“信任游戏”。ptrace是渗透Linux提供的进程跟踪接口,调试器、测试系统监控工具都靠它吃饭。渗透但在攻击者手里,测试它就成了撬开目标进程内存的渗透万能钥匙。

我第一次实战用ptrace,测试是渗透在一个CTF比赛里。题目给了一个跑在Docker里的测试服务,flag藏在某个守护进程的渗透内存里。常规扫描没用,测试端口就开了个80。渗透后来发现服务有个API能触发任意文件读取,测试我读到了/proc/1/mem——这个文件就是渗透进程地址空间的门票。但裸读会报错,因为mem文件要求偏移量对齐到页边界,而且只能读映射过的区域。这时候ptrace派上用场了:先ptrace(PTRACE_ATTACH)挂到目标进程,再用process_vm_readv绕过那些限制,直接按虚拟地址抓取内存。flag就躺在堆里,明文。

这招在真实渗透里更阴险。比如你拿到一个低权限shell,但系统上跑着root的数据库服务。用ptrace attach上去,读取它的堆栈,可能直接捞出SQL查询语句、密码哈希,甚至SSL私钥。Linux的Yama安全模块默认会限制非父子进程间的ptrace,但很多运维图省事会关掉或设成ptrace_scope=0。我见过不少内网机器就是这种裸奔状态。

写代码的时候有个坑:ptrace调用必须由子进程执行,或者目标进程得是当前进程的子进程。所以通常要fork()一下,子进程去attach,父进程负责指挥。Python的python-ptrace库封装好了这些细节,但性能有点拉胯。读大块内存时,纯Python循环逐字节拷贝会慢得你想砸键盘。解决办法是直接调用libc的process_vm_readv,用ctypes传参,一次搞定一大片。

更骚的操作是内存注入。找到目标进程里一块可写可执行的内存(比如JIT编译出来的代码区域),用ptrace把shellcode写进去,然后改它的指令指针寄存器,让它跳过去执行。整个过程不落盘,杀软和EDR基本无感。我做过一个实验:往一个Nginx worker进程里塞了一段反向shell,连接建立后,从外部看那只多了个奇怪的TCP连接,进程列表干干净净。

但别以为ptrace是万能的。现代内核开了CONFIG_SECCOMP的话,很多容器环境会禁止ptrace系统调用。还有SELinux、AppArmor这类强制访问控制,能直接拦掉PTRACE_ATTACH。所以实战里先得探路:跑一下cat /proc/sys/kernel/yama/ptrace_scope,看看值是不是0,不是的话再试试capsh --print查有没有SYS_PTRACE权限。没有这些前置条件,代码写得再漂亮也白搭。

最后说点防御视角。检测ptrace攻击有个土办法:监控/proc/pid/status里的TracerPid字段,非零就说明被跟踪了。但攻击者可以读内存后立刻detach,这个字段只在attach期间非零。更靠谱的是用auditd记录所有ptrace系统调用,或者干脆在生产环境把ptrace_scope设成1,只允许父子进程调试。记住,安全是攻防两端的军备竞赛,今天你学到的攻击技巧,明天可能就变成别人防你的理由。

Tags:

相关文章

  • 和360彩票网走图差不多的网站

    热点

    打开浏览器,输入一串网址,页面上跳出红绿相间的数字球,旁边是密密麻麻的走势线条——这画面,跟360彩票网的走图几乎一个模子刻出来的。我指的是那些“彩票数据图表站”,不是官方售彩平台,而是专门做历史开奖 ...

    【热点】

    阅读更多
  • 美国电影赏金猎人电影免费完整版

    热点

    美国电影赏金猎人电影免费完整版 别急着找免费资源,先想清楚你要看哪一部。赏金猎人题材在美国电影里是个老行当,但拍得好的真不多。从八十年代的《午夜狂奔》到近年的《赏金猎手》,类型早就变味了——最经典的那 ...

    【热点】

    阅读更多
  • 直销行业被封账户

    热点

    直销行业被封账户,这事我见得多了。上个月,一个做了六年安利的老张找到我,他的账户被公司系统冻结,理由是“异常操作”。老张跟我说,他不过是把产品链接发到了自己亲戚群里,结果系统判定他“违规引流”。他一脸 ...

    【热点】

    阅读更多


友情链接