-
|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 이라는 것을 알 수 있다.
좀 더 파고들어보자!!
확인해볼 구역은 크게 두 구역이다.
fgets 호출 전 Stack의 상태와 fgets 후의 stdin 의 상태이다.
stdin 의 인자를 정확히 확인할 수 있다. ds:0x8049a3c 는 0x401068c0 라는 값으로 들어간 것을 알 수 있다.
그렇다면 이번에는 입력 전 후의 stdin 의 변화를 살펴보자.
stdin 은 다음과 같은 구조를 지닌다.
따라서 0x40015000 ~ 0x4001500a 에 내가 넣어준 값이 들어가 있다는 뜻이 된다.
확인해보자~
자, 입력값에 따라 바뀌는 부분을 찾았다. 그렇다면 이제 ret 를 이곳으로 돌려주면 된다.
"Nop sled" 와 "Shellcode" 로 44 byte 를 채우고 이곳으로 돌려주면 될 것이다.
Nice !!
'Wargame Site > BOF' 카테고리의 다른 글
|Lord Of Bufferoverflow| #18 succubus - nightmare (0) 2019.07.09 |Lord Of Bufferoverflow| #17 zombie_assassin - succubus (0) 2019.06.29 |Lord Of Bufferoverflow| #16 assassin - zombie_assassin (0) 2019.06.29 |Lord Of Bufferoverflow| #15 giant - assassin (0) 2019.06.23 |Lord Of Bufferoverflow| #14 bugbear - giant (0) 2019.06.23 댓글