Wargame Site/BOF
-
|Lord Of Bufferoverflow| #19 nightmare - xaviusWargame Site/BOF 2019. 7. 10. 08:22
오늘은 id;ll 로 한번에 확인했다 ^^ 이 코드를 천천히 분석해보면서 가장 궁금했던 점은 Lib 영역을 필터링하는데 " \x40 "을 사용하지 않았다는 점이다. 당연히 \x40 영역이 좀 더 포괄적인 개념이라고 생각하지만, 그 자세한 이유에 대해서 고민을 했다. 그러던 중, fgets 의 세 번째 인자 즉, stdin 를 통해 접근할 수 있지 않을까 하는 생각이 들었다. 표준입력 즉, 내가 입력한 값이 들어가는 곳이기 때문에 만약 stdin 영역이 \xbf, \x08 로 시작하지 않는다면 해결할 수 있을 것이다. 디버깅을 해보면 stdin 이 push 될 것이다. 세 번의 PUSH 중 첫 번째 push 된 값이 stdin 과 관계가 있을 것이다. 따라가다보면 ds:0x8049a3c 가 stdin 이라..
-
|Lord Of Bufferoverflow| #18 succubus - nightmareWargame Site/BOF 2019. 7. 9. 17:30
Write Up 을 보지않고 해결하는 것을 좋아하는 성격 탓에 몇 일 동안 끙끙 거린 뒤, 드디어 풀이를 올린다... 우선 id 와 권한을 확인한다. 천천히 코드를 해석해보면 strcpy 의 주소가 필요하다는 것을 알 수 있다. 그리고 strcpy 바로 다음의 값이 'AAAA' 이다. 이 값은 strcpy 가 실행된 뒤 실행될 위치의 주소가 들어간다. strcpy 의 주소는 objdump 를 통해서 혹은 gdb -q ./nightmare 를 통해 간단히 확인할 수 있다. 다음과 같이 strcpy 를 맞춰준 뒤, 다음과 같이 인자를 넘겨주었다. `python -c 'print "A"*44 + [ strcpy 주소 ] + "BBBB" + "CCCC" + "DDDD" + "EEEE" + [ shell code..
-
|Lord Of Bufferoverflow| #17 zombie_assassin - succubusWargame Site/BOF 2019. 6. 29. 21:55
우선 main 함수를 보면 RET 부분부터 104 개의 문자를 수용하고 있다. 그렇다! Chaining 에 관련된 개념을 사용하는 문제이다. check 라는 변수를 조절하는 함수를 모두 거쳐야 문제가 해결되는 것이다. DO - GYE - GUL - YUT - MO 순서로 실행하는 바이너리를 작성해보자. 우선, RET 를 DO 로 맞추어주어야한다. 인자가 없기 때문에 DO 의 주소만 맞춰주면 될 것이다. [ DO 의 주소 ] + [ ret 에서 pop eip 로 인해 생긴 공간 = DO 가 실행되고 난 뒤 실행되는 위치 ] + [ DO 의 프롤로그 에필로그 과정 ] 다음과 같이 동작할 것이다. 따라서 !! [ DO 의 주소 ] + [ 제2의 함수 주소 ] + [ 제3의 함수 주소 ] + .... 다음과 같..
-
|Lord Of Bufferoverflow| #16 assassin - zombie_assassinWargame Site/BOF 2019. 6. 29. 19:50
먼저 세팅먼저하도록 합니다 ^^ 1 바이트라도 차질이 생기면 문제에 지장이 있으므로 이번에도 한 글자만 바꿔서 접근하도록 한다. FEBP ( Fake EBP ) 이 기법은 앞서 접근했던 방식 중의 하나로, EBP 를 조작한 뒤, RET 부분을 leave 에 맞춰서 EIP 의 흐름을 바꿔버리는 녀석이다. 하지만, 앞서 풀었던 방식과 다른 것은 LEAVE 부분을 직접 돌려주어야 한다는 점이다. ( 이 차이는 생각보다 중요한 개념인 것 같다. ) 그렇다면, 앞의 문제 ( gloem-darkknight ) 에서 변화되는 내용은 무었일까? [ System 의 주소 ] + AAAA (EBP 역할) + [ /bin/sh 의 주소 ] + ..... + [ Buffer 시작 - 4 (마지막 1Byte) ] 그렇다!! 단..
-
|Lord Of Bufferoverflow| #15 giant - assassinWargame Site/BOF 2019. 6. 23. 18:33
RET 에 제약조건이 붙어있는 문제이다. \xbf (stack 영역), \x40 (lib 영역) 이 불가하다. 그럼 또 다른 어딘가에 내가 입력한 값을 이용할 영역이 있다는 것이다. 가만 생각해보니 RET 구역에 80 으로 시작하는 코드를 넣어본 적이 있는 것 같다. 바로 objdump 를 이용해서 leave 로 코드를 돌렸던 문제이다. RET 이후를 제외하고 SFP 와 Buffer 가 날아가는 문제이다. 만약 RET 를 다시 ret 로 보낸다면 EIP 를 원하는 곳으로 조정할 수 있을 것이다. 작전을 세워보자. RET 부분을 80 지점의 다른 ret 로 돌리면 다음과 같은 전체적인 그림을 그릴 수 있다. "A"*44 + "\x36\x83\x04\x08" + [ system 주소 ] + [ system ..
-
|Lord Of Bufferoverflow| #14 bugbear - giantWargame Site/BOF 2019. 6. 23. 17:04
아따~ 길다.. 하지만, 자세히 보면 그렇게 어렵지 않은 코드임을 알 수 있다. 중간에 친절하게 주석처리까지 되어있는 것을 알 수 있다. // gain address of execve ,//end 인 것으로 알 수 있 듯, execve 의 주소를 가져오는 것이다. 그리고 RET 에 execve 의 주소를 잘 넣어줬는지 확인하는 코드가 보인다. 즉, execve 를 ret 로 두어 문제를 해결해야하는 것이다. 24 번째 줄에서 보이는 저녀석이 걸림돌이 된다. 기존의 풀이 방식을 파헤쳐보면 Core 분석 및 디버깅을 위해 실행파일을 복사했다. 실행파일을 복사하면, 우리의 권한으로 파일을 실행시킬 수 있기 때문에 Core 가 생기며, Core Analysis 를 할 수 있었다. 만약, 이문제에서 giant 를..
-
|Lord Of Bufferoverflow| #13 darkknight - bugbearWargame Site/BOF 2019. 6. 21. 13:00
RET 에 제한을 두는 문제이다. 앞서 풀어본 문제는 함수를 호출하고 바로 leave 와 ret 가 뒤에 있기 때문에 조작하기 쉬웠던 것이었다. 하지만, 이 문제에서는 앞의 문제의 구조와는 다르다. 하지만, ret 를 leave 로 향하게 해준다면, SFP 조작으로 System(/bin/sh) 실행이 가능할 것이다 우선 프로그램 내에서 leave 와 ret 의 위치를 파악하기 위해 objdump 를 사용했다. 실습에서 사용할 leave 는 저 녀석이다. 0x0804830d (leave) 이로써 앞의 문제와 같은 문제가 되도록 할 수 있다. [ System 의 주소 ] + AAAA (EBP 역할) + [ /bin/sh 의 주소 ] + ..... + [ Buffer 시작 - 4 ] + [ leave 의 주소..
-
|Lord Of Bufferoverflow| #12 golem - darkknightWargame Site/BOF 2019. 6. 17. 12:25
문제를 천천히 분석해보면, 41 개 즉, 1Byte Overflow 를 활용해서 문제를 해결해야한다. 1 Byte 의 역할은 SFP 의 첫 바이트를 의미한다. 예상대로 다음과 같이 ebp 의 값에 41이 들어간 것을 확인할 수 있다. 그리고 이 화면은 disas main 에서 problem_child 가 실행되고 난 직후의 모습이다. esp 를 증가 시킨 뒤, 바로 leave 가 있는 것을 볼 수 있는데, 이것은 우리에게 어떤 의미를 가질까 leave 는 mov esp, ebp 즉, esp 의 값을 ebp 의 값으로 바꾸는 과정이다. ret 는 esp 의 값을 eip 로 설정하는 코드이다. 그리고 ebp 는 우리가 조정해 줄 수 있는 상태이다. 그렇다면!! SFP 를 통해서 EIP 까지 조정할 수 있는 ..