소스를 보면 다음과 같다.



스택영역 , 코드영역 , 공유라이브러리 영역, LD_PRELOAD 모두 사용이 불가능하다.


근데 공유라이브러리 영역만 이상하게 간단하게 "\x40"을 체크하지않고 필터링을 한다. 여기서 뭔가 이상하다는 느낌이 들었고 \x40영역에 함수주소외에 뭔가 내가사용할 수 있는게 있는건가라는 생각이 들었다.


이걸로 뭘 할수있을까 한참을 고민해봤는데 아무리생각해도 내가알고 있는 범위내에서는 답이 없었다. 그래서 그냥 노가다로 main 마지막부분에 bp걸고 A오질라게 넣은다음에  40000000 주소부터 내가 넣은값이 혹시 저장이 될까 싶은 마음에 그냥한번 쭉 봐봤다.



??설마했는데 진짜 내가입력한 값이 들어가있었다. 두세번정도 더 해봤는데 같은위치에 내가 입력한 값이 정확히 들어가고있었다. ㅋㅋ 일단 이유는 전혀 몰랐고 실제로 익스플로잇이 되나 쉘코드 넣어보고 RET로 호출해봤다.



진짜 쉘이 떴다. 엄청난 삽질로 풀긴풀었는데 왜저기 내가입력한 값이 들어가는지 궁금해서 좀더 찾아보니 이런이유가 있었다.


소스를 보면 fgets함수를 통해 내가입력한 값이 buffer에 저장되는데 이때 3번째 인자인 stdin이 포인트였다.

stdin은 표준입력 파일 스트림으로 내가 어떠한 값을 입력하는동안 이 값들이 입력 버퍼란 곳에 저장이 되고 있었다.


내가 어거지로 찾은 곳이 바로 이곳이었다. ㅋㅋ


실제로 디버깅해서 입력버퍼를 한번 찾아들어가봤다.



fgets의 3번째 인자가 stdin이므로 stdin에 해당하는 값은 0x8049a3c였다.


fgets아래에 bp걸고 아무값이나 넣어본 다음 stdin값을 출력해봤다.



출력되는 값을 보면 stdin의 값이 0x401068c0인걸 알 수 있고 해당 주소를 출력해봤다.



stdin 구조체 값들이 나왔고 각 영역별로 하는 역할이 따로 정해져있는것 같았고 그 중에 내가 입력한 값이 존재했던 0x40015000영역이 실제로 stdin 구조체 내에 존재하는 것을 확인할 수 있었다.


 













'Wargame > Lord Of the Bof(redhat)' 카테고리의 다른 글

[Remind] LOB gremlin -> cobolt  (0) 2019.04.10
[Remind] LOB gate -> gremlin  (0) 2019.04.10
LOB succubus -> nightmare  (0) 2018.01.12
LOB zombie_assassin -> succubus  (0) 2018.01.11
LOB assassin -> zombie_assassin  (0) 2018.01.11
블로그 이미지

JeonYoungSin

메모 기록용 공간

,