본문 바로가기

LOB

LOB 9번(troll → vampire)

전 문제들에 비해 새로 바뀐 부분이 argv[1][46]‘\xff’가 되면 안된다.

그러니까 즉 argv[1]의 주소가 0xbfff****가 되면 안되고 0xbf******여야 한다는 건데 그렇담 argv[1]의 주소를 0xbffeffff이하로 받아야한다.


메모리 구조를 보면 커널영역이 1GB이므로 0xbfffffff부터 쌓인다. argc ,argv는 낮은 주소에서부터 쌓이기 때문에 argv[2]의 크기가 0x10000 이면 argv[1]의 주소는 0xbffeffff이하가 된다.

0x10000 = 65,536

메모리 구조

LOW | buffer(40byte) | SFP(4byte) | RET(4byte) | argv[1] | argv[2] | HIGH

 

argv[1]에 쉘코드를 넣고 RET값을 buffer의 주소로 한다.

 

 

buffer의 주소를 확인하기 위해 strcpy가 실행된 직후까지 브레이크 포인트


r `python c’print“\xbf”*48’` `python c’print“A”*65536’`



buffer의 주소 : 0xbffefae0



argv[1],argv[2]의 주소

 

그런데 자꾸 buffer의 주소를 이용하여 ret를 하려하니 세그멘테이션 폴트가 떠서 RETargv[1]의 주소로 돌렸다.



'LOB' 카테고리의 다른 글

LOB 11번(skeleton → golem)  (0) 2016.10.04
LOB 10번(vampire → skeleton)  (0) 2016.10.04
LOB 8번(orege → troll)  (0) 2016.10.04
LOB 7번(darkelf → orge)  (0) 2016.10.04
LOB 6번 (wolfman → darkelf)  (0) 2016.10.04