ctf

[Plaid 2013 CTF] pork

woodonggyu 2016. 6. 3. 17:51

취약점이 발생하는 함수는 clienterror 함수로, sprintf 함수에서 overflow가 발생한다.

 

 

좀 더 자세히 설명하자면,  위 그림에서 0x800 만큼 입력받는 것을 볼 수 있다. 그렇다면 총 2048byte인데 clienterror 함수에서 크기가 0x400 크기를 가지고 있는 s 변수에 덮어씌우기 때문에 overflow 가 된다.

※ 주의해야하는 점은 입력받은 변수를 sscanf로 입력하기 때문에 payload 안에 종료를 의미하는 "\x00, \x2f" 와 같은 문자열이 들어가게 되면 페이로드가 짤리게 된다.

 

 

s 변수에서 ebp 까지의 거리는 1112byte(0x458) 이다. 하지만 우리가 입력한 것들이 s 에 들어가기 전에 에러 문자열을 s 에 먼저 넣고 있기 때문에 1112byte - 92 = 1020byte 까지가 버퍼이다. 즉, 메모리는 buffer(1020) | sfp(4) | ret(4) 가 된다.

 

NX 나 Stack Canary 등 보호 기법이 걸려있지 않다..