RTL도 사용불가능하고 스택의 주소를 이용한 방법도 사용불가능하네요 

fake ebp 방법으로 또 6시간동안 삽질한 문제였습니다.

덕분에 fake ebp문제는 쉬울거같은 느낌이 드는군요 ...후우 

엄청해맸습니다. 주소의 끝 부분을 이용해본다거나 어케든 돌려서 박아넣어본다거나..

if(argv[1][47] == '\x40' 이 부분에 걸려서 에러가 뜰때 뭔가 떠오른게 있었습니다.

어라? 기존 ret는 안걸리네 생각해보니까?

근데 ret는 pop eip jmp eip를 수행합니다 

근데 ret주소에 ret이 있다면..? ret이 다시 한번 수행 된다는걸 알 수 있습니다 . 

buf[40]  +  SFP [4] + RET[4] 일단은 이러한 구조입니다
근데 if문은 [1][47]에 걸려있습니다 근데 RET가 다시 한번 실행되면..?

buf[40] + SFP [4] + RET[4] +RET[4] 조건에 걸리지 않고 RET를 사용할 수 있습니다!

기존의 RTL 방법이라던가 환경변수를 사용 할 수 있는 조건이 만들어졌습니다!

알고 나니까 정말 후련하고 뭔가 깨달은거같네요! 

기존의 RTL을 사용한다면 이러한 구조가 되겠네요

buf[40] + sfp[4] + ret[4] + system[4] + dummy [4] + /bin/sh [4]

그렇다면 먼저 ret의 주소와 system의주소 그리고 /bin/sh의 주소를 구해봅시다.

/bin/sh를 구하기 위한 소스코드입니다.

shell = [이곳 주소는 system의 주소가 들어가야합니다]

이제 재료가 다 모였네요 넣어봅시다!

성공했습니다!

[환경 변수는 이상하게 오류가 떠서 실패했습니다. 안되는 원인을 아시는분은 말씀 주시면 감사하겠습니다 

'해커스쿨 lob' 카테고리의 다른 글

LOB succbus  (0) 2016.05.16
LOB zombie_assassin  (0) 2016.05.16
LOB giant  (0) 2016.05.12
LOB bugbear  (0) 2016.05.12
LOB darkknight  (0) 2016.05.11

+ Recent posts