표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up
-
[LOB] Xavius -> Death_knight Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 24. 16:42
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 드디어 마지막 문제이다! 코드를 보도록 하자!!힌트는 Remote BOF이다. 버퍼의 크기는 40인데 입력할 수 있는 크기는 256이므로 아주 쉽게 BOF취약점을 가진 코드를 찾을 수 있다. 이제 이 코드를 어떻게 이용하느냐에 따라 이 문제를 풀 수 있을 것 같다.우선 프로그램을 실행시켜보겠다! 참고로 나는 두 가지 방법으로 풀기위해서 포트번호가 6667로 death_knight파일을 하나 더 빌드해놓았다. 또잉?? 이미 실행중이다.. 실행 중인 것을 확인했다. 소스코드에서 해당 포트번호가 6666이란걸 알았기때문에 접속해보도록 하겠다. 일단은 포트 6667파일로 실행시켜보았다.입력창이 나왔고 버퍼에 값을 입력할 수 있었다. 이 입력(recv)을 ..
-
[LOB] Nightmare -> Xavius Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 19. 23:51
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번문제는 음.. 어려웠당... 우선 코드를 보자스택(0xbf...) binary_image(0x08...) 라이브러리 이번 문제의 코드를 보면 스택영역과 바이너리영역을 모두 사용할 수 없다.leave와 ret gadget을 이용할 수도 없고 이 의미는 라이브러리 함수가leave와 ret로 끝나므로 라이브러리도 사용할 수 없다는 뜻이다.그렇다면 이 문제는 대체 어떻게 푸는 것일까??하는 생각이 들었다..ret를 제외한 모든 부분이 초기화되기 때문이다.. 이전 문제들과 달랐던 점은 fgets()을 이용해서 인자를 받는다.그리고 라이브러리 함수를 사용하지 못하게 하는 방법은다른 조건들 처럼 0x40를 확인하면 되는데 왜 굳이 0x90를 비교하는 방법을..
-
[LOB] Succubus -> Nightmare Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 19. 19:53
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번문제는 Succubus에서 Nightmare로 갈 수 있는 문제이다~생각보다 쉬운문제였다. 우선 코드를 보자코드를 보면 PLT를 이용하라는 듯한 힌트를 주고있다.또한 strcpy의 주소값을 ret에 덮지않으면 조건이 성립되지않아서 다음 코드로진행할 수 없다는 것을 알 수 있다. 그러므로 우리가 구해야할 것은 일단strcpy의 주소를 알아야한다는 것을 알 수 있다.또한 우리는 결과적으로 쉘을 따야하기 때문에 system함수와 그 인자로 "/bin/sh"을 사용할 것이다.이 3가지를 어떻게 사용할 수 있을까를 고민해보고 다음과 같은 Payload를 생각해냈다. Payload = system주소 + dummy(4) + "/bin/sh"주소 + dum..
-
[LOB] Zombie_Assassin -> Succbus Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 14. 02:17
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제는 생각보다 너무 쉬웠당~우선 코드를 보자~ Main 함수를 보게되면 우선적으로 공유라이브러리를 사용할 수 없도록'\x40'을 검사하는 제약을 걸어두었고 addr가 DO 함수의 주소가 아닌 경우에이 또한 프로그램을 더 이상 진행하지 못하도록 하였다.또한 ret부분을 제외한 나머지 버퍼들을 초기화 시켰다. ret값에 DO함수의 주소값과 비교해서 다르면 더 이상진행할 수가 없었으므로덮어쓸 ret에 넣어줄 DO함수의 주소값을 가진 녀석이 필요하다는 것을 알 수 있었다. 함수들의 정의를 보니 전역변수 check값으로 조건문을 통과할 수 있음을 알 수 있었다.연쇄작용처럼 DO, GYE, GUL, YUT, MO 함수가 진행되어야하며마지..
-
[LOB] Assassin -> Zombie_Assassin Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 5. 03:47
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제를 풀기위해서는 이전 문제와는 비슷하지만 새로운 개념이 필요하다!!우선 코드를 보자!이전의 문제와 거의 같으나 이번에는 입력되는 값을 버퍼에 저장할 때길이 제한이 걸려있다. 또한 힌트로 주어진 것은 바로 FEBP이다.FEBP는 Fake ebp를 의미하는데 이번에는 ret gadget뿐만아니라 leave gadget도 이용해야한다. Fake ebp의 원리는 그림과 같다.sfp에 &buffer-4값을 넣어주고ret에는 leave gadget주소를 넣어준다.버퍼에는 쉘코드 주소와 nop으로 채워준다. 그렇게되면 에필로그 진행 시 공격이 시작되며(1)leave gadget 진행 시,(2)[pop ebp]가 진행되면서 pop으로 인해 esp가 +4..
-
[LOB] Giant -> Assassin Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 4. 03:12
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제는 ROP를 알기전에 해두면 도움이되는 Ret Sled를 배울 수 있는 문제이다.(나는 ROP를 먼저했었다..ㅎㅎ) 이 문제를 풀려먼 에필로그에 대한 이해가 필요하다.에필로그는 보통 leave와 ret gadget으로 이루어져있으며 * leave gadget의 경우 *[ mov esp, ebp][ pop ebp] * ret gadget의 경우 *[ pop eip ][ jmp eip ] 형태로 이루어져있다.ret gadget이 진행되면 esp는 + 4가 되며[ pop eip ]의 eip에는 esp의 값이 저장되어지는데ret주소에 ret gadget을 넣어주고 그 뒤에 쉘코드를 넣어주게되면ret gadget이 한 번 더 일어나게되면서 esp가..
-
[LOB] Bugbear -> Giant Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 3. 17:31
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 생각보다 오래걸렸다.. 어떻게 풀어야 할지는 알았으나 삽질을 많이 했다.우선 코드를 보도록 하자!!코드를 보게되면 fopen을 통해서 어떠한 결과값을 버퍼에 저장한다.버퍼에 저장된 값을 lib_addr과 execve_offset에 넣어 더해 ret에 넣어준 뒤argv[1][44]와 비교해서 다르면 프로그램이 종료된다. 그렇다면 우리는 execve 함수의 주소를 알아야 이 문제를 풀 수 있다는 것을 알 수 있었다.그럼 지금부터 하나씩 구해보자 디버깅을 위해 우선 복사본을 만든다. 코드를 보면 첫 번째 popen에서 구하려고 하는 것은 libc_base이고두 번째 popen에서 구하려고 하는 것은 execve함수의 offset이다. 우선 나와있는 명령..
-
[LOB] Darkknigth -> Bugbear Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 2. 18:18
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. Darkknight에서 Bugbear로 가는 문제이다~우선 코드를 보자입력하는 문자열의 마지막이 "0xbf"이면 안된다는 제약이 걸려있다.이 의미는 이전에 사용했던 공격들에 제약이 생겼다는 의미이다.이름을 바꾸어서 하는 공격이라던지 스택의 특성을 이용한 크기를 늘려서 하는 공격들이 불가능하다는 것이다.그렇기 때문에 0xbf로 시작하는 주소가 아닌 다른 주소를 이용해서 공격을 해야한다.문제의 힌트를 보니 RTL을 사용하라는 거보니 RTL로 진행해서 풀면 될 것같다.이전에 이러한 문제들을 풀어봤기 때문에 굉장히 쉽게 접근할 수 있었다. * RTL구하는 방법 *1. ret 이전까지 덮을 수 있는 bufferoverflow 구하기2. libc_base 구..