【pwnable.kr】fd

本文介绍了Pwnable.kr平台上的fd挑战题。通过分析题目逻辑与IDA反编译结果,解释如何利用文件描述符使程序执行system流程并获取flag。提供了完整的exploit示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近准备整理一下之前的pwn writeup。有考虑过整理发表在新博客上,但是最近发现csdn的编辑器用的越来越顺手了,于是先写在这上面吧。

 

题目地址 http://pwnable.kr/play.php

下载程序

scp -P 2222 -p fd@pwnable.kr:/home/fd/* ./

题目逻辑
程序调用read函数从fd = atoi(argv[1]) - 4660读,之后和”LETMEWIN\n”按照字节比10次。 
如果想进入system流程,let v6 == 1 and v5 == 0.因此,从fd读取的字符串和”LETMEWIN\n”相等即可。 
PS: 对比源码,strcmp参数之一是静态字符串,所以可能做了编译优化,变成了按字节比较。

IDA反编译结果(pseudocode)

 

 if ( argc > 1 )
  {
    v4 = atoi(argv[1]);
    read(v4 - 4660, &buf, 0x20u);
    v7 = 10;
    v8 = "LETMEWIN\n";
    v9 = &buf;
    do
    {
      if ( !v7 )
        break;
      v5 = (const unsigned __int8)*v8 < *v9;
      v6 = *v8++ == *v9++;
      --v7;
    }
    while ( v6 );
    if ( (!v5 && !v6) == v5 )                   // v6 == 1, v5 == 0
    {
      puts("good job :)");
      system("/bin/cat flag");
      exit(0);
    }
    puts("learn about Linux file IO");
    result = 0;
  }
  else
  {
    puts("pass argv[1] a number");
    result = 0;
  }

exploit

fd@ubuntu:~$ echo "LETMEWIN" | ./fd 4660
good job :)
mommy! I think I know what a file descriptor is!! 
本关源码和writeup均放在:https://github.com/thinkycx/pwnable.kr。欢迎STAR。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值