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 |