4번 문제인 orc 이다.

 

이번 문제는 argv에 커맨드라인으로 입력받고, strcpy로 buffer에 값을 복사한다.

저번 문제에서 사용했던 환경 변수도 environ에서 전부 제거하고 시작하기 때문에 사용할 수 없다.

그리고 argv[1]의 47번째 문자가 \xbf가 아니면 종료해버린다.

따라서 argv[2]에 쉘코드를 넣고, argv[1]에서는 buffer(40) + sfp(4) = 44만큼 더미값으로 덮고, buffer의 ret을 argv[2]의 주소로 덮으면 될 것이다.

우선은 argv[2]의 주소를 알기 위해 임의의 값을 적어볼건데, argv[1][47]이 \xbf이여야하니, 아예 \xbf로 덮어보자.

그리고 argv[2]를 a로 덮어서 argv[2]의 입력이 시작되는 곳을 찾아보자.

 

보다시피 argv[2]의 입력이 시작되는 곳은 0xbffffc3c라는 것을 알 수 있다.

이제 buffer(40) + sfp(4) = 44만큼 더미 값을 채우고, 0xbffffc3c를 리틀엔디안으로 넣고, 두 번째 커맨드라인으로 입력하는 값에는 nop sled 100바이트와 쉘코드를 넣어주자.

 

성공적으로 쉘을 땄다.

cantata

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 3번 - goblin  (0) 2020.08.16
[LOB] 2번 - cobolt  (0) 2020.08.16
[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18

3번 문제인 goblin 이다.

 

1, 2번에서는 argv에서 넘어온 인자값을 strcpy로 복사해서 buffer에 넣는 방식이었다.

이번에는 gets로 표준 입력으로 buffer에 입력을 받는다.

따라서 이전처럼 ` 를 이용하여 작성하지 않고, | 를 이용하여 작성한다.

파이썬으로 값을 출력한 후, cat으로 출력해주면 표준 출력으로 찍혀서 값이 넘어갈 것이다.

그 외의 공격 코드 형태 자체는 아까와 동일할 것이다.

 

환경변수의 주소는 0xbfffff09이다.

이제 buffer(16) + sfp(4) = 20만큼 더미값을 채우고, 0xbfffff09를 리틀엔디안으로 넣어주면 될 것이다.

 

성공적으로 쉘을 땄다.

hackers proof

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 4번 - orc  (0) 2020.08.18
[LOB] 2번 - cobolt  (0) 2020.08.16
[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18

2번 문제인 cobolt 이다.

 

1번 문제와 유사하나 buffer의 크기가 이번에는 16이다.

즉, NOP sled나 shellcode를 담기에는 작은 공간이다.

따라서 환경변수로 미리 쉘코드를 만들어두고, 그 환경변수의 주소를 buffer의 ret에 덮어주면 될 것이다.

 

환경변수를 만들 때는 export [환경변수이름], 제거할 때는 unset [환경변수이름]의 형태로 만들 수 있다.

환경변수에 shellcode를 담았으니, 이제 환경변수의 주소를 알아보자.

 

환경변수의 주소는 0xbfffff07이다.

이제 buffer(16) + sfp(4) = 20만큼 더미값을 채우고, 0xbfffff07을 리틀엔디안으로 넣어주면 될 것이다.

 

성공적으로 쉘을 땄다.

hacking exposed

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 4번 - orc  (0) 2020.08.18
[LOB] 3번 - goblin  (0) 2020.08.16
[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18

Load of the BOF 문제를 풀어보기로 했다.

1번 문제인 gremlin 이다.

 

보아하니 argv에 입력받은 내용을 strcpy로 buffer에 복사하는 코드이다.

strcpy로 값을 복사하니 bof가 일어날 것이다.

buffer에 쉘코드를 넣고 ret 주소를 다시 buffer의 주소로 가리키면 될 것이다.

buffer의 사이즈는 256, sfp(4)를 더해 260칸이므로 쉘코드를 제외한 나머지 칸들을 NOP sled로 채워주면 될 것이다.

 

strcpy가 실행된 부분인 main+59에 bp를 걸고, A를 넣어서 어디서부터 buffer가 입력이 되는지 확인해보자.

 

보다시피 0xbffff918 부터 입력이 된다.

 

따라서 쉘코드가 깨지지 않게 적당히 NOP sled를 넣고, 쉘코드를 넣고, NOP sled를 다시 넣고 ret 주소를 0xbffff918로 적어주면 쉘코드가 실행될 것이다.

 

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80

 

쉘코드는 24바이트 쉘 코드를 사용할 것이다.

즉, 260 - 24 = 236 만큼 앞 뒤로 NOP sled를 써주자.

그리고 그 뒤의 ret 주소에 0xbffff918를 리틀엔디안 형식으로 넣어주면 될 것이다.

 

성공적으로 쉘을 땄다.

hello bof world

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 3번 - goblin  (0) 2020.08.16
[LOB] 2번 - cobolt  (0) 2020.08.16
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18
Hackerschool FTZ - level7 write up  (0) 2019.09.18

level9입니다.(id:level9, pw:apple)

 

힌트를 보니 드디어 bof문제다.

보아하니 buf 사이즈가 10인데 40자리를 입력받는다.

그리고 buf2에 go가 있으면 level10 권한을 준다.

buf를 이용하여 bof를 내면 될 것 같았다.

우선 hint파일을 가져와서 한글 부분을 없애고 컴파일하여 파일을 만들어 gdb로 까봤다.

 

fgets부분과 strncmp부분을 보아하니 윗부분에 eax에 ebp-40과 ebp-24를 lea한다.

즉, ebp-40이 buf고 ebp-24가 buf2일 것이다.

0x08048461 - 0x0804844b = 16

그대로 입력하면 될 듯 하였다.

 

level10권한을 얻을 수 있었다.

level10이다.(id:level10, pw:interesting to hack!)

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 2번 - cobolt  (0) 2020.08.16
[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level8 write up  (0) 2019.09.18
Hackerschool FTZ - level7 write up  (0) 2019.09.18
Hackerschool FTZ - level6 write up  (0) 2019.09.10

level8입니다.(id:level8, pw:break the world)

hint를 확인해보니 shadow 파일이 숨겨져있고, 파일 크기가 2700이라고 했다.

그래서 일단 파일 사이즈가 2700인 파일을 찾아보았다.

뭐 어찌저찌 found.txt라는 녀석이 눈에 띄는데, 한 번 출력해봤다.

 

솔직히 말해서 뭔지 모르겠다.

그래서 대충 :으로 구분하는 저런 형식의 암호화, 복호화 하는 툴을 조사하다보니, John the Ripper 라는 툴을 발견할 수 있었다.

보아하니 level9: 뒤의 $부터 : 전까지의 값을 복호화 하는 듯 하다.

pass.txt라는 텍스트 파일에 넣어서 복호화를 시도해보았다.

 

오, 아마 apple이 level9의 pw인 듯 하다.

level9까지 왔다.(id:level9, pw:apple)

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level7 write up  (0) 2019.09.18
Hackerschool FTZ - level6 write up  (0) 2019.09.10
Hackerschool FTZ - level5 write up  (0) 2019.09.09

넹, level7입니다. (id:level7, pw:come together)

우선 hint를 봤더니, 대충 2진수를 10진수로 바꿔서 ascii to string을 하면 될 듯 했다.

 

일단 /bin 에서 level7을 실행해봤다.

 

자, 정말 끔찍했습니다.

/bin/wrong.txt 에 힌트가 있고 그게 있어야 풀 수 있는 간단한 문제, 근데 wrong.txt가 왜인지 없어서 어떻게 푸는지 감이 안잡혔다.

한동안 시간을 낭비하고 있다가 다른 분들의 라업의 앞부분을 읽으면서 알게되었다.

단순한 문제였다.

왜인지 구축하여 놓은 로컬 서버에 없었다!

으으, 그래서 wrong.txt의 내용만을 받아왔다.

wrong.txt의 내용은 이것이다.

 

--_--_- --____- ---_-__ --__-_-

 

대충 -는 1, _는 0으로 치환하면 될 듯했다.

 

1101101 1100001 1110100 1100101

 

대충 10진수로 바꿔보니 이랬다.

 

109 97 116 101

 

아스키 코드라 생각이 들어 바꿨더니 mate라는 값을 얻을 수 있었다.

그리고 단순히 그게 암호였다.

 

level8이다.(id:level8, pw:break the world)

'Hacking > Pwnable' 카테고리의 다른 글

Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18
Hackerschool FTZ - level6 write up  (0) 2019.09.10
Hackerschool FTZ - level5 write up  (0) 2019.09.09
Hackerschool FTZ - level4 write up  (0) 2019.09.09

네, level6입니다. (id:level6, pw:what the hell)

솔직히 말해서 뭘 써야할지 모르겠다.

그만큼 간단히 풀렸다.

 

문제에 접속하자마자 hint가 바로 뜨고 아무키나 누르게 되면 텔넷 접속 서비스를 볼 수 있다.

 

그렇지만 접속이 될리가 없다.

그래서 나는 일단 쉘부터 보기 위해 ctrl+c를 눌렀지만 사용할 수 없다고 했다.

 

텔넷 접속 서비스가 실행 중일 때 못누르게 했으니 그냥 hint가 뜰 때 해보았다.

그랬더니 쉘을 딸 수 있었다.

 

이게 전부다.

level7이다. (id:level7, pw:come together)

'Hacking > Pwnable' 카테고리의 다른 글

Hackerschool FTZ - level8 write up  (0) 2019.09.18
Hackerschool FTZ - level7 write up  (0) 2019.09.18
Hackerschool FTZ - level5 write up  (0) 2019.09.09
Hackerschool FTZ - level4 write up  (0) 2019.09.09
Hackerschool FTZ - level3 write up  (0) 2019.09.07

level5다. (id:level5, pw:what is your name?)

이번 힌트는 파일을 생성한다고 한다.

 

보아하니 setuid가 되어있다.

그래서 일단 실행을 해보았다.

 

놀랍게도, 아무것도 없다.

뭔가 하고 생각을 해봤더니, 아마도 level5.tmp가 만들어지고 삭제된 것이라고 생각했다.

그래서 중간에 값을 띄워보려고 생각은 했으나 감이 잡히지 않아서 구글링을 한참하던 중, 하드 링크와 심볼릭 링크라는 정보를 찾을 수 있었다.

심볼링 링크가 원본 파일의 이름을 가르키는 링크라고 한다.

즉, 윈도우의 바로가기같은 파일이 이런 종류에 속할 것이다.

명령어 사용에 관하여 읽어보니 이를 활용하여 level5.tmp의 내용을 임의의 파일에 옮겨서 볼 수 있을 듯 하였다.

 

임의의 temp라는 파일을 만들었다.

이제 여기에 심볼릭 링크를 걸어보자.

 

temp의 파일 크기가 31로 늘어난 것을 확인할 수 있었다.

아마도 temp에 level5.tmp의 내용이 옮겨갔을테니 level6의 pw를 확인할 수 있을 것이다.

 

좋아, level6다. (id:level6, pw:what the hell)

'Hacking > Pwnable' 카테고리의 다른 글

Hackerschool FTZ - level7 write up  (0) 2019.09.18
Hackerschool FTZ - level6 write up  (0) 2019.09.10
Hackerschool FTZ - level4 write up  (0) 2019.09.09
Hackerschool FTZ - level3 write up  (0) 2019.09.07
Hackerschool FTZ - level2 write up  (0) 2019.09.06

level4입니다. (id:level4, pw:suck my brain)

이번 힌트는 /etc/xinetd.d에 백도어가 심어져 있다고 한다.

 

그래서 대충 찾아봤더니 backdoor라는 파일이 존재했다.

 

흠, 뭔 말인지 모르겠다.

그래서 finger에 대해서 찾아보니, 사용자정보 프로그램에 대한 인터페이스를 제공하는 프로토콜이라고 한다.

finger 명령어로 확인할 수 있는 정보는 사용자 UID, 사용자명, 홈디렉토리 위치, 기본 사용 쉘, 현재의 로그인 정보라고 한다.

다른건 모르겠지만, user=level5라는 부분을 보아하니 setuid인 듯 하였고, server 주소가 /home/level4/tmp에 백도어라고 한다.

그래서 일단 저 주소로 가보았다.

 

아무것도 없이 깔끔하다.

아마도 이곳에 내가 backdoor를 작성하면 level5 uid로 실행될 것 같았다.

 

백도어를 작성하고, 실행시켜보자.

finger 명령은 finger @host명으로 사용할 때, 해당 서버에 접속해 있는 모든 유저의 정보를 출력하니, 한 번 localhost로 해보기로 하였다.

 

level5다. (id:level5, pw:what is your name?)

'Hacking > Pwnable' 카테고리의 다른 글

Hackerschool FTZ - level6 write up  (0) 2019.09.10
Hackerschool FTZ - level5 write up  (0) 2019.09.09
Hackerschool FTZ - level3 write up  (0) 2019.09.07
Hackerschool FTZ - level2 write up  (0) 2019.09.06
Hackerschool FTZ - level1 write up  (0) 2019.09.06

+ Recent posts