SlideShare a Scribd company logo
시스템 버그 (level1) 부터
프로그램 취약점(level 20) 까지
이무송
fromitive@gmail.com
해커스쿨 FTZ 문제 풀이
문제 분석 풀이 제시 풀이 결과 느낀점
각 문제들이
어떤 형태를 띠고 있는지
분석을 합니다.
문제를 파악한 후
풀이 과정을
제시하겠습니다.
풀이 과정데로
풀어서 결과를 확인하는
시간을 갖겠습니다.
각 문제별로
어떤 취약점이 있었는지
한번 되집어 보겠습니다.
level1
문제 분석
level 1에 접속하면 hint 파일이 있는데 그 내용을 들여다 봤다.
level1
문제 분석
우리의 목표는 user level2의 setuid 가 걸린 파일을 찾아야 한다.
level1
문제 분석
find 명령어로 찾아보니까 딱 한개의 파일이 발견되었다.
level1
문제 분석
파일 실행후 level2 권한으로 명령어를 실행할 수 있게 되었다.
level1
풀이 제시
우리는 쉘을 획득 할 수 있다면 my-pass 뿐만 아니라,
chmod 명령어를 수행 할 수 있을것이다.
명령어 bash 입력
bash 쉘 실행 후
원하는 명령어 사용
가능
level2의
setuid
level1
풀이 과정
bash 쉘로 level2의 실행권한을 습득하였고,
my-pass 명령어를 사용해 패스워드를 알아냈다.
level1
느낀 점
level1 문제는 setuid가 걸린 파일을 찾을 수 있거나,
제약 된 환경에서 우회할 수 있는가를 보는 문제였던것 같다.
level2
문제 분석
힌트를 보고 텍스트 편집기를 setuid가 걸린 텍스트 편집기를 찾아 보았다.
level2
문제 분석
/usr/bin/editor가 level3 setuid가 걸려 있는것을 확인해 보았고 vim에디터였다.
level2
풀이 제시
vim 에는 ex command 라고 :(콜론)을 입력하면 밑에 명령어를
입력할 수 있는데 ![명령어]를 치면 해당 명령어를 실행 가능하다.
level2
풀이 결과
명령어가 정상적으로 실행 되었고
vim 에서 따로 리턴 코드를 출력해주는 걸 볼 수 있었다
level2
느낀점
이번엔 우리가 평소에 사용하는 프로그램을
얼마나 잘 알고있는가를 보는 문제였던 것 같다.
level3
문제 분석
level 3의 힌트를 보니까 dig 명령어를 사용하고
동시에 여러줄의 명령어를 동시에 실행하면 클리어가 가능해 보인다.
level3
문제 분석
find 명령어로 level4권한을 가진 autodig 파일을 찾을 수 있었고
명령어를 실행해 봤다.
level3
풀이 제시
;(세미콜론)뒤에 명령어를 실행하면 명령어가 동시에 실행되고
bash 스크립트의 주석표시(#) 을 적절히 이용해주면 원하는 명령어가 실행가능하다.
level3
풀이 결과
적절히 bash 명령어를 때렸더니 level4를 획득 할 수 있었다.
level3
느낀점
level3에서 물어본건. 명령어를 동시에쓰는 법과
적절히 원하는 명령어를 삽입 할 수 있는가를 물어 본 것 같다.
level4
문제 분석
/etc/xinet.d 에 백도어를 심어 놓았다고 한다. 파일을 열어보니 xinetd.conf
형식의 파일이 써저 있었다.
level4
문제 분석
서비스 파일 내용을 분석해보면 다음과 같다.
service finger {
disable =no // 서비스를 허용 한다.
flage = REUSE //소켓의 포트를 재사용한다.
sock_type =stream //TCP 를 이용하여 통신한다.
wait =no //다수의 사용자가 서비스를 이용하게 한다.
user = level5 //서비스의 실행권한이다.
server = /home/level4/tmp/backdoor
//서비스가 실행될때 실행하는 프로그램이다.
log_on_failure +=USERID
}
level4
풀이 제시
finger 명령어가 xinetd에 backdoor 형태로 등록되어있고
소켓을 쓰는걸로 보아 network 요청을 할때
server 에 등록된 프로그램이 실행되는것 같다.
finger @[network ip] 입력
server 값에 등록된
/home/level4/tmp/backdoor가
실행
level4
풀이 결과
backdoor 프로그램을 만든 후 finger @localhost 명령을 실행했더니
명령어가 실행됬다.
level4
느낀점
백도어가 어떤 식으로 setuid를 숨기는지 알려주었고
그 숨긴 백도어로 해커가 침투할 수 있는걸 체험해 준 문제였다.
level5
문제 분석
힌트를 보니까 /usr/bin/level5 가 임시파일을 생성하고 내용물을
쓴 뒤 지운다고 한다. 이걸 캐치하는 문제 인 것 같다.
level5
문제 분석
물론 실행하면 어떤 출력도 없고 setuid 가 걸려있어
strace ltrace (함수호출 추적)도 거부되었다.
level5
풀이 제시
레이스 컨디션 문제를 이용해 풀어보려 한다.
리눅스 같은 시스템은 프로그램을 동시에 실행하는 것을 허용 하기 때문에
이를 이용해 풀이 계획을 짜봤다.
tmp 파일 생성
같은이름의
심볼릭 파일(바로가기)
생성
내용물 작성
tmp 파일 삭제
level5
심볼릭 파일
조회(cat)
level5
풀이 제시
해당 프로그램을 여러번 실행하는 프로그램(executelevel5)를 작성
심볼릭 파일을 여러번 생성하는 프로그램 작성 (createsymlink)
그리고 내용물을 볼 파일 (whatis) 생성을 했다.
level5
풀이 결과
두개의 터미널을 실행하여 동시에 실행했더니
파일의 내용이 보였다.
level5
느낀점
멀티 프로그래밍 환경에서는 프로그램 동작 순서를 정하기가
굉장히 어려우므로 꼭, critical section을 이용해야 할 것이다.
level6
문제 분석
level6에 로그인을 하면 이상한 프로그램이 실행이 된다.
level6
풀이 결과
평소에 ctrl+c 버튼을 누르니까 자동으로 shell로 넘어가서 패스워드를
알아냈다.
level6
느낀점
.bashrc(프로그램 시작시 스크립트가 실행)에 프로그램 이름을 등록하면
bash 위에 프로그램이 실행이 되는데
꼭 단일 서비스 프로그램으로 만들어야 된다.
level7
문제 분석
FTZ가상머신에서는 힌트가 되는 패스워드가 없어서
직접 가져왔습니다 이 암호화된 패스워드를 크랙하는게 목표입니다.
level7
문제 분석
- 와 _ 로 구성되어있고 7글자 마다 끊어저 있습니다.
level7
풀이 제시
7개로 끊어저 있다는 점과 정보의 표현이 - 와 _로 이루어저 있다는걸 봤을 때
이건 바이너리고 ASCII code 가 0 ~ 127 까지 있으므로
암호화 된 코드별 ASCII code값을 구하면 될듯 싶다.
level7
풀이 제시
암호화 된 코드를 복호화 하는 프로그램을 짜 보았다.
level7
풀이 결과
프로그램을 돌린 결과 -(bar)가 1로 가정했을때 "mate" 가 뚜렷히 나타났는데,
_(under bar)를 1로 가정한 것은 아무 글자도 안 나왔다.
level7
풀이 결과
mate를 입력한 결과 진짜 패스워드가 나타났다.
level7
느낀 점
컴퓨터는 단순히 0과 1을 처리 하는데 그걸 이용해 무엇이든 만들 수 있다.
level7이 그 예중 하나임을 보여준것 같다.
level8
문제 분석
패스워드를 찾아야 하고 그 크기가 2700 이라고 한다
find명령어를 수행해 찾아 보았다.
level8
문제 분석
찾은 파일은 총3개이고 level 8 그룹 권한이 걸린 fount.txt를 열어보았다.
level8
풀이 제시
자세히 보니 해시화된 패스워드가 MD5($1$)이므로 쉽게 크랙 할 수 있다.
level8
풀이 결과
John the ripper로 크랙을 해보았더니 간단하게 패스워드를 구할 수 있었다
level8
느낀점
해시화된 패스워드는 권한이 있는 사람만 접근해야 하고
강도가 약한 해시알고리즘은 크랙이 되기 쉽다는걸 깨달았다.
level9
문제 분석
다음 문제는 버퍼오버플로우를 이용한 문제인 듯 하다.
level9
문제 분석
각각의 박스는 함수별로 대응되는 어셈블리 코드를 가리킨다.
level9
풀이 제시
buf와 buf2의 스택 안에서의 위치는 다음과 같다.
buf [ebp - 40]
buf2 [ebp - 24]
ebp
return value
level9
풀이 제시
buf에 fgets로 문자 16자 (40 - 24) 를 넣고
go를 입력 후 엔터를 치면 다음과 같은
결과가 나올 것이다.
buf [ebp - 40]
AAAA
BBBB
CCCC
DDDD
buf2 [ebp - 24]
gon0
ebp
return value
level9
풀이 제시
실험한 결과를 눈으로 확인했더니 gon 가 들어간 것을 확인할 수 있었고
if문안의 statement를 실행한 것을 볼 수 있었다.
level9
풀이 결과
디버그 모드가 아닌 실제 프로그램에 공격을 해보니까 쉘을 획득할 수 있었다.
level9
풀이 결과
디버그 모드가 아닌 실제 프로그램에 공격을 해보니까 쉘을 획득할 수 있었다.
level9
느낀 점
버퍼 오버플로우를 이용하여 프로그램의 변수값을 바꿀 수 있었다.
level10
문제 분석
공유 메모리에 접근하여 정보를 획득하는 문제인 듯하다.
키워드는 key_t 인듯 보인다.
level10
문제 분석
키워드 검색을 해보았더니
공유 메모리를 이용한 데이터 전송이 가능하다고 한다.
level10
문제 분석
키 값을 이용해 공유 메모리의 데이터를 획득 하는 방법을 찾았다.
level10
풀이 제시
실제로 코딩을 하여 비밀 메세지를 캐치해 보았다.
level10
풀이 결과
결과는 성공적이고 level11의 패스워드를 획득 할 수 있었다.
level10
느낀점
키 값을 몰라도 저렇게 키 값의 길이가 작으면 무작위 대입으로
공유메모리에 접근할 수 있을듯 하다.
level11
문제 분석
프로그램의 argument 에 문자열을 받아 버퍼에 저장하는 프로그램이다.
strcpy 함수를 쓰므로 버퍼 오버플로우에 취약하다.
level11
문제 분석
hint 를 컴파일해 gdb 로 분석해 보니까 argv 버퍼 값이 0xbffffeXXX 번대에
위치 한다.
level11
풀이 제시
스택 메모리 주소 범위가 실행 권한을 가지고 있는 것을 확인 했다.
level11
풀이 제시
스택의 실행 권한이 있으므로
A*264+return address(4 byte)+(nop shellcode)를 넣으면.
스택 안에서 쉘 코드가 실행이 될 것 이다.
str [ebp - 264]
AAAAAA.....
ebp
AAAA
return value
new return value
0xbfffeXXX
nop + shell code
.....
nop(0x90) ....
nop(0x90) ....
nop(0x90) ....
nop(0x90) ....
shell code start
level11
풀이 결과
스택의 주소가 계속 바뀌므로 여러번 시도를 해서
(return address 는 bfffeXXX대의 아무 주소)
결국에는 shell을 획득 할 수 있었다.
level11
느낀점
버퍼 오버플로우를 잘 이용하면 프로그램 안에서 또
다른 프로그램을 실행할 수 있으므로 조심하자.
level12
문제 분석
문제는 level11과 똑같고 이번엔 함수의 argument로 문자열을 받지 않고
프로그램 내에서 문자열을 받는다.
level12
풀이 제시
명령어 파이프라이닝을 이용하면 프로그램의 output을(stdout)
다른 프로그램의 input(stdin)으로 쓸 수 있게 해준다.
쉘 코드는 level11에서 사용한 것과 동일한 것을 사용한다.
level12
풀이 결과
파이프 라이닝을 이용하여 쉘 코드를 넣는데 까지는 성공 했지만, 쉘을 얻고 다
음 명령어를 입력하기 위해서 cat과 같이 사용했다.
level12
느낀점
함수의 argument로 받지 않았다 해도
파이프라이닝을 이용한 공격이 가능한 것을 알았다
level13
문제 분석
이번엔 long type 인 i를 비교하여 버퍼 오버플로우를 차단하는 것 처럼 보인다.
level13
문제 분석
attackme를 직접 디스어셈블리를 하여 i 가 [ebp - 12] 이고,
str이 [ebp - 1048] 이므로 buf가 i 보다 낮은 주소라는 것을 알았다.
level13
풀이 제시
i의 위치를 제대로 파악할 수 있으므로(1048 - 12 = 1036 다음 4자리)
1036자 부터는 0x1234567을 넣어 if문을 우회할 수 있을 것이다.
buf [ebp - 1048]
(1036자)
i [ebp - 12]
x67x45x34x12
다음 8자
ebp (4 byte)
return value
new return value
0xbfffeXXX
nop + shell code
.....
nop(0x90) ....
nop(0x90) ....
nop(0x90) ....
nop(0x90) ....
shell code start
level13
풀이 결과
if 문을 우회할 수 있었고 예상대로 shell을 획득 할 수 있었다.
level13
느낀점
이번 문제는 스택 안에서 i 가 buf 보다 높은 주소를 사용했기때문에
i 를 buf 밑에 넣으면 공격하기가 힘들어 질듯 보인다.
level14
문제 분석
level13과 비슷한 문제로 보인다.
이번엔 buf 위에 check 변수를 변조 해야 할것 같다.
level14
문제 분석
buf 는 [ebp-56] 에 위치해있고 check 는 [ebp - 16]에 위치해 있다.
level14
풀이 제시
buf와 check의 위치차이 (56 - 16 = 40) 만큼 문자열을 쓰고 앞의 4자를
0xdeadbeef 를 넣어주면 성공적으로 쉘을 습득 할 것 같다.
level14
풀이 결과
예상대로 쉘을 습득 하였다.
level14
느낀점
buf[20] 임에도 어셈에서는 40자를 받을 수 있게 변환이 되어서
c 코드와 어셈코드는 다르다는 것을 알았다.
level15
문제 분석
이번엔 check 변수가 int 포인터 형이고 check 변수에 저장된 주소가
deadbeef 를 가리켜야만 쉘을 획득할 수 있다.
level15
풀이 제시
main 함수를 디스어셈블리를 하면 deadbeef 가 눈앞에 보이므로
0x080484b0 부터 deadbeef의 주소값을 얻을 수 있을 것이다.
level15
풀이 제시
deadbeef의 주소값은 0x080484b2임을 알아냈다! 이를 이용해 코드를 작성
하면 된다.
level15
풀이 결과
공격 코드를 작성하고 실행하여 level16 의 쉘을 획득하였다!
level15
느낀점
프로그램 코드도 공격에 활용 할 수 있다는 것을 깨달았다.
level16
문제 분석
이번엔 buf를 이용해 call 변수의 함수 포인터 주소값을 shell로
변경하는 문제로 보인다.
level16
문제 분석
우리가 쓸 call 변수는 [ebp-16] 이고 buf는 [ebp-56]임을 확인 했다.
call 변수가 buf 변수보다 높은 주소에 있으므로 값을 변경할 수 있다.
level16
문제 풀이
shell의 주소값은 0x080484d0 이므로 buf 를 이용해 call [ebp -16] 을
수정하면 된다.
level16
문제 풀이
shell의 주소값은 0x080484d0 이므로 buf 를 이용해 call [ebp -16] 을
수정하면 된다.
buf [ebp - 56]
40자
cal [ebp - 16]
shell의 주소값 (4byte) 입력
level16
문제 결과
level 17의 쉘을 획득하였다.!
level16
느낀점
level17은 level16을 응용하는 문제인것 같다.
level17
문제 분석
이번 문제는 제약사항이 많다. level16의 shell같은 함수도 없고
fgets 의 입력값이 48개로 고정되었다.
level17
문제 분석
buf는 [ebp-56]에 위치해 있고 call 함수 포인터는 [ebp - 16]에 위치해있다.
버퍼를 48까지 입력 할 수 있으므로 buf에 40개의 값을 쓰고 쉘 주소값을 넣어
야 한다.
level17
문제 분석
이번 문제는 제약사항이 많다. level16의 shell같은 함수도 없고
fgets 의 입력값이 48개로 고정되었다.
level17
풀이 제시
이번 문제는 쉘에서 제공하는 환경 변수는,
프로그램 안에서 항상 똑같은 위치를 갖는다는 점을 활용해야 한다.
쉘코드를 저장하고 있는 환경변수를 등록하고 주소값을 얻었다.
level17
풀이 제시
attackme 를 tmp 에 복사해 core dump파일을 생성하기 위해
몇가지 설정을 하자.
level17
풀이 제시
일부러 segmentation fault 를 발생시켜 core dump파일을 생성시킨 뒤,
쉘코드의 주소값을 입력하니까 아까 등록한, shell code를 볼 수 있었다.
이걸 활용하여 쉘을 얻어 보자.
level17
풀이 결과
환경변수의 쉘코드를 리턴 주소값으로 지정해서 공격을 해보니까
성공적으로 쉘을 획득 할 수 있었다.
level17
느낀점
이번 문제는 지난번 처럼 버퍼 주소를 무작위로 때려 맞추는 것보다
확실하고 정확하게 쉘을 얻는 주소값을 삽입 할 수 있는 방법을 알려준 문제이다.
level18
문제 분석
이번 소스코드는 조금 복잡하다. 천천히 본다면 별로 어렵지 않은 문제일 것이다.
먼저 사용하는 변수들은 총 5개이고 string 변수가 맨 앞에 정의되어 있으므로
string 변수로 값을 수정할 수 없다...
level18
문제 분석
문제는 바로 이곳인데 천천히 살펴보면 다음과 같다.
fds를 초기화하고 stdin을 fds변수에 넣었고 stdin을 사용하여 키보드 입력값을 받는다.
fds가 stdin인지 확인하고 x 변수에 입력값을 1byte에 저장한다.
입력 값에 따라 switch문이 실행된다.
check 가 deadbeef 이면 쉘을 획득한다.
키보드에서 입력을 받아.
string 변수에 1byte씩 저장하거나
필터링을 한다.
level18
문제 분석
실행을 해보면 일반 문자 값이 100개가 넘어가면 경고메세지가 나타난다.
level18
문제 분석
처음 부터 0x08을 x에 저장하면 count가 마이너스로 흘러감으로 그게 무엇을
의미하는지 예제 코드를 짜보았다 결과는 다음과 같다.
count가 음의 값이면 스택의 윗 부분을 건들 수 있다..
level18
문제 분석
각 중요 변수의 위치와 어떤 어셈코드가 c코드로 변환되었는지 분석한 결과는 다음과 같다.
check는 [ebp-124]를 가리킴
level18
문제 분석
각 중요 변수의 위치와 어떤 어셈코드가 c코드로 변환되었는지 분석한 결과는 다음과 같다.
x 는 [ebp-128]을 가리킴
level18
문제 분석
각 중요 변수의 위치와 어떤 어셈코드가 c코드로 변환되었는지 분석한 결과는 다음과 같다.
count 는 [ebp-132]를 가리킴
level18
문제 분석
각 중요 변수의 위치와 어떤 어셈코드가 c코드로 변환되었는지 분석한 결과는 다음과 같다.
string의 위치는 [ebp-120]를 가리킴
level18
풀이 제시
string [ebp - 120] check [ebp - 124] 의 위치 차이가 -4 이고
아까 봤던 array의 마이너스 주소참조 규칙을 이용하여 풀면 된다.
&check &string
0xef 0xbe 0xad 0xde
0x08을 4번 입력
xefxbexadxde를입력
결론 : x08x08x08x08xefxbexadxde를입력
level18
풀이 결과
실행을 하니까 쉘을 획득할 수 있었다!
level18
느낀점
소스코드를 보고 어떤 어셈블리언지 추측하는 문제로서
분석을 할 줄 알아야 풀 수 있는 문제였다.
level19
문제 분석
이번 문제는 거저먹는 문제다 해결 방법은 level17의 환경변수를 이용한
쉘코드 삽입으로 끝낼 수 있다.
level19
풀이 제시
buf의 위치가 [ebp-40]임을 확인했고 이제 적절한 payload를 만들면된다.
level19
풀이 결과
공격에 성공했고 바로 다음으로 넘어가자
level20
문제 분석
이번 문제는 아예 bleh 변수의 길이만큼 제한 시켜버렸다.
하지만, printf문을 봣을 때 포맷 스트링 버그를 써서
쉘코드를 실행 시킬 수 있을것 같다.
level20
문제 분석
포맷 스트링 버그는 %x 나 %d 처럼 포맷 스트링을 이용하여
스택의 정보를 이끌어 낼 수 있다. 그걸 이용해 bleh 의 위치를 얻어보자
일단 hint를 조금 수정하여 컴파일 해 보았다. 전역변수를 빼면 똑같은 코드이다.
level20
문제 분석
포맷스트링을 하나씩 넣어서 특정한 값을 얻을 수 있었는데 25207825 값은 아스키 코드로 "%x %"이므로
bleh 값이 들어간 것을 확인했다.
level20
문제 분석
그 이유는 어셈블리어 안에서의 함수의 구조 때문이다.
이 성질을 이용해 포맷 스트링을 이용해 값을 넣어보자.
printf("%x %x %x %x",arg1,arg2,arg3,arg4);
printf를 호출하기 전
스택 frame
address of bleh[80]
arg1 (0x0000004f)
arg2 (0x4212ecc0)
arg3 (0x4207a750)
arg4 (bleh)
level20
문제 분석
만약 target 주소값을 넣고 조회 싶으면 이렇게 하면된다.
printf("x0cx95x04x08%x %x %x %x",arg1,arg2,arg3,arg4);
printf를 호출하기 전
스택 frame
address of bleh[80]
arg1 (0x0000004f)
arg2 (0x4212ecc0)
arg3 (0x4207a750)
arg4 (&target)
level20
문제 분석
target의 값을 변경하고 싶으면 %n 을 쓴다.
(해당 arg가 int* 를받고 해당주소에 지금까지 출력한 값을 저장한다.)
printf("x0cx95x04x08%x %x %x %n",arg1,arg2,arg3,arg4);
printf를 호출하기 전
스택 frame
address of bleh[80]
arg1 (0x0000004f)
arg2 (0x4212ecc0)
arg3 (0x4207a750)
arg4 (&target)
level20
문제 분석
특정 값을 입력하고 싶으면 다음과 같은 규칙이 필요하다
첫번째 주소값 에 B를 입력하고싶다면 %x%Ax%4$n --> B = r + A + 8 (단 A > 8)
printf를 호출하기 전
스택 frame
address of bleh[80]
arg1 (0x0000004f)
arg2 (0x4212ecc0)
arg3 (0x4207a750)
arg4 (&target)
특정한 값 0xdf 를 입력하고 싶다면 0xdf = 초기값(attackme 는 e 이다) + A + 8
즉 , A = 0xdf - 0xe + 8= 217
level20
문제 분석
두 번째 주소값부터 값을 넣는것은 첫번째 값을 넣는 것 보다 쉽다.
printf를 호출하기 전
스택 frame
address of bleh[80]
arg1 (0x0000004f)
arg2 (0x4212ecc0)
arg3 (0x4207a750)
arg4 (&target)
arg5(&target+1)
넣고 싶은 값이 C 라면
C = 이전값 + D
C 보다 이전값이 더 크다면
C*0x100 = 이전값 + D
다음은 target주소에 0x10bf 를 넣는 방법이다.
[1번째 byte 주소값][2번째 byte 주소값]%x%[0bxf-0xa(다시 계산해준 초기
값)+8]x%4$n%[0x110-0xbf]x%5$n
110이들어갔지만 다음 주소로 덮어써 지울 수 있다.
level20
풀이 제시
level20 문제의 관건은 어느 주소값에 쉘코드를 넣어야 하느냐이다.
하지만 우리는 특정 주소 값에다 특정 값만 삽입 해봤지 쉘코드를 삽입을
한 적이 없다.
level20
풀이 제시
소멸자 섹션을 이용해 쉘코드의 주소값을 입력하여
프로그램이 끝날 때 쯤 쉘코드를 호출해보자
그렇다면 다음과 같은 공격 설계가 된다.
소멸자 section
0xffffffff nop
+
shell code의 주소
삽입
0x00000000
nop + shellcode
x90x90x90x90
shellcode
level20
풀이 제시
소멸자 주소를 찾고 (0x08049594)
쉘코드를 환경 변수에 올리고 나서, 테스트 공격 코드를 작성하였다.
level20
풀이 결과
공격에 성공하였고 clear의 쉘 권한을 획득 하였다.
level20
느낀점
포맷 스트링 공격은 정말 난이도가 높고 특히, 프로그램구조의 깊은 지식이 필요해서
정말 어려웠다.

More Related Content

What's hot

System+os study 3
System+os study 3System+os study 3
System+os study 3
Jinkyoung Kim
 
Linux reversing study_basic_4
Linux reversing study_basic_4Linux reversing study_basic_4
Linux reversing study_basic_4
Jinkyoung Kim
 
Pwnable study basic_2
Pwnable study basic_2Pwnable study basic_2
Pwnable study basic_2
Jinkyoung Kim
 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5
Jinkyoung Kim
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
Jinkyoung Kim
 
Windows reversing study_basic_7
Windows reversing study_basic_7Windows reversing study_basic_7
Windows reversing study_basic_7
Jinkyoung Kim
 
Windows reversing study_basic_6
Windows reversing study_basic_6Windows reversing study_basic_6
Windows reversing study_basic_6
Jinkyoung Kim
 
Linux reversing study_basic_2
Linux reversing study_basic_2Linux reversing study_basic_2
Linux reversing study_basic_2
Jinkyoung Kim
 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2
Jinkyoung Kim
 
System+os study 1
System+os study 1System+os study 1
System+os study 1
Jinkyoung Kim
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
유익아카데미
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
Jinkyoung Kim
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2
Jinkyoung Kim
 
Windows reversing study_basic_9
Windows reversing study_basic_9Windows reversing study_basic_9
Windows reversing study_basic_9
Jinkyoung Kim
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
유익아카데미
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
jaypi Ko
 
System+os study 5
System+os study 5System+os study 5
System+os study 5
Jinkyoung Kim
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
유익아카데미
 
System+os study 7
System+os study 7System+os study 7
System+os study 7
Jinkyoung Kim
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
Sang Don Kim
 

What's hot (20)

System+os study 3
System+os study 3System+os study 3
System+os study 3
 
Linux reversing study_basic_4
Linux reversing study_basic_4Linux reversing study_basic_4
Linux reversing study_basic_4
 
Pwnable study basic_2
Pwnable study basic_2Pwnable study basic_2
Pwnable study basic_2
 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
 
Windows reversing study_basic_7
Windows reversing study_basic_7Windows reversing study_basic_7
Windows reversing study_basic_7
 
Windows reversing study_basic_6
Windows reversing study_basic_6Windows reversing study_basic_6
Windows reversing study_basic_6
 
Linux reversing study_basic_2
Linux reversing study_basic_2Linux reversing study_basic_2
Linux reversing study_basic_2
 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2
 
System+os study 1
System+os study 1System+os study 1
System+os study 1
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
코딩인카페 C&JAVA 기초과정 C프로그래밍(1)
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2
 
Windows reversing study_basic_9
Windows reversing study_basic_9Windows reversing study_basic_9
Windows reversing study_basic_9
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 
System+os study 5
System+os study 5System+os study 5
System+os study 5
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
코딩인카페 C&JAVA 기초과정 C프로그래밍(2)
 
System+os study 7
System+os study 7System+os study 7
System+os study 7
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 

Similar to 해커스쿨 FTZ 문제 풀이

Load of Buffer Overflow 문제풀이
Load of Buffer Overflow 문제풀이Load of Buffer Overflow 문제풀이
Load of Buffer Overflow 문제풀이
fromitive
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
Lusain Kim
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
iamprogrammerofficial
 
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
Jinkyoung Kim
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2
Wooseok Seo
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
Yoonwhan Lee
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
SeongHyun Ahn
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
Taeoh Kim
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7KoChungWook
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
jaypi Ko
 
생각하는 프로그래밍 1부
생각하는 프로그래밍 1부생각하는 프로그래밍 1부
생각하는 프로그래밍 1부sj k
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
준혁 이
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
Nomota Hiongun KIM
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
HoChul Shin
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Jaejin Yun
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
Yong Joon Moon
 
Shellscript_doc.pdf
Shellscript_doc.pdfShellscript_doc.pdf
Shellscript_doc.pdf
ssuser6d2d9b
 
델파이와 유니코드
델파이와 유니코드델파이와 유니코드
델파이와 유니코드
Devgear
 

Similar to 해커스쿨 FTZ 문제 풀이 (20)

Load of Buffer Overflow 문제풀이
Load of Buffer Overflow 문제풀이Load of Buffer Overflow 문제풀이
Load of Buffer Overflow 문제풀이
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
 
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2
 
R 기초 : R Basics
R 기초 : R BasicsR 기초 : R Basics
R 기초 : R Basics
 
파이썬 기본 문법
파이썬 기본 문법파이썬 기본 문법
파이썬 기본 문법
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
이산치수학 Project7
이산치수학 Project7이산치수학 Project7
이산치수학 Project7
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 
생각하는 프로그래밍 1부
생각하는 프로그래밍 1부생각하는 프로그래밍 1부
생각하는 프로그래밍 1부
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
파이선 실전공략-1
파이선 실전공략-1파이선 실전공략-1
파이선 실전공략-1
 
Python3 brief summary
Python3 brief summaryPython3 brief summary
Python3 brief summary
 
Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버Erlang을 이용한 swap 서버
Erlang을 이용한 swap 서버
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
Shellscript_doc.pdf
Shellscript_doc.pdfShellscript_doc.pdf
Shellscript_doc.pdf
 
델파이와 유니코드
델파이와 유니코드델파이와 유니코드
델파이와 유니코드
 

More from fromitive

이무송 스터디 HEX Editor로 PE 분석하기.pptx
이무송 스터디 HEX Editor로 PE 분석하기.pptx이무송 스터디 HEX Editor로 PE 분석하기.pptx
이무송 스터디 HEX Editor로 PE 분석하기.pptx
fromitive
 
Higher order procedure2 with conventional interface
Higher order procedure2 with conventional interface Higher order procedure2 with conventional interface
Higher order procedure2 with conventional interface
fromitive
 
Project of kshield_jr_open_seminar
Project of kshield_jr_open_seminarProject of kshield_jr_open_seminar
Project of kshield_jr_open_seminar
fromitive
 
Dll search order hijacking
Dll search order hijacking Dll search order hijacking
Dll search order hijacking
fromitive
 
Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09
fromitive
 
Malware Traffic analysis
Malware Traffic analysisMalware Traffic analysis
Malware Traffic analysis
fromitive
 

More from fromitive (6)

이무송 스터디 HEX Editor로 PE 분석하기.pptx
이무송 스터디 HEX Editor로 PE 분석하기.pptx이무송 스터디 HEX Editor로 PE 분석하기.pptx
이무송 스터디 HEX Editor로 PE 분석하기.pptx
 
Higher order procedure2 with conventional interface
Higher order procedure2 with conventional interface Higher order procedure2 with conventional interface
Higher order procedure2 with conventional interface
 
Project of kshield_jr_open_seminar
Project of kshield_jr_open_seminarProject of kshield_jr_open_seminar
Project of kshield_jr_open_seminar
 
Dll search order hijacking
Dll search order hijacking Dll search order hijacking
Dll search order hijacking
 
Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09
 
Malware Traffic analysis
Malware Traffic analysisMalware Traffic analysis
Malware Traffic analysis
 

해커스쿨 FTZ 문제 풀이