write-up/pwnable

[ftz] level 6: what the hell

여니두 2019. 8. 13.

06_시스템 인터럽트의 위험성

 

√ 시스템 인터럽트

: 프로세스 간에 주고받는 신호

 

- 인터럽트를 유발하는 시그널 목록

시그널은 signal.h에 이미 정의되어 있다.

 

- 시그널 전달 명령어 사용법

kill - [시그널 번호] [PID]

 

- 시그널 함수 구현 예제

ex) signal(SIGINT, SIG_DFL): SIGINT 시그널 실행

 

√ 문제 분석

hint - 창에서 무작정 Enter키를 눌렀더니, 다음과 같은 화면이 나왔다.

 

어느 번호를 입력하든 텔넷 접속이 실패하면서, 현재 연결 중인 텔넷 세션도 끊어졌다.

 

이것은 해킹 문제이기 때문에,

여기서는 실제 서비스를 제공하는 것과 동일한 환경이 구축된 서버가 아닐 것이다.

 

 >> 가짜 모듈을 우회할 수 있는 무언가가 있을 것이다.

 

 

√ gdb로 소스코드 분석

procedure prelude 과정

>> system("cat hint")

>> getchar로 접속하고 싶은 메뉴의 번호를 한 글자 입력받는 부분

 

>> system("clear")

이후 메뉴 화면을 구성하는 부분이 이어진다.

.

.

.

>> signal(2, sig_func)

: SIGINT(Ctrl+C)가 입력되면, sig_func 함수가 실행된다.

 

*sig_func 함수: Can't use ctrl+c 출력시킴

 

 

>> printf("\n~")

>> scanf("%d", &input)

 

입력값이 1이 아니면, main+263으로 이동

1이면

>> system("telnet ~ ")

 

2, 3인 경우도 똑같이 진행

.

.

.

 

√ 공격

- 메뉴가 형성되기 전, 즉 signal 함수가 호출되기 전에 처음 만나는 힌트 화면에서

Ctrl + C를 눌러 프로그램의 흐름을 막자.

 

여기서 Ctrl+C (강제종료)를 했다.

 

 

Level 7 password = come together

'write-up > pwnable' 카테고리의 다른 글

[ftz] level 8: break the world  (0) 2019.08.16
[ftz] level 7: come together  (0) 2019.08.14
[ftz] level5: what is your name?  (0) 2019.08.12
[ftz] level4: suck my brain  (0) 2019.07.28
[ftz] level3: can you fly?  (0) 2019.07.28

댓글