欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【pwnable.kr】fd

程序员文章站 2022-05-15 15:00:08
...

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


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

【pwnable.kr】fd

下载程序

scp -P 2222 -p aaa@qq.com:/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

aaa@qq.com:~$ echo "LETMEWIN" | ./fd 4660
good job :)
mommy! I think I know what a file descriptor is!! 

相关标签: pwnable.kr