일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 리듬게임
- 알고리즘
- OS
- C++ library
- 백준
- 프로그래밍
- JUCE 튜토리얼
- JUCE library
- C++ gui
- go channel
- a tour of go
- BOJ
- Docker
- 코딩
- tour of go
- c++ heap
- JUCE
- 운영체제
- Nebula
- 공룡책
- C++
- 연결리스트
- go
- gui
- C++ gui 라이브러리
- JUCE라이브러리
- vim-go
- 자료구조
- C언어
- LOB
- Today
- Total
목록Hacking (43)
CafeM0ca
ID:assassinPW:pushing me away이전 문제에서 strcpy대신 strncpy를 사용한다. ret뒤로 페이로드를 구성 못하게할 셈. FakeEBP를 이용해서 풀어야한다.FakeEbp: leave,ret가젯을 이용하여 eip를 컨트롤한다.leave,ret명령어를 열어보면 //leave,ret을 에필로그라 함leave : mov esp ebp //esp를 ebp로 옮기고 pop ebp //스택 최상단(esp)에서 4byte를 빼고 ebp에 저장한다. pop되니까 당연히 esp값은 +4된다. (스택은 거꾸로 자란다.) ret : pop eip //스택 최상단에서 4byte를 빼고 eip는 스택 최상단을 가리킨다. jmp eip //eip가 가리키는 곳을 실행 return 값으로 leave,r..
ID:giant PW:one step closerhmm.. use ret sled.ret sled: return ret ret ret.... eip point next 4byte stackbuf | sfp | ret | ret's ret | ret's ret's ret| ret's ret's ret's ret| shellcode put on argv[1]Oh.. No addr. add stack addr(possible). after ret, instruction point NOP(sleeeeeeed) expoit maybe easy . this way will be use FC3
ID:bugbearPW:new divide this code get libc offset,execve offset.libc offset + execve offset = execve addr!popen is read from process One thing, you should know that execve addr is fixed any binary file! So. easily get execve addr.print execve == p execve in gdb copy original giant.c to ./tmp(mkdir tmp. tmp directory is acess any user) and add code at giant.c like pictureyou can check execve_addr..
사용툴:immunity debugger포스팅 3분의 1쯤 썼는데 다 날라가버렸다. 키파일을 확인하기위해 확인버튼을 눌러달라고 한다. 눌렀는데 없다고하고 끝나버린다.이 부분에서 파일을 만드는데 인자들을 보자hTemplateFile 파일의 속성을 제공할 템플릿 / 반드시 NULL이어야함 Attributes 파일 속성 / 현재 노말이다. 인자에따라 숨김파일,암호화파일,시스템파일,읽기전용파일,임시파일 등으로 만들 수 있다. Mode 파일 생성 or 열기 / OPEN_EXISTING은 이미 존재하는 파일을 엶. pSecurity 파일 보안 속성 / 파일 보안 속성 지정하는 구조체. NULL이면 자식프로세스에게 핸들이 상속되지 않으며 디폴트 보안 설정자 ShareMode 공유 모드 / 0은 다른 프로세스 파일,장치..
사용한 툴: immunity debugger1에 비해 난이도가 올라간 느낌?.. 조사해보니 visual basic으로 짜여져 있다. 풀어보자! 프로그램을 실행시켜보면 CALL 이라는 곳으로 도착하는데 여기가 메인함수부분이다. F7로 함수 내부로 들어가보자.계속 실행시키다보면 창을 띄울 준비를 한다.그리고 CALL MSVEVM60.6600A4C2에서 창이 나온다.이름을 입력하고 시리얼키를 입력받는데 아마 이 문제가 원하는건 시리얼키를 맞추는 것 같다.그리고 저 창이 출력된 후 디버거가 다음 명령을 듣지 않는다. 즉 저 함수 안에 check와 about, quit를 입력받는 무언가가 있다는 의미다.근데 이런식으로 하나하나 분석하려면 시간과 노력이 많이들테니 무슨 함수들이 있고 필요한것만 분석하는게 좋을 듯 ..
abex라는 사람이 어셈블리로 만든 파일이라고 한다. 리버싱 시작한지 30분도 안됐지만 풀 수 있었다. 디버거는 immunity debuger를 사용할 것이다. (뭔가 올리디버거는 80~90년대 느낌나서 싫더라) 처음 열어보면 아래와 같이 신기하게 생긴 창이 생성됀다.어셈블리 명령어,hex값,스택,레지스터가 보인다. 한줄씩 쭉 실행시키다보면(F8) 메시지 박스가 보인다. 하드를 CD-ROM으로 바꾸라고 하는데 자세히보면 맨 첫줄 0x40101F에서 JMP가 하나 있고 0x401024에서 조건문이 하나 있다. Ok, I readlly think that your HD is a CD-ROM! :p 를 띄워줘야할꺼 같은 느낌이 드는데 3가지 방법이 보인다.1. JMP를 0x401021에서 0x40103D로 바..
_cdecl 인자값 전달은 오른쪽부터, 스택 정리는 caller(Add esp,n) //n만큼 스택을 할당한걸 회수함 _stdcall 인자값 전달은 오른쪽부터, 스택 정리는 callee(ret n) _fastcall 인자값 전달은 레지스터+스택, 속도가 빠르나, 경우에 따라 오히려 코드가 길어짐 C언어 : _cdeclWINAPI : _stdcall
RTL을 사용해야하는 듯 하다.RTL은 라이브러리로 리턴한다는 의미로 eip를 라이브러리 함수주소로 돌리면 된다. 쉘을 얻기 위해 system함수를 사용하여 인자로 /bin/sh를 실행하면 쉘이 실행될 것이다.우선 시스템 주소부터 찾아보자.gdb로 카피 파일을 열어서 적절한 곳에 bp를 걸어주고 print system하면 libc system주소가 나온다.->system함수 시작점: 0x40058ae0인자로 쓸 /bin/sh를 찾아야하는데 곰곰히 생각해보니 system함수도 /bin/sh를 실행하고 다른 명령을 받으므로 system함수 어딘가에 /bin/sh가 있을 것이다. 그 주소를 찾아서 인자로 넣어주면 된다. 일일이 찾을 순 없으니 /bin/sh를 찾는 소스코드를 작성하자.0x400fbff9가 /b..
입장ID:golem입장PW:cup of coffee problem_child에서 1바이트만큼 오버플로우된다. 버퍼오버플로우시킨 후 eip의 흐름을 보자인자 "\x90"*40+"A"problem_child+41에 break point를 잡고 ebp를 확인해보면 버퍼에 nop*40+A가 박혀있다. ebp를 보면 주소가 0xbffffc41다. 41번째 byte는 오버플로우된 바이트고 42,43,44번재 byte는 \xfc\xff\xbf가 박혀있는 상태다. 따라서 41번째 byte를 주소를 잘 맞춰주면 버퍼의 주소를 가르킬 수 있다는 의미고 이는 버퍼에 쉘코드를 올리면 쉘이 실행된다는 의미다. 쉘코드를 올리고 41번째 byte를 54로 맞춰보자.problem_child 에필로그전 ebp는 쉘코드 주소를 가리키고..
입장ID:skeleton입장PW:shellcoder 조건을 보면 argv[1][47]은 \xbf 이어야하고 스택은 사용하지 못한다.그럼 스택이 아닌 부분을 사용해야 하는데 이 문제는 공유라이브러리를 사용해야한다.공유 라이브러리는 printf나 strcpy와 같은 함수들이 있는 공간이다.리눅스에는 LD_PRELOAD라는 환경변수가 존재한다. 이 환경변수는 등록한 공유라이브러리를 우선시 한다.예를 들면 위 사진의 코드중 printf는 공유라이브러리에 존재한다. 하지만 사용자가 임의의 printf함수를 만들고 공유라이브러리로 컴파일하여 LD_PRELOAD로 올리면 기존의 printf가 아닌 사용자가 만든 printf가 작동한다.(후킹)그럼, 방금 말한 시나리오대로 간편하게 "쉘을 실행시키는 printf 함수를..