본문 바로가기
시스템 해킹/cykor

ssp

by sonysame 2016. 12. 14.

매우 재미있는 문제를 풀었다

바로 이대진 선배님의 과제였던 ssp문제이다

이것은 eip를 41414141로 조작하는 문제이다

ssp.zip



메인이 없는 것 같아 보일때는 아이다에서 start에서 마지막에 0x804865c로 가는 것을 볼 수 있는데, 이곳이 메인임을 알 수 있다.


일단, 0x804865c에서 read를 하여 입력을 받는다, 이때, i=strchr(&v3,58)을 하게 되는데, 이는 v3의 주소에 적힌 값에서 :가 있는 곳의 주소를 i에 넣는다.

for문에서 중간에 i만 있는데, 이는 i가 참일때까지, 즉 null이 아닐때까지 i는 i+2가 되어 반복을 한다.


0x80485bd를 보면  a2-a1+1을 하게 될때, a2는 :가 있는 곳의 주소고, a1은 v3의 주소 이므로, a2-a1+1은 처음부터 :까지의 길이이다. 그만큼을 malloc으로 자리를 만들고, memcpy를 이용해서 그 만큼(처음부터 : 직전까지의 길이)의 v3를 복사해준다. 그 다음 이를 atoi, 즉 정수로 만들어 v4에 넣고 리턴한다.

그 리턴값과 v3의 주소값을 더한 주소에 :나오는 주소+1한 곳의 1byte를 넣어준다.

즉, 1byte를 바꿔줄 수 있는 것이다. 

v2는 i+2를 해준다.


그래서 eip가 될 곳과 처음 read가 되어 들어가는 곳의 주소 차이는  0xbffff46c-0xbffff3f8(이 주소는 바뀔 수 있다. 하지만 차이는 안 바뀐다)=116인데

v3의 주소값인 0xbffff3f8에 더해주는 리턴값이 116이면 0xbffff46c를 바꿔줄 수 있게 된다. 

그래서 116:A가 되면, 0xbffff46c에 A가 들어가게 된다. 그 다음 117:A를 하면 0xbffff46d에 A가 들어간다.

eip를 0x41414141로 바꾸어야 하므로 116:A117:A118:A119:A를 넣어주면 끝난다.


그 다음은  : 가 없기 때문에 i가 null이 되어 반복문을 빠져 나오게 된다.



'시스템 해킹 > cykor' 카테고리의 다른 글

chal2  (0) 2016.12.31
chal1  (0) 2016.12.29
HEAP  (0) 2016.12.24
ROP2  (0) 2016.11.17
ROP1  (0) 2016.11.11