xavius의 소스코드입니다
저번과 같이 왠만한 부분은 전부 막아놔버렷네요
leave를 막아놓음으로써 fake ebp 기법을 방어한거같고
xc3은 ret을 ret에 넣는 방법을 방어한거같네요

ret의 끝자리가 \xc3인것을 확인 하실수 잇습니다
스택도 막아놓고 공유라이브러리도 막아놨네요 

그래서 이걸 어찌풀어야하지 .. 하고 고민을 하던찰라에 뭔가 주석이 달린 //overflow! 부분을 삽질해보기로 결정했습니다 . 

그러던 도중에 stdin으로 한번 통해서 간다는 생각이 들어서 stdin을 파해쳐 보기로 하였습니다 (사실 확신이 없어서 하루 종일 이것저것 파봤습니다-_-)

stdin의 주소를 출력한뒤 이동했습니다
다 초기화 햇을텐데 값이 보이네요 뭔가 실마리를 얻은거 같았습니다 

의심 가는 부분을 하나하나 찔러봤습니다 . .
혹시 몰라 브레이크 포인트도 수시로 바꿔주면서 값들을 확인하던 찰라에 

수십번을 시도 하고 아무리 값을 집어넣고 실행시켜도 
주소가 변하지 않아서 여기가 아닌가보다 그럼 도대체 어디지? 하면서
pe구조를 보던 찰나에 
뭔가를 입력해야만 
Breakpoint 1, 0x804882a in mian() 이런식으로 실행이 된다는것을 보고 
뭔가 이상함을 느꼈습니다 
그러다가 우연히 오타를 쳤는데

IO_2_1_stdion_  부분의 주소값들을 자세히 봐주세요 

IO_2_1_stdin_ 의 주소가 
0x40015001 에서 0x40015003 으로 변했습니다 

A를 무작위로 대입해줫더니
0x4001502c로 변했습니다 .
그래서 아무것도 안넣어줫을때 값이 초기 값이라고 생각하여 
0x40015000로 이동을 했습니다 

41들이 정상으로 들어가는것을 확인할 수 있습니다 
게다가 stdin의 주소는 리턴을 검사하는것에 걸리지도 않습니다 
뒷부분이 00이지만 놉코드를 써주고 쉘코드를 써주면 피해갈 수 있다고 짐작해볼수잇겠네요

계속 값을 주고 시도했는데 실패했습니다 
이유를 찾던 도중에.. 
fgets(buffer , 256 , stdin) 에서 
fgets를 사용해서 풀엇던 문제들은 | 와 cat을 이용해서 풀엇다는 사실을 알게되었습니다(복습좀 해야겠습니다 까먹엇었습니다)

풀게되었습니다 . .
lob를 끝내고 한번 더 정리해야겠습니다 

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

LOB CLEAR~  (0) 2016.05.21
LOB death_knight  (0) 2016.05.21
LOB nightmare  (0) 2016.05.19
LOB succbus  (0) 2016.05.16
LOB zombie_assassin  (0) 2016.05.16

+ Recent posts