표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up
-
[LOB] Golem -> Darkknight Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 2. 12:33
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. Golem에서 Darkknight로 가기위한 관문이다. 우선 코드를 보도록 하자힌트를 보니 FPO라고 쓰여있다.FPO란 Frame Pointer Overflow의 약자로 FPO를 이용해서 문제를 풀라는 의미이다.보면 strncpy함수에서 버퍼의 크기가 40인데 41개까지 입력을 받을 수 있는 것이보인다.그렇기 때문에 우리는 41번째의 버퍼 1Byte가 변조 가능하다. 즉, SFP -> Stack Frame Pointer를 변조하면된다. FPO를 진행하기위해서는 두 가지 조건이 필요하다.1. 서브함수가 있어야 한다.2. 서브함수에서 SFP 하위 1Byte를 덮어쓸 수 있어야한다. 우선 디버깅을 위해 복사를 해주자~ main함수에는 그다지 필요한 것이..
-
[LOB] Skeleton -> Golem Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 2. 27. 18:11
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. Skeleton에서 Golem으로 가보도록 하자!!우선 코드를 보자~코드를 보면 stack destroyer라는 코드가 생겼다.stack에 우리가 넣을 수 있는 거의 모든 공간을 0으로 초기화해버린다. 물론 ret는 빼고! 그렇다면 어떤식으로 문제를 풀어야할까??무언가 초기화 되지 않는 부분이 필요하다는 의미이다.하지만 현재 가진 바이너리에서는 방법이 없다.그렇다면 조금만 더 깊게 생각해보자. 프로그램이 실행될 때실행 파일만 가지고 실행되지 않는다는 점을 생각하면 이 문제를 해결 할 수 있다.메모리에는 실행시킨 실행파일만이 로드되는 것이 아니라는 것이다. 해당 바이너리는 ldd와 file 명령어를 통해 확인한 결과 외부 라이브러리를 사용하고 있었다..
-
[LOB] Vampire -> Skeleton Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 2. 27. 16:54
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제는 Vampire에서 Skeleton으로 가는 문제이다.생각보다 쉬웠다ㅎㅎ 코드를 보자! 음 모든 인자들을 초기화하는 코드가 보여진다.하지만 걱정이 없던 이유는 저번에 문제를 풀다가 발견했던유저영역 바로직전의 메모리값이었다.참고 : https://xn--vj5b11biyw.kr/119 그렇기 때문에 우리는 argv[0] 값을 바꾸고 초기화하더라도초기화되지않는 메모리를 알고 있었고 그 부분을 활용하기로 했다. 심볼릭 링크와 nop sled 그리고 쉘코드를 이용해서 진행하였다. 뒤에도 nop을 준 이유는 혹시나 쓰레기값이 들어가서 쉘코드가 제대로 실행되지 않을까봐 넣어주었다. 역시나 초기화되지않은 우리가 넣어준 nop sled + shellc..
-
[LOB] Troll -> Vampire Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 2. 26. 18:19
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제를 보면 지금까지 있었던 제약들이 달라졌습니다.여러 제약이 사라지고 주소값이 0xbf로 시작하고 그 다음이 "ff"가 아니여야하는 제약이 생겼습니다.즉 최소한 0xbffeffff 부터 무언가 쉘코드를 넣어야한다는 것을 알 수 있었다. 하지만 스택이란 무엇인지 잘 고민해보면 이 문제는 굉장히 쉽게 풀 수 있다.스택은 커질 수록 낮은 주소를 사용해야한다는 점, 즉 스택이 거꾸로 자란다는 성질을 이용하면된다.0xbffeffff 영역에서부터 코드가 실행되게 하려면 nop sled를 사용하면 되고그 nop의 양을 크게 키우면 이 문제는 간단하게 풀 수 있게 된다.0xbffeffff에서부터 0xbfffffff까지의 차이는 0x10000이므로65536..
-
[LOB] Orge -> Troll Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 2. 10. 01:49
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제를 풀면서 생각보다 많은 시간이 들었다. argv[0]를 사용해야한다는 것은 알았는데 "\x2f" 가 복병이었고심볼릭 링크를 이용해야한다는 것도 복병이었다...허허.. 지금부터 풀이를 시작해보겠다.추가된 코드들을 확인해보자 우선 인자는 argv[0], argv[1] 두 개를 사용할 수 있으며argv[0]는 기본적으로 파일명이다. 하나 더 추가된 코드를 보면 argv[1]를 그 길이만큼 0으로 memset해주고 있다.이전 풀이처럼 argv[2]는 우선 사용할 수가 없다. 그렇다면 우리는 쉘코드를 어디에 넣어야할까??argv[1]은 초기화되며 길이도 제한이 있기 때문에 더이상 쉘코드를 넣을 수가 없다 그렇기 때문에 떠올린 것이바로 argv[0..
-
[LOB] Darkelf -> Orge Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 2. 10. 01:20
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. 이번 문제는 전 문제에서 역시나 하나의 조건이 추가되었다.(이전 문제 풀이 참고 : https://xn--vj5b11biyw.kr/117) 하지만 뭐랄까 센스??가 필요한 문제였다..그래서인지 꽤 많은 시간을 투자했으나알고보니.. 너무나 쉬운문제였다.. 코드를 보자argv[0] 즉 실행파일명에 대한 조건이 주어졌다. 별짓 다해봤다. 하지만 권한 때문에 파일명을 바꿀 수 있는 것도 아니었다."파일을 실행할 때 조건을 성립해야 넘어갈 수 있는데.." 라는 생각이 들었지만이것 저것 다 해봤다.그러다가 표튜터가 알려줘서 알게된 " / " 절대로 안까먹을 것 같다... Payload와 푸는 방식은 이전 문제와 같다. 다만 추가된 것은 실행할 때 " / "를..
-
[LOB] Wolfman -> Darkelf Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 2. 9. 22:30
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. Darkelf 문제이다.우선 분석을 위해 darkelf파일과 길이가 같은 파일명으로 만들어준다. 나는 darkelp로 했다. 코드를 보자인자의 길이를 제한하는 if문이 등장했다.하지만 코드를 보고들었던 생각은argc의 갯수 제한이 없기 때문에 인자를 하나 더 추가해주면충분히 길이제한이 있더라도 우회가 가능하다는 생각이 들었다. 그래서 인자를 argv[1] = "a"*44 + ret argv[2] = shellcode형식으로 주고 ret값을 argv[2]의 시작주소로 진행하면길이제한과 나머지 조건들 모두 우회가 가능할 것이라고 생각했다. 위에서 설명한대로 payload를 만들어서 진행해보았다.core파일이 생성되었고 ret에 정확하게 argv[2]의..
-
[LOB] Orc -> Wolfman Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 2. 9. 21:50
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다. Orc 문제는 goblin과 비슷하지만 buffer hunter가 추가되어있다.하지만 본의아니게 goblin에서 했던 방법2의 풀이법이면 buffer를 memset하더라도우회할 수 있었다... 그러므로 바로 풀어버렸다ㅎㅎ 혹시나 설명이 부족하다면 이전 goblin -> Orc를 참고하자https://xn--vj5b11biyw.kr/115 코드를 보자정말로 buffer hunter만 추가되었다. 대충 if문을 맞춰서 주소값을 넣고 payload를 만들어서core파일을 분석해보았다. core파일내가넣은 sfp를 덮은 aaaa값과 대충넣은 주소가 보였고그 다음에 쉘코드가 보였다.그러므로 ret 다음 주소는 0xbffffac0이 된다. payload는 다..