SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
DEFCON 18 CTF
제 이문제풀이
김은수 hahah
KAIST G N / B i l bKAIST GoN / Beistlab
hahah@kaist.ac.kr
twitter.com/Hah4h
www.CodeEngn.com
2010 4th CodeEngn ReverseEngineering Conference
ContentsContents
• DEFCON CTF?
Binary l33tness 100• Binary l33tness 100
• Binary l33tness 200Binary l33tness 200
• Binary l33tness 300
• Binary l33tness 400
Bi l33t 500• Binary l33tness 500
• Pwtent pwnables 100• Pwtent pwnables 100
• Pwtent pwnables 400
• 후기
DEFCON CTF?DEFCON CTF?
• DEFCON
– 매년 라스베가스에서 개최되는 Hacking매년 라스베가스에서 개최되는 Hacking
Conference
올해로 18번째– 올해로 18번째
• Capture The Flag
– 상대방의 시스템을 공격하여 Flag를 빼오고상대방의 시스템을 공격하여 Flag를 빼오고,
동시에 자신의 시스템을 방어하는 방식의
대회대회
– 작년부터 Diutinus Defense Technologies
Corp(ddtek)에서 문제 출제Corp(ddtek)에서 문제 출제
DEFCON CTF?DEFCON CTF?
• CTF 예선
본선과는 달리 CTF 방식이 아닌 6개– 본선과는 달리 CTF 방식이 아닌 6개
의 분야에 각각 5개의 문제 풀이
– 100점에서 500점까지의 난이도100점에서 500점까지의 난이도
– 공개된 문제를 처음 푼 팀이 다음 문
제를 선택제를 선택
DEFCON CTF?DEFCON CTF?
• 문제 Board
DEFCON CTF?DEFCON CTF?
• 문제 분야
PURSUITS TRIVIAL– PURSUITS TRIVIAL
• 넌센스, 게임, 음악분석 등 다양한 분야
– CRYPTO BADNESS
• 암호 분석/크랙암호 분석/크랙
– PACKET MADNESS
주어진 패킷 캡쳐 파일 분석• 주어진 패킷 캡쳐 파일 분석
DEFCON CTF?DEFCON CTF?
• 문제 분야
BINARY L33TNESS– BINARY L33TNESS
• 바이너리 리버싱
– PWTENT PWNABLES
• 리모트 취약점 공격리모트 취약점 공격
– FORENSICS
디스크 이미지 파일 등에서 키 값 찾기• 디스크 이미지 파일 등에서 키 값 찾기
Binary l33tness 100Binary l33tness 100
• Find the key
• Linux x86-32
실행 결과• 실행 결과
gon@qwerty:~/defcon18/b100$ ./b100.bin
Please supply a key
pentest@pubuntu:~/ctf/binary100$ ./b100 aaaa
I hope you got it! Good luck
&0iE.m5 J
]{>=5tC!B
Binary l33tness 100Binary l33tness 100
• 분석
• sub 8048698 sub 804886A 함수• sub_8048698, sub_804886A 함수
– RC4 알고리즘!
Binary l33tness 100Binary l33tness 100
• sub_8048698 함수
256byte의 table을 만드는 RC4 함수!– 256byte의 table을 만드는 RC4 함수!
Binary l33tness 100Binary l33tness 100
• sub_804886A 함수
RC4 인코딩 함수– RC4 인코딩 함수
Binary l33tness 100Binary l33tness 100
• 입력한 문자열을 키 값으로 RC4 알
고리즘을 사용 결과를 출력고리즘을 사용, 결과를 출력
– 키 값을 모르면 풀 수 없다!
– Brute force?
Guessing?– Guessing?
No !
Binary l33tness 100Binary l33tness 100
• constructor에서 atexit함수를 이용하여
sub_80488e0 함수를 끝날 때 실행하도록 설정
“securekey”를 키로 어떤
데이터를 복호화 출력데이터를 복호화, 출력
Binary l33tness 100Binary l33tness 100
• 해당 데이터를 복호화
• The real key is: bob's yer mom?• The real key is: bob s yer mom?
Binary l33tness 100Binary l33tness 100
• 또 다른 풀이~
gon@qwerty:~/defcon18/b100$ ./b100.bing q y / / $ /
Please supply a key
NULL key를 입력
gon@qwerty:~/defcon18/b100$ ./b100.bin ""
I hope you got it! Good luck
M.+Q
The real key is: bob's yer mom
으..으어??
Binary l33tness 200Binary l33tness 200
• what treasure did pirates get?
• file 명령어 결과file 명령어 결과
– ELF 32-bit LSB shared object, Intel
80386 i 1 (SYSV) d i ll80386, version 1 (SYSV), dynamically
linked, stripped
• 32bit Linux에서 실행32bit Linux에서 실행
– Segmetation 오류!!?!?
Binary l33tness 200Binary l33tness 200
• Strings를 이용하여 보면…
GCC: (GNU) 2 95 3 haiku 090629– GCC: (GNU) 2.95.3-haiku-090629
– 일반 linux가 아니라 haiku OS !!
http://www haiku os org/에서• http://www.haiku-os.org/에서
vmware이미지를 받아서 실행 !이미지 아서
Binary l33tness 200Binary l33tness 200
• 실행하면 pre_init에서 crash 발생
• Haiku os에 맞는 interrupt로 패치
Binary l33tness 200Binary l33tness 200
• main 함수 앞부분
• pid가 어떤 조건을 만족하지 않으
면 fdopen에서 에러면 fdopen에서 에러
– 패치 또는 pid의 조건이 맞을때까지
반복실행!
Binary l33tness 200Binary l33tness 200
• 실행결과
http://is gd/bUBRD 를 출력– http://is.gd/bUBRD 를 출력
키는 동영상의 제목인 Asses of the Caribbean키는 동영상의 제목인 Asses of the Caribbean
Binary l33tness 300Binary l33tness 300
• There's an answer in here somew
herehere.
• file 명령어 결과
b bl– ELF 64-bit LSB executable, x86-64,
version 1 (SYSV), dynamically linkedy y
(uses shared libs), for GNU/Linux
2.6.15, not stripped2.6.15, not stripped
Binary l33tness 300Binary l33tness 300
• 64bit에서 실행결과
Encrypted keyyp y
7d343be755ff63e0a5908f625c203573
Hash for offset 0:
4a977fd18d9eada7b5a8cb9009311b77
Xor value is
37a34436d861ce47103844f255112e0437a34436d861ce47103844f255112e04
Hash for offset 17:
5afa2306bc15a62e345137b6157a1d7d
Xor value is
6d5967306474686924697344406b3379
Final decrypted key value
6d5967306474686924697344406b3379
Binary l33tness 300Binary l33tness 300
• ascii 코드 !!!
• mYg0dthi$isD@k3y
Binary l33tness 400Binary l33tness 400
• Running at blitz.ddtek.biz:5566
file 명령 결과• file 명령 결과
– ELF 32-bit LSB executable, Intel,
80386, version 1 (SYSV), for
GNU/Linux 2 6 18 dynamicallyGNU/Linux 2.6.18, dynamically
linked (uses shared libs), stripped
• Java에 관련된 string들• Java에 관련된 string들
– J2ME’s KVM (K Virtual Machine)
Binary l33tness 400Binary l33tness 400
• KVM을 수정한 것으로 추정
원래 KVM은 class 파일을 인자로 받– 원래 KVM은 class 파일을 인자로 받
지만 bin400은 그렇지 않다
– 내장된 class를 찾거나 VM 분석 !
• 분석
– 어…어렵다..!!
Binary l33tness 400Binary l33tness 400
• 실행하면 아무런 출력이 없음 !
netstat으로 확인하면 5566 포트가– netstat으로 확인하면 5566 포트가
열려있음
– 서버 프로그램 !
• 접속해보면..접속해 면
hahah@hahah-desktop:~/defcon18$ nc localhost 5566
Please submit your key for verification:y y
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Hmm, not quite right.
Binary l33tness 400Binary l33tness 400
• 분석
main 함수 : 80517F0– main 함수 : 80517F0
– main 함수를 따라가다가 string 중
“Illegal bytecode %ld”를 쓰는 함수
를 발견를 발견
– sub_804E000 : VM 핵심 함수 !
b d i !– bytecode interpreter !
Binary l33tness 400Binary l33tness 400
• switch가 시작되는 0804E01Bswitch가 시작되는 0804E01B
– eax : opcode
– ebx : parameter pointer
– esi : 해당 opcode가 저장된 주소esi : 해당 opcode가 저장된 주소
Binary l33tness 400Binary l33tness 400
• gdb를 이용하여 bytecode 추출
attach 하여 switch에서 원하는 데이– attach 하여 switch에서 원하는 데이
터를 알아낸다
(gdb) b *0x804E01B
( db) d 1(gdb) commands 1
> silent
> printf "%08x %x %x %xn" $esi $eax *$ebx *($ebx+4)> printf %08x %x %x %xn , $esi, $eax, *$ebx, *($ebx+4)
> continue
> end> end
Binary l33tness 400Binary l33tness 400
• Bytecode 분석
오랜 시간이 걸린다– 오랜 시간이 걸린다
– IF_ICMPEQ 같은 비교 opcode 위주
로 분석
– 문자열을 사용하므로 ARRAYLENGTH문자열을 사용하므로 ARRAYLENGTH
opcode를 통해 많은 데이터를 처리
Binary l33tness 400Binary l33tness 400
• ARRAYLENGTH에 대해 breakpoint
(gdb) b *0x804E01B(g )
Breakpoint 1 at 0x804e01b
(gdb) cond 1 ($eax==0xbe) // 0xbe – ARRAYLENGTH opcode
(gdb) commands 1
>silent
>printf "%d %sn" *(*($ebx)+8) *($ebx)+12>printf %d %sn , *(*($ebx)+8), *($ebx)+12
>continue
>end
• *(*($ebx)+8) : length
• *($ebx)+12 : array 문자열
Binary l33tness 400Binary l33tness 400
• Client
hahah@hahah-desktop:~/defcon18$ nc localhost 5566
Please submit your key for verification:
aaaaaaa
• gdb - serverg
Continuing.
1616
.... (생략)
77 aaaaaaa
34 Y’Ïs4Q¦üÉ#–tÿþ$íþd7–t4oçPp•¡ô
22 Hmm, not quite right.
Binary l33tness 400Binary l33tness 400
• Key의 길이는 34 글자 !
• IXOR opcode를 반복적으로 사용IXOR opcode를 반복적으로 사용
• 256byte의 array를 사용
RC4 알고리즘으로 추측 !– RC4 알고리즘으로 추측 !
Binary l33tness 400Binary l33tness 400
(gdb) b *0x804E01B
Breakpoint 1 at 0x804e01b
(gdb) cond 1 ($eax==0xbe)&&(*(*($ebx)+8)!=256)(gdb) cond 1 ($eax==0xbe)&&(*(*($ebx)+8)!=256)
(gdb) commands 1
>silent
>printf "%d %sn", *(*($ebx)+8), *($ebx)+12
>x/10x (*($ebx)+12)
>continue
>end
위 코드를 이용하여 문자열을 관찰• 위 코드를 이용하여 문자열을 관찰
• 길이가 256byte인 것은 rc4 key table이라 생
각되어 무시
Binary l33tness 400Binary l33tness 400
• client에서 34글자 입력
34 Y’Ïs4Q¦üÉ#–tÿþ$íþd7–t4oçPp•¡ô
0x808d49c: 0x73cf9259 0xa6055134 0x9623c9fc 0xff747ffb
0x808d4ac: 0xfeed24fe 0x74963764 0xe7156f34 0x5c957050
0x808d4bc: 0x0000f4a1 0x0000050c
5 ddtek
0x808d2d8: 0x65746464 0x0000006b 0x00000c0c
….
• 위의 값이 cipher text, 아래의 ddtek
이 key로 추정이 key로 추정
Binary l33tness 400Binary l33tness 400
• 앞에서 구한 값들을 이용하여 RC4로 디
코딩을 하였다.딩을 하였다
• ddteks love for java is everywhere
Binary l33tness 500Binary l33tness 500
• looking for a key of course: file
• file 명령 결과file 명령 결과
– ELF 64-bit MSB executable, SPARC
V9 t t l t d i i 1V9, total store ordering, version 1
(SYSV), dynamically linked (uses
shared libs), stripped
– Solaris SPARC !!Solaris, SPARC !!
– c500_b6427ab1a64e6836.dat 파일도..
Binary l33tness 500Binary l33tness 500
• SPARC machine 이 없다!
SPARC ASM을 모른다• SPARC-ASM을 모른다 ㅠ_ㅠ
• IDA로 정적 분석 !
– 다행히 symbol이 남아있음
루틴이 복잡하지 않음– 루틴이 복잡하지 않음
Binary l33tness 500Binary l33tness 500
• GetMechSession()에 대해 검색
– pkcs11t.h 내용 중
– #define CKM DES CBC PAD 0x00000125_ _ _
DES CBC 암호화 !• DES-CBC 암호화 !
Binary l33tness 500Binary l33tness 500
• 관련 예제 소스를 찾아보면
/* Set the encryption mechanism to CKM DES CBC PAD *// Set the encryption mechanism to CKM_DES_CBC_PAD /
mechanism.mechanism = CKM_DES_CBC_PAD;
mechanism.pParameter = des_cbc_iv;p _ _ ;
mechanism.ulParameterLen = 8;
• cbc iv 값이 필요• cbc_iv 값이 필요
– main 앞부분에서
– 0xDEADBEEFBAADF00D가 iv로 추정됨
Binary l33tness 500Binary l33tness 500
• iv뿐만 아니라 key도 필요
k라는 이름의 전역변수가 보인다– k라는 이름의 전역변수가 보인다.
iv와 key로 dat파일을 디코딩• iv와 key로 .dat파일을 디코딩
openssl enc -d -des-cbc -in c500_b6427ab1a64e6836.dat
K DD73CC7FDD7ECC7F i DEADBEEFBAADF00D-K DD73CC7FDD7ECC7F -iv DEADBEEFBAADF00D
allthatworkanditsjustDES!?!
ll h k d• allthatworkanditsjustDES!?!
Pwtent Pwnables 100Pwtent Pwnables 100
• Running on pwn16.ddtek.biz. Pass:
zenatazenata
• FreeBSD mail service(?) server
• server의 시작 시간에 대한 cookie가
t k에 존재stack에 존재
$ nc 127 0 0 1 49217$ nc 127.0.0.1 49217
Password: zenata
220 youdont.own.me C-Mail service ready at Wed May 26 00:58:53 2010
UPTM
250 2:32:22
Pwtent Pwnables 100Pwtent Pwnables 100
• 프로그램 구조
명령어를 입력 받고 lookup함수를 통– 명령어를 입력 받고 lookup함수를 통
해 알맞은 handler 함수를 선택, 실행
• 취약점• 취약점
– data() handler 함수에서 data를 입력
받을 때 BOF취약점 발생
– 0x100 byte의 buffer에 0x200 byte를0x100 byte의 buffer에 0x200 byte를
입력 받음
Pwtent Pwnables 100Pwtent Pwnables 100
Pwtent Pwnables 100Pwtent Pwnables 100
• time based cookie
처음 접속 시 알려주는 현재시간과– 처음 접속 시 알려주는 현재시간과
UPTM 명령어를 쳤을 때 보여주는 경
과 시간의 차이로 서버 시작시간을과 시간의 차이로 서버 시작시간을
알아냄
– server time zone에 따른 차이를 추측
(-12~+12 시간차)( 12 +12 시간차)
– 구한 시간을 이용하여 같은 방식으로
ki 를 계산cookie를 계산
Pwtent Pwnables 100Pwtent Pwnables 100
• 공격 방법
BOF를 통해 return address 변조– BOF를 통해 return address 변조
– time based cookie 우회
– read 함수 등을 이용하여 reverse
shellcode를 임의의 주소에 받아서 실shellcode를 임의의 주소에 받아서 실
행하도록 공격 코드 구성
• 공격!!!!• 공격!!!!
Pwtent Pwnables 400Pwtent Pwnables 400
• 작년 PP400과 동일한 문제
• Mach-O executable, PowerPC !!Mach O executable, PowerPC !!
• 익숙하지 않은 assembly
프로그램의 흐름 파악이 중요– 프로그램의 흐름 파악이 중요
Pwtent Pwnables 400Pwtent Pwnables 400
• 실행 결과
4138 포트로 서버 형태로 실행– 4138 포트로 서버 형태로 실행
• 접속 결과
nc localhost 4138nc localhost 4138
Send me some floats (max of 16), I will tell you some stats!
1 2 3^D
The average of your 3 numbers is 2.000000
The standard deviation of your 3 numbers is 0.816497
• float 값을 입력 받음
16개 이상도 입력가능– 16개 이상도 입력가능
Pwtent Pwnables 400Pwtent Pwnables 400
• 분석
클라이언트– 클라이언트
handler를 찾기
위해 “S d위해 “Send me
some floats”를
이용
– sub 338C 함수sub_338C 함수
가 handler
Pwtent Pwnables 400Pwtent Pwnables 400
• 입력 받는 루
틴에서 “%f ”틴에서 %f
• scanf 같은 함
수를 쓰는 것수를 쓰는 것
으로 보인다인다
• float 값을 반
복적으로 받아복적으로 받아
저장
Pwtent Pwnables 400Pwtent Pwnables 400
• 공격 테스트
$ python -c 'print " ".join(map(str, range(100))), "4"' | nc$ python c print .join(map(str, range(100))), 4 | nc
localhost 4138
• 0~100 까지의 숫자 입력• 0~100 까지의 숫자 입력
– crash 발생 !!
– 숫자들이 stack에 저장되어 가다
return address를 변조하게 됨return address를 변조하게 됨
– gdb를 이용하여 몇 번째에 return
dd 가 변조 되는지 검사address가 변조 되는지 검사
Pwtent Pwnables 400Pwtent Pwnables 400
• 공격 방법
쉘코드가 float 형태로 스택에 저장되– 쉘코드가 float 형태로 스택에 저장되
도록 4바이트씩 float 값으로 바꿔서
입력입력
– return address를 쉘코드의 위치로 변를 쉘 의 위치 변
조(nop sleding)
• 공격 !!!공격
후기후기
• 너무 많은 함정들 ㅠ_ㅠ
답을 찾아도 답인지 아닌지– 답을 찾아도 답인지 아닌지…
– 불필요한 코드 & 암호들
• Binary l33tness
분석보다 실행에 초점– 분석보다 실행에 초점
• 운영에 대한 아쉬움운영에 대한 아쉬움
– pp500 유출 !
– pp400은 작년 그대로 !!
후기후기
ddtek ;;• ddtek ….. -_-;;
– I’m a sheep loverp
– video & pics…
• GoNGoN
– lucky
– googled pwnable400 !!
모범생 이벤트 !!모범생 이벤트 !!
다양한 OS Architecture의 문제들• 다양한 OS, Architecture의 문제들
이 나왔는데요..
• 오늘 나온 OS와 Architecture들을
맞춰주세요 !맞춰주세요 !
모범생 이벤트 !!모범생 이벤트 !!
• Bin100 – 1. ???, Linux
Bin200 x86 32 2 ???• Bin200 – x86-32, 2. ???
• Bin300 – 3. ???, LinuxBin300 3. ???, Linux
• Bin400 – x86-32, Linux
• Bin500 – 4. ???, Solaris
PP100 86 32 5 ???• PP100 – x86-32, 5. ???
• PP400 – 6 ??? Mac OS X• PP400 6. ???, Mac OS X
모범생 이벤트 !!모범생 이벤트 !!
모범생 이벤트 !!모범생 이벤트 !!
• Bin100 – 1. x86-32, Linux
Bin200 x86 32 2 haiku OS• Bin200 – x86-32, 2. haiku-OS
• Bin300 – 3. x86-64, LinuxBin300 3. x86 64, Linux
• Bin400 – x86-32, Linux
• Bin500 – 4. SPARC 64, Solaris
PP100 86 32 5 F BSD• PP100 – x86-32, 5. FreeBSD
• PP400 – 6 PPC Mac OS X• PP400 6. PPC, Mac OS X
ReferencesReferences
• http://ddtek.biz/
출제진 홈페이지– 출제진 홈페이지
• http://www.vnsecurity.net/2010/0
5/d f 18 l it5/defcon-18-quals-writeups-
collection//
– 풀이 모음
www.CodeEngn.com
2010 4th CodeEngn ReverseEngineering Conference

Weitere ähnliche Inhalte

Was ist angesagt?

Blockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreBlockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreihpark92
 
[OpenTRS-001] Vitor
[OpenTRS-001] Vitor[OpenTRS-001] Vitor
[OpenTRS-001] VitorTheori
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingihpark92
 
Character Encoding in python
Character Encoding in pythonCharacter Encoding in python
Character Encoding in pythondaesung7kang
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System상현 조
 
Concurrent servers
Concurrent serversConcurrent servers
Concurrent serversTonyYoon12
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 
Sha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeupSha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeupSeungyong Lee
 
Blockchain 2nd ethereum_core
Blockchain 2nd ethereum_coreBlockchain 2nd ethereum_core
Blockchain 2nd ethereum_coreihpark92
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013Esun Kim
 
도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespaceSam Kim
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance상현 조
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘Taewoo Lee
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)khuhacker
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예zupet
 
ffmpeg optimization using CUDA
ffmpeg optimization using CUDAffmpeg optimization using CUDA
ffmpeg optimization using CUDAyyooooon
 
세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발Jay JH Park
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리Seungyong Lee
 
Blockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractBlockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractFermat Jade
 

Was ist angesagt? (20)

Blockchain 1st bitcoin_core
Blockchain 1st bitcoin_coreBlockchain 1st bitcoin_core
Blockchain 1st bitcoin_core
 
[OpenTRS-001] Vitor
[OpenTRS-001] Vitor[OpenTRS-001] Vitor
[OpenTRS-001] Vitor
 
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programmingBlockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
 
Character Encoding in python
Character Encoding in pythonCharacter Encoding in python
Character Encoding in python
 
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing SystemGCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
 
Concurrent servers
Concurrent serversConcurrent servers
Concurrent servers
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
Sha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeupSha 2017-teaser-round website attack writeup
Sha 2017-teaser-round website attack writeup
 
Blockchain 2nd ethereum_core
Blockchain 2nd ethereum_coreBlockchain 2nd ethereum_core
Blockchain 2nd ethereum_core
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
 
도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace도커없이컨테이너 만들기 8편 - pid namespace
도커없이컨테이너 만들기 8편 - pid namespace
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
 
ffmpeg optimization using CUDA
ffmpeg optimization using CUDAffmpeg optimization using CUDA
ffmpeg optimization using CUDA
 
세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
Blockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart ContractBlockchain Study(4) - Geth & Smart Contract
Blockchain Study(4) - Geth & Smart Contract
 

Andere mochten auch

GoogleCTF 2016 [Ernst Echidna] Write-Up (ver.korean)
GoogleCTF 2016 [Ernst Echidna] Write-Up (ver.korean)GoogleCTF 2016 [Ernst Echidna] Write-Up (ver.korean)
GoogleCTF 2016 [Ernst Echidna] Write-Up (ver.korean)Sehan Lee
 
무료강의 보안전문가의 길(2015년) v0.9_공개버전
무료강의 보안전문가의 길(2015년) v0.9_공개버전무료강의 보안전문가의 길(2015년) v0.9_공개버전
무료강의 보안전문가의 길(2015년) v0.9_공개버전James (SeokHun) Hwang
 
초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인H4C
 
해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹totodeung
 
스타트업 부터 대기업까지
스타트업 부터 대기업까지스타트업 부터 대기업까지
스타트업 부터 대기업까지totodeung
 
CTF WEB Back_END 개발기
CTF WEB Back_END 개발기CTF WEB Back_END 개발기
CTF WEB Back_END 개발기one_two_12
 
2017년도 고려대학교 사이버국방학과 입시설명 자료
2017년도 고려대학교 사이버국방학과 입시설명 자료2017년도 고려대학교 사이버국방학과 입시설명 자료
2017년도 고려대학교 사이버국방학과 입시설명 자료Seungjoo Kim
 
4년치 컨닝페이퍼
4년치 컨닝페이퍼4년치 컨닝페이퍼
4년치 컨닝페이퍼totodeung
 
1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론Youngjun Chang
 
[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법
[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법
[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법GangSeok Lee
 
3.ahn report를 이용한 악성코드 대응
3.ahn report를 이용한 악성코드 대응3.ahn report를 이용한 악성코드 대응
3.ahn report를 이용한 악성코드 대응Youngjun Chang
 
2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법Youngjun Chang
 
UX 디자인에 대하여
UX 디자인에 대하여UX 디자인에 대하여
UX 디자인에 대하여totodeung
 
05 pe 헤더(pe header)
05 pe 헤더(pe header)05 pe 헤더(pe header)
05 pe 헤더(pe header)Ilsun Choi
 
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템GangSeok Lee
 
Log parser&webshell detection
Log parser&webshell detectionLog parser&webshell detection
Log parser&webshell detectionIlsun Choi
 
Ransomware: History, Analysis, & Mitigation
Ransomware: History, Analysis, & MitigationRansomware: History, Analysis, & Mitigation
Ransomware: History, Analysis, & MitigationWhiskeyNeon
 
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:쀼쀼뺘뺘)
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:쀼쀼뺘뺘)Christmas CTF 보안대회 수상팀 문제풀이서(팀명:쀼쀼뺘뺘)
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:쀼쀼뺘뺘)NAVER D2
 
해킹과 보안
해킹과 보안해킹과 보안
해킹과 보안창열 최
 

Andere mochten auch (20)

GoogleCTF 2016 [Ernst Echidna] Write-Up (ver.korean)
GoogleCTF 2016 [Ernst Echidna] Write-Up (ver.korean)GoogleCTF 2016 [Ernst Echidna] Write-Up (ver.korean)
GoogleCTF 2016 [Ernst Echidna] Write-Up (ver.korean)
 
무료강의 보안전문가의 길(2015년) v0.9_공개버전
무료강의 보안전문가의 길(2015년) v0.9_공개버전무료강의 보안전문가의 길(2015년) v0.9_공개버전
무료강의 보안전문가의 길(2015년) v0.9_공개버전
 
초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인
 
해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹
 
스타트업 부터 대기업까지
스타트업 부터 대기업까지스타트업 부터 대기업까지
스타트업 부터 대기업까지
 
Hyper-v
Hyper-vHyper-v
Hyper-v
 
CTF WEB Back_END 개발기
CTF WEB Back_END 개발기CTF WEB Back_END 개발기
CTF WEB Back_END 개발기
 
2017년도 고려대학교 사이버국방학과 입시설명 자료
2017년도 고려대학교 사이버국방학과 입시설명 자료2017년도 고려대학교 사이버국방학과 입시설명 자료
2017년도 고려대학교 사이버국방학과 입시설명 자료
 
4년치 컨닝페이퍼
4년치 컨닝페이퍼4년치 컨닝페이퍼
4년치 컨닝페이퍼
 
1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론1. 악성코드 진단 기법 개론
1. 악성코드 진단 기법 개론
 
[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법
[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법
[2008 CodeEngn Conference 02] graylynx - 정적 링크된 Stripped ELF 바이너리 상에서의 함수 탐지 기법
 
3.ahn report를 이용한 악성코드 대응
3.ahn report를 이용한 악성코드 대응3.ahn report를 이용한 악성코드 대응
3.ahn report를 이용한 악성코드 대응
 
2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법2. 악성코드 분석 방법론과 기법
2. 악성코드 분석 방법론과 기법
 
UX 디자인에 대하여
UX 디자인에 대하여UX 디자인에 대하여
UX 디자인에 대하여
 
05 pe 헤더(pe header)
05 pe 헤더(pe header)05 pe 헤더(pe header)
05 pe 헤더(pe header)
 
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
 
Log parser&webshell detection
Log parser&webshell detectionLog parser&webshell detection
Log parser&webshell detection
 
Ransomware: History, Analysis, & Mitigation
Ransomware: History, Analysis, & MitigationRansomware: History, Analysis, & Mitigation
Ransomware: History, Analysis, & Mitigation
 
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:쀼쀼뺘뺘)
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:쀼쀼뺘뺘)Christmas CTF 보안대회 수상팀 문제풀이서(팀명:쀼쀼뺘뺘)
Christmas CTF 보안대회 수상팀 문제풀이서(팀명:쀼쀼뺘뺘)
 
해킹과 보안
해킹과 보안해킹과 보안
해킹과 보안
 

Ähnlich wie [2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이

Redis From 2.8 to 4.x
Redis From 2.8 to 4.xRedis From 2.8 to 4.x
Redis From 2.8 to 4.xDaeMyung Kang
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1Jinkyoung Kim
 
[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel CaliforniaTheori
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유Hwan Min
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조Logpresso
 
[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in China[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in ChinaSeungmin Shin
 
Jnetpcap quickguide
Jnetpcap quickguideJnetpcap quickguide
Jnetpcap quickguideSukjin Yun
 
공인인증서 크래킹 - Inc0gnito 2015
공인인증서 크래킹 - Inc0gnito 2015공인인증서 크래킹 - Inc0gnito 2015
공인인증서 크래킹 - Inc0gnito 2015Hajin Jang
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) Tae Young Lee
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개Jong-il Seok
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버준철 박
 
242 naver-2
242 naver-2242 naver-2
242 naver-2NAVER D2
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요? 내훈 정
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
Windows kernel basic exploit
Windows kernel basic exploitWindows kernel basic exploit
Windows kernel basic exploitKyoungseok Yang
 
[OpenTRS-001] election_coin
[OpenTRS-001] election_coin[OpenTRS-001] election_coin
[OpenTRS-001] election_coinTheori
 

Ähnlich wie [2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이 (20)

Redis From 2.8 to 4.x
Redis From 2.8 to 4.xRedis From 2.8 to 4.x
Redis From 2.8 to 4.x
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
 
[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조
 
[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in China[KGC 2013] Online Game Security in China
[KGC 2013] Online Game Security in China
 
Jnetpcap quickguide
Jnetpcap quickguideJnetpcap quickguide
Jnetpcap quickguide
 
공인인증서 크래킹 - Inc0gnito 2015
공인인증서 크래킹 - Inc0gnito 2015공인인증서 크래킹 - Inc0gnito 2015
공인인증서 크래킹 - Inc0gnito 2015
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
 
242 naver-2
242 naver-2242 naver-2
242 naver-2
 
Mongodb tip42 50
Mongodb tip42 50Mongodb tip42 50
Mongodb tip42 50
 
Processor
ProcessorProcessor
Processor
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
Windows kernel basic exploit
Windows kernel basic exploitWindows kernel basic exploit
Windows kernel basic exploit
 
[OpenTRS-001] election_coin
[OpenTRS-001] election_coin[OpenTRS-001] election_coin
[OpenTRS-001] election_coin
 
Meteor IoT
Meteor IoTMeteor IoT
Meteor IoT
 

Mehr von GangSeok Lee

[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안GangSeok Lee
 
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석GangSeok Lee
 
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 FuzzingGangSeok Lee
 
[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼
[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼
[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼GangSeok Lee
 
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?GangSeok Lee
 
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KOGangSeok Lee
 
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study EN
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study EN[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study EN
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study ENGangSeok Lee
 
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KO
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KO[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KO
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KOGangSeok Lee
 
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis EN
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis EN[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis EN
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis ENGangSeok Lee
 
[2014 CodeEngn Conference 11] 정든품바 - 웹성코드
[2014 CodeEngn Conference 11] 정든품바 - 웹성코드[2014 CodeEngn Conference 11] 정든품바 - 웹성코드
[2014 CodeEngn Conference 11] 정든품바 - 웹성코드GangSeok Lee
 
[2014 CodeEngn Conference 10] 정광운 - 안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)
[2014 CodeEngn Conference 10] 정광운 -  안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)[2014 CodeEngn Conference 10] 정광운 -  안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)
[2014 CodeEngn Conference 10] 정광운 - 안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)GangSeok Lee
 
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기
[2014 CodeEngn Conference 10] 노용환 -  디버거 개발, 삽질기[2014 CodeEngn Conference 10] 노용환 -  디버거 개발, 삽질기
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기GangSeok Lee
 
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다GangSeok Lee
 
[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과
[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과
[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과GangSeok Lee
 
[2013 CodeEngn Conference 09] proneer - Malware Tracker
[2013 CodeEngn Conference 09] proneer - Malware Tracker[2013 CodeEngn Conference 09] proneer - Malware Tracker
[2013 CodeEngn Conference 09] proneer - Malware TrackerGangSeok Lee
 
[2013 CodeEngn Conference 09] BlueH4G - hooking and visualization
[2013 CodeEngn Conference 09] BlueH4G - hooking and visualization[2013 CodeEngn Conference 09] BlueH4G - hooking and visualization
[2013 CodeEngn Conference 09] BlueH4G - hooking and visualizationGangSeok Lee
 
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploitsGangSeok Lee
 
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론GangSeok Lee
 
[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석
[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석
[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석GangSeok Lee
 
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽GangSeok Lee
 

Mehr von GangSeok Lee (20)

[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안
[2014 CodeEngn Conference 11] 박한범 - 가상화 기술과 보안
 
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
 
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
[2014 CodeEngn Conference 11] 남대현 - iOS MobileSafari Fuzzer 제작 및 Fuzzing
 
[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼
[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼
[2014 CodeEngn Conference 11] 김기홍 - 빅데이터 기반 악성코드 자동 분석 플랫폼
 
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
[2014 CodeEngn Conference 11] 최우석 - 자바스크립트 난독화 너네 뭐니?
 
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study KO
 
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study EN
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study EN[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study EN
[2014 CodeEngn Conference 11] 박세한 - IE 1DAY Case Study EN
 
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KO
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KO[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KO
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis KO
 
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis EN
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis EN[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis EN
[2014 CodeEngn Conference 11] 김호빈 - Android Bootkit Analysis EN
 
[2014 CodeEngn Conference 11] 정든품바 - 웹성코드
[2014 CodeEngn Conference 11] 정든품바 - 웹성코드[2014 CodeEngn Conference 11] 정든품바 - 웹성코드
[2014 CodeEngn Conference 11] 정든품바 - 웹성코드
 
[2014 CodeEngn Conference 10] 정광운 - 안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)
[2014 CodeEngn Conference 10] 정광운 -  안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)[2014 CodeEngn Conference 10] 정광운 -  안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)
[2014 CodeEngn Conference 10] 정광운 - 안드로이드에서도 한번 후킹을 해볼까 (Hooking on Android)
 
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기
[2014 CodeEngn Conference 10] 노용환 -  디버거 개발, 삽질기[2014 CodeEngn Conference 10] 노용환 -  디버거 개발, 삽질기
[2014 CodeEngn Conference 10] 노용환 - 디버거 개발, 삽질기
 
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
 
[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과
[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과
[2013 CodeEngn Conference 09] x15kangx - MS Office 2010 문서 암호화 방식 분석 결과
 
[2013 CodeEngn Conference 09] proneer - Malware Tracker
[2013 CodeEngn Conference 09] proneer - Malware Tracker[2013 CodeEngn Conference 09] proneer - Malware Tracker
[2013 CodeEngn Conference 09] proneer - Malware Tracker
 
[2013 CodeEngn Conference 09] BlueH4G - hooking and visualization
[2013 CodeEngn Conference 09] BlueH4G - hooking and visualization[2013 CodeEngn Conference 09] BlueH4G - hooking and visualization
[2013 CodeEngn Conference 09] BlueH4G - hooking and visualization
 
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
[2013 CodeEngn Conference 09] wh1ant - various tricks for linux remote exploits
 
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
[2013 CodeEngn Conference 09] 제갈공맹 - MS 원데이 취약점 분석 방법론
 
[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석
[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석
[2013 CodeEngn Conference 09] Park.Sam - 게임 해킹툴의 변칙적 공격 기법 분석
 
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
[2013 CodeEngn Conference 09] 김홍진 - 보안컨설팅 이해 및 BoB 보안컨설팅 인턴쉽
 

[2010 CodeEngn Conference 04] hahah - Defcon 18 CTF 문제풀이

  • 1. DEFCON 18 CTF 제 이문제풀이 김은수 hahah KAIST G N / B i l bKAIST GoN / Beistlab hahah@kaist.ac.kr twitter.com/Hah4h www.CodeEngn.com 2010 4th CodeEngn ReverseEngineering Conference
  • 2. ContentsContents • DEFCON CTF? Binary l33tness 100• Binary l33tness 100 • Binary l33tness 200Binary l33tness 200 • Binary l33tness 300 • Binary l33tness 400 Bi l33t 500• Binary l33tness 500 • Pwtent pwnables 100• Pwtent pwnables 100 • Pwtent pwnables 400 • 후기
  • 3. DEFCON CTF?DEFCON CTF? • DEFCON – 매년 라스베가스에서 개최되는 Hacking매년 라스베가스에서 개최되는 Hacking Conference 올해로 18번째– 올해로 18번째 • Capture The Flag – 상대방의 시스템을 공격하여 Flag를 빼오고상대방의 시스템을 공격하여 Flag를 빼오고, 동시에 자신의 시스템을 방어하는 방식의 대회대회 – 작년부터 Diutinus Defense Technologies Corp(ddtek)에서 문제 출제Corp(ddtek)에서 문제 출제
  • 4. DEFCON CTF?DEFCON CTF? • CTF 예선 본선과는 달리 CTF 방식이 아닌 6개– 본선과는 달리 CTF 방식이 아닌 6개 의 분야에 각각 5개의 문제 풀이 – 100점에서 500점까지의 난이도100점에서 500점까지의 난이도 – 공개된 문제를 처음 푼 팀이 다음 문 제를 선택제를 선택
  • 6. DEFCON CTF?DEFCON CTF? • 문제 분야 PURSUITS TRIVIAL– PURSUITS TRIVIAL • 넌센스, 게임, 음악분석 등 다양한 분야 – CRYPTO BADNESS • 암호 분석/크랙암호 분석/크랙 – PACKET MADNESS 주어진 패킷 캡쳐 파일 분석• 주어진 패킷 캡쳐 파일 분석
  • 7. DEFCON CTF?DEFCON CTF? • 문제 분야 BINARY L33TNESS– BINARY L33TNESS • 바이너리 리버싱 – PWTENT PWNABLES • 리모트 취약점 공격리모트 취약점 공격 – FORENSICS 디스크 이미지 파일 등에서 키 값 찾기• 디스크 이미지 파일 등에서 키 값 찾기
  • 8. Binary l33tness 100Binary l33tness 100 • Find the key • Linux x86-32 실행 결과• 실행 결과 gon@qwerty:~/defcon18/b100$ ./b100.bin Please supply a key pentest@pubuntu:~/ctf/binary100$ ./b100 aaaa I hope you got it! Good luck &0iE.m5 J ]{>=5tC!B
  • 9. Binary l33tness 100Binary l33tness 100 • 분석 • sub 8048698 sub 804886A 함수• sub_8048698, sub_804886A 함수 – RC4 알고리즘!
  • 10. Binary l33tness 100Binary l33tness 100 • sub_8048698 함수 256byte의 table을 만드는 RC4 함수!– 256byte의 table을 만드는 RC4 함수!
  • 11. Binary l33tness 100Binary l33tness 100 • sub_804886A 함수 RC4 인코딩 함수– RC4 인코딩 함수
  • 12. Binary l33tness 100Binary l33tness 100 • 입력한 문자열을 키 값으로 RC4 알 고리즘을 사용 결과를 출력고리즘을 사용, 결과를 출력 – 키 값을 모르면 풀 수 없다! – Brute force? Guessing?– Guessing? No !
  • 13. Binary l33tness 100Binary l33tness 100 • constructor에서 atexit함수를 이용하여 sub_80488e0 함수를 끝날 때 실행하도록 설정 “securekey”를 키로 어떤 데이터를 복호화 출력데이터를 복호화, 출력
  • 14. Binary l33tness 100Binary l33tness 100 • 해당 데이터를 복호화 • The real key is: bob's yer mom?• The real key is: bob s yer mom?
  • 15. Binary l33tness 100Binary l33tness 100 • 또 다른 풀이~ gon@qwerty:~/defcon18/b100$ ./b100.bing q y / / $ / Please supply a key NULL key를 입력 gon@qwerty:~/defcon18/b100$ ./b100.bin "" I hope you got it! Good luck M.+Q The real key is: bob's yer mom 으..으어??
  • 16. Binary l33tness 200Binary l33tness 200 • what treasure did pirates get? • file 명령어 결과file 명령어 결과 – ELF 32-bit LSB shared object, Intel 80386 i 1 (SYSV) d i ll80386, version 1 (SYSV), dynamically linked, stripped • 32bit Linux에서 실행32bit Linux에서 실행 – Segmetation 오류!!?!?
  • 17. Binary l33tness 200Binary l33tness 200 • Strings를 이용하여 보면… GCC: (GNU) 2 95 3 haiku 090629– GCC: (GNU) 2.95.3-haiku-090629 – 일반 linux가 아니라 haiku OS !! http://www haiku os org/에서• http://www.haiku-os.org/에서 vmware이미지를 받아서 실행 !이미지 아서
  • 18. Binary l33tness 200Binary l33tness 200 • 실행하면 pre_init에서 crash 발생 • Haiku os에 맞는 interrupt로 패치
  • 19. Binary l33tness 200Binary l33tness 200 • main 함수 앞부분 • pid가 어떤 조건을 만족하지 않으 면 fdopen에서 에러면 fdopen에서 에러 – 패치 또는 pid의 조건이 맞을때까지 반복실행!
  • 20. Binary l33tness 200Binary l33tness 200 • 실행결과 http://is gd/bUBRD 를 출력– http://is.gd/bUBRD 를 출력 키는 동영상의 제목인 Asses of the Caribbean키는 동영상의 제목인 Asses of the Caribbean
  • 21. Binary l33tness 300Binary l33tness 300 • There's an answer in here somew herehere. • file 명령어 결과 b bl– ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linkedy y (uses shared libs), for GNU/Linux 2.6.15, not stripped2.6.15, not stripped
  • 22. Binary l33tness 300Binary l33tness 300 • 64bit에서 실행결과 Encrypted keyyp y 7d343be755ff63e0a5908f625c203573 Hash for offset 0: 4a977fd18d9eada7b5a8cb9009311b77 Xor value is 37a34436d861ce47103844f255112e0437a34436d861ce47103844f255112e04 Hash for offset 17: 5afa2306bc15a62e345137b6157a1d7d Xor value is 6d5967306474686924697344406b3379 Final decrypted key value 6d5967306474686924697344406b3379
  • 23. Binary l33tness 300Binary l33tness 300 • ascii 코드 !!! • mYg0dthi$isD@k3y
  • 24. Binary l33tness 400Binary l33tness 400 • Running at blitz.ddtek.biz:5566 file 명령 결과• file 명령 결과 – ELF 32-bit LSB executable, Intel, 80386, version 1 (SYSV), for GNU/Linux 2 6 18 dynamicallyGNU/Linux 2.6.18, dynamically linked (uses shared libs), stripped • Java에 관련된 string들• Java에 관련된 string들 – J2ME’s KVM (K Virtual Machine)
  • 25. Binary l33tness 400Binary l33tness 400 • KVM을 수정한 것으로 추정 원래 KVM은 class 파일을 인자로 받– 원래 KVM은 class 파일을 인자로 받 지만 bin400은 그렇지 않다 – 내장된 class를 찾거나 VM 분석 ! • 분석 – 어…어렵다..!!
  • 26. Binary l33tness 400Binary l33tness 400 • 실행하면 아무런 출력이 없음 ! netstat으로 확인하면 5566 포트가– netstat으로 확인하면 5566 포트가 열려있음 – 서버 프로그램 ! • 접속해보면..접속해 면 hahah@hahah-desktop:~/defcon18$ nc localhost 5566 Please submit your key for verification:y y aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Hmm, not quite right.
  • 27. Binary l33tness 400Binary l33tness 400 • 분석 main 함수 : 80517F0– main 함수 : 80517F0 – main 함수를 따라가다가 string 중 “Illegal bytecode %ld”를 쓰는 함수 를 발견를 발견 – sub_804E000 : VM 핵심 함수 ! b d i !– bytecode interpreter !
  • 28. Binary l33tness 400Binary l33tness 400 • switch가 시작되는 0804E01Bswitch가 시작되는 0804E01B – eax : opcode – ebx : parameter pointer – esi : 해당 opcode가 저장된 주소esi : 해당 opcode가 저장된 주소
  • 29. Binary l33tness 400Binary l33tness 400 • gdb를 이용하여 bytecode 추출 attach 하여 switch에서 원하는 데이– attach 하여 switch에서 원하는 데이 터를 알아낸다 (gdb) b *0x804E01B ( db) d 1(gdb) commands 1 > silent > printf "%08x %x %x %xn" $esi $eax *$ebx *($ebx+4)> printf %08x %x %x %xn , $esi, $eax, *$ebx, *($ebx+4) > continue > end> end
  • 30. Binary l33tness 400Binary l33tness 400 • Bytecode 분석 오랜 시간이 걸린다– 오랜 시간이 걸린다 – IF_ICMPEQ 같은 비교 opcode 위주 로 분석 – 문자열을 사용하므로 ARRAYLENGTH문자열을 사용하므로 ARRAYLENGTH opcode를 통해 많은 데이터를 처리
  • 31. Binary l33tness 400Binary l33tness 400 • ARRAYLENGTH에 대해 breakpoint (gdb) b *0x804E01B(g ) Breakpoint 1 at 0x804e01b (gdb) cond 1 ($eax==0xbe) // 0xbe – ARRAYLENGTH opcode (gdb) commands 1 >silent >printf "%d %sn" *(*($ebx)+8) *($ebx)+12>printf %d %sn , *(*($ebx)+8), *($ebx)+12 >continue >end • *(*($ebx)+8) : length • *($ebx)+12 : array 문자열
  • 32. Binary l33tness 400Binary l33tness 400 • Client hahah@hahah-desktop:~/defcon18$ nc localhost 5566 Please submit your key for verification: aaaaaaa • gdb - serverg Continuing. 1616 .... (생략) 77 aaaaaaa 34 Y’Ïs4Q¦üÉ#–tÿþ$íþd7–t4oçPp•¡ô 22 Hmm, not quite right.
  • 33. Binary l33tness 400Binary l33tness 400 • Key의 길이는 34 글자 ! • IXOR opcode를 반복적으로 사용IXOR opcode를 반복적으로 사용 • 256byte의 array를 사용 RC4 알고리즘으로 추측 !– RC4 알고리즘으로 추측 !
  • 34. Binary l33tness 400Binary l33tness 400 (gdb) b *0x804E01B Breakpoint 1 at 0x804e01b (gdb) cond 1 ($eax==0xbe)&&(*(*($ebx)+8)!=256)(gdb) cond 1 ($eax==0xbe)&&(*(*($ebx)+8)!=256) (gdb) commands 1 >silent >printf "%d %sn", *(*($ebx)+8), *($ebx)+12 >x/10x (*($ebx)+12) >continue >end 위 코드를 이용하여 문자열을 관찰• 위 코드를 이용하여 문자열을 관찰 • 길이가 256byte인 것은 rc4 key table이라 생 각되어 무시
  • 35. Binary l33tness 400Binary l33tness 400 • client에서 34글자 입력 34 Y’Ïs4Q¦üÉ#–tÿþ$íþd7–t4oçPp•¡ô 0x808d49c: 0x73cf9259 0xa6055134 0x9623c9fc 0xff747ffb 0x808d4ac: 0xfeed24fe 0x74963764 0xe7156f34 0x5c957050 0x808d4bc: 0x0000f4a1 0x0000050c 5 ddtek 0x808d2d8: 0x65746464 0x0000006b 0x00000c0c …. • 위의 값이 cipher text, 아래의 ddtek 이 key로 추정이 key로 추정
  • 36. Binary l33tness 400Binary l33tness 400 • 앞에서 구한 값들을 이용하여 RC4로 디 코딩을 하였다.딩을 하였다 • ddteks love for java is everywhere
  • 37. Binary l33tness 500Binary l33tness 500 • looking for a key of course: file • file 명령 결과file 명령 결과 – ELF 64-bit MSB executable, SPARC V9 t t l t d i i 1V9, total store ordering, version 1 (SYSV), dynamically linked (uses shared libs), stripped – Solaris SPARC !!Solaris, SPARC !! – c500_b6427ab1a64e6836.dat 파일도..
  • 38. Binary l33tness 500Binary l33tness 500 • SPARC machine 이 없다! SPARC ASM을 모른다• SPARC-ASM을 모른다 ㅠ_ㅠ • IDA로 정적 분석 ! – 다행히 symbol이 남아있음 루틴이 복잡하지 않음– 루틴이 복잡하지 않음
  • 39. Binary l33tness 500Binary l33tness 500 • GetMechSession()에 대해 검색 – pkcs11t.h 내용 중 – #define CKM DES CBC PAD 0x00000125_ _ _ DES CBC 암호화 !• DES-CBC 암호화 !
  • 40. Binary l33tness 500Binary l33tness 500 • 관련 예제 소스를 찾아보면 /* Set the encryption mechanism to CKM DES CBC PAD *// Set the encryption mechanism to CKM_DES_CBC_PAD / mechanism.mechanism = CKM_DES_CBC_PAD; mechanism.pParameter = des_cbc_iv;p _ _ ; mechanism.ulParameterLen = 8; • cbc iv 값이 필요• cbc_iv 값이 필요 – main 앞부분에서 – 0xDEADBEEFBAADF00D가 iv로 추정됨
  • 41. Binary l33tness 500Binary l33tness 500 • iv뿐만 아니라 key도 필요 k라는 이름의 전역변수가 보인다– k라는 이름의 전역변수가 보인다. iv와 key로 dat파일을 디코딩• iv와 key로 .dat파일을 디코딩 openssl enc -d -des-cbc -in c500_b6427ab1a64e6836.dat K DD73CC7FDD7ECC7F i DEADBEEFBAADF00D-K DD73CC7FDD7ECC7F -iv DEADBEEFBAADF00D allthatworkanditsjustDES!?! ll h k d• allthatworkanditsjustDES!?!
  • 42. Pwtent Pwnables 100Pwtent Pwnables 100 • Running on pwn16.ddtek.biz. Pass: zenatazenata • FreeBSD mail service(?) server • server의 시작 시간에 대한 cookie가 t k에 존재stack에 존재 $ nc 127 0 0 1 49217$ nc 127.0.0.1 49217 Password: zenata 220 youdont.own.me C-Mail service ready at Wed May 26 00:58:53 2010 UPTM 250 2:32:22
  • 43. Pwtent Pwnables 100Pwtent Pwnables 100 • 프로그램 구조 명령어를 입력 받고 lookup함수를 통– 명령어를 입력 받고 lookup함수를 통 해 알맞은 handler 함수를 선택, 실행 • 취약점• 취약점 – data() handler 함수에서 data를 입력 받을 때 BOF취약점 발생 – 0x100 byte의 buffer에 0x200 byte를0x100 byte의 buffer에 0x200 byte를 입력 받음
  • 45. Pwtent Pwnables 100Pwtent Pwnables 100 • time based cookie 처음 접속 시 알려주는 현재시간과– 처음 접속 시 알려주는 현재시간과 UPTM 명령어를 쳤을 때 보여주는 경 과 시간의 차이로 서버 시작시간을과 시간의 차이로 서버 시작시간을 알아냄 – server time zone에 따른 차이를 추측 (-12~+12 시간차)( 12 +12 시간차) – 구한 시간을 이용하여 같은 방식으로 ki 를 계산cookie를 계산
  • 46. Pwtent Pwnables 100Pwtent Pwnables 100 • 공격 방법 BOF를 통해 return address 변조– BOF를 통해 return address 변조 – time based cookie 우회 – read 함수 등을 이용하여 reverse shellcode를 임의의 주소에 받아서 실shellcode를 임의의 주소에 받아서 실 행하도록 공격 코드 구성 • 공격!!!!• 공격!!!!
  • 47. Pwtent Pwnables 400Pwtent Pwnables 400 • 작년 PP400과 동일한 문제 • Mach-O executable, PowerPC !!Mach O executable, PowerPC !! • 익숙하지 않은 assembly 프로그램의 흐름 파악이 중요– 프로그램의 흐름 파악이 중요
  • 48. Pwtent Pwnables 400Pwtent Pwnables 400 • 실행 결과 4138 포트로 서버 형태로 실행– 4138 포트로 서버 형태로 실행 • 접속 결과 nc localhost 4138nc localhost 4138 Send me some floats (max of 16), I will tell you some stats! 1 2 3^D The average of your 3 numbers is 2.000000 The standard deviation of your 3 numbers is 0.816497 • float 값을 입력 받음 16개 이상도 입력가능– 16개 이상도 입력가능
  • 49. Pwtent Pwnables 400Pwtent Pwnables 400 • 분석 클라이언트– 클라이언트 handler를 찾기 위해 “S d위해 “Send me some floats”를 이용 – sub 338C 함수sub_338C 함수 가 handler
  • 50. Pwtent Pwnables 400Pwtent Pwnables 400 • 입력 받는 루 틴에서 “%f ”틴에서 %f • scanf 같은 함 수를 쓰는 것수를 쓰는 것 으로 보인다인다 • float 값을 반 복적으로 받아복적으로 받아 저장
  • 51. Pwtent Pwnables 400Pwtent Pwnables 400 • 공격 테스트 $ python -c 'print " ".join(map(str, range(100))), "4"' | nc$ python c print .join(map(str, range(100))), 4 | nc localhost 4138 • 0~100 까지의 숫자 입력• 0~100 까지의 숫자 입력 – crash 발생 !! – 숫자들이 stack에 저장되어 가다 return address를 변조하게 됨return address를 변조하게 됨 – gdb를 이용하여 몇 번째에 return dd 가 변조 되는지 검사address가 변조 되는지 검사
  • 52. Pwtent Pwnables 400Pwtent Pwnables 400 • 공격 방법 쉘코드가 float 형태로 스택에 저장되– 쉘코드가 float 형태로 스택에 저장되 도록 4바이트씩 float 값으로 바꿔서 입력입력 – return address를 쉘코드의 위치로 변를 쉘 의 위치 변 조(nop sleding) • 공격 !!!공격
  • 53. 후기후기 • 너무 많은 함정들 ㅠ_ㅠ 답을 찾아도 답인지 아닌지– 답을 찾아도 답인지 아닌지… – 불필요한 코드 & 암호들 • Binary l33tness 분석보다 실행에 초점– 분석보다 실행에 초점 • 운영에 대한 아쉬움운영에 대한 아쉬움 – pp500 유출 ! – pp400은 작년 그대로 !!
  • 54. 후기후기 ddtek ;;• ddtek ….. -_-;; – I’m a sheep loverp – video & pics… • GoNGoN – lucky – googled pwnable400 !!
  • 55. 모범생 이벤트 !!모범생 이벤트 !! 다양한 OS Architecture의 문제들• 다양한 OS, Architecture의 문제들 이 나왔는데요.. • 오늘 나온 OS와 Architecture들을 맞춰주세요 !맞춰주세요 !
  • 56. 모범생 이벤트 !!모범생 이벤트 !! • Bin100 – 1. ???, Linux Bin200 x86 32 2 ???• Bin200 – x86-32, 2. ??? • Bin300 – 3. ???, LinuxBin300 3. ???, Linux • Bin400 – x86-32, Linux • Bin500 – 4. ???, Solaris PP100 86 32 5 ???• PP100 – x86-32, 5. ??? • PP400 – 6 ??? Mac OS X• PP400 6. ???, Mac OS X
  • 58. 모범생 이벤트 !!모범생 이벤트 !! • Bin100 – 1. x86-32, Linux Bin200 x86 32 2 haiku OS• Bin200 – x86-32, 2. haiku-OS • Bin300 – 3. x86-64, LinuxBin300 3. x86 64, Linux • Bin400 – x86-32, Linux • Bin500 – 4. SPARC 64, Solaris PP100 86 32 5 F BSD• PP100 – x86-32, 5. FreeBSD • PP400 – 6 PPC Mac OS X• PP400 6. PPC, Mac OS X
  • 59. ReferencesReferences • http://ddtek.biz/ 출제진 홈페이지– 출제진 홈페이지 • http://www.vnsecurity.net/2010/0 5/d f 18 l it5/defcon-18-quals-writeups- collection// – 풀이 모음 www.CodeEngn.com 2010 4th CodeEngn ReverseEngineering Conference