본문 바로가기

My Study/Exploit

간단한 정수 오버플로우

잡담..

흐흐+_+ 오늘은 아버지께서 양복을 사주셨습니다. 제 생애 처음으로 입어보는 양복이네요..

양복하면 어른들 양복 밖에 생각이 안나서 입기 꺼려하고있었는데 오늘 양복점을 가서 입어보니 20대들이 입을 수 있는 핏도살고 간지도 나는 깔끔한 정장들도 나오더군요. 제 마인드가 오늘 또 하나 바뀌었습니다 ㅋㅋ 

첫 양복이라 무난한 검은색으로.. 장례식장이던..결혼식장이던..발표할때던.. 어디서나 입을 수 있는..ㅋ

하!지!만.. 아직 구두가 없어서 입을수가 없습니다 ㅠ_ㅠ.. 이로서 사회인에 한걸음 다가간 느낌이 조금 드네요 -_-; 싫습니다!!

====================================================================================

자기전에 책보다가.. 간략히 나오길래 저도 확인차 그냥 정리만 하고 자렵니다.

Exploit과는 거의 담을 쌓고 지낸지라.. 오랜만이군요. 이런 글도..



이런 간략한 코드가 있습니다. 너무 인위적이네요.


문자열을 하나 입력받고 해당 문자열과 문자열의 길이를 넘기구요.

문자열의 길이가 of함수에 할당된 buf 크기보다 작으면 복사를 하고 크면 복사를 하지 않고

끝나게 됩니다.


일반적인 bof 개념으로보자면 저 루틴에선 취약점이 없어 보이겠네요.


하지만 정수 오버플로우 발생으로 취약점이 일어나는 부분이 있습니다.

바로 of함수에서 문자열의 길이를 비교하는 if문..에서 발생합니다.


현재 templen과 maxlen 변수의 자료형은 char입니다.

그렇기 때문에 128인 값이 들어오면 -1로 취급을 하게 되겠지요.


즉, of함수 인자로 문자열 길이를 넘길 때 128글자 이상을 넘기면 해당 값은 음수로 인식이되 if안으로 들어오게되면서

bof를 일으킬 수 있습니다.


assembly 로 봐보겠습니다.


저 부분을 보시면 cmp로 비교한 다음 JGE라는 점프문이 나오네요.

JG, JL은 부호있는 값이 비교할 때 사용되는 점프문..입니다. 그 반대는 JA, JB 이겠지요.

고로 [ebp+8] 값이 0x80이 넘어서면.. JGE 는 작동되지 않고.. 문자열 복사가 이루어집니다.


이렇게 말이죠..


해결방안은?! 모르면 간첩!!


잘래요 ㅠ ㅠ