목록Hacking (37)
minhui study
보호되어 있는 글입니다.
문제 파일은 위에서 다운 받으면 됩니다~! 다음 파일을 실행시켜 보면 다음과 같은 알림창이 뜬다. 확인 눌러보면 다음과 같이 에러가 뜬다. 열어보았더니 다음과 같다. MessageBoxA(1,2,3,4) ① : hOwner ( 메시지 박스의 오너 윈도우. 메시지 상자를 소유한 윈도우를 말하며 메시지 박스가 떠있는동안 다른 행위를 할수없다 ) ② : text ( MessageBox에 출력할 텍스트 " Make me think your HD is a CD-Rom" ) ③ : title ( MessageBox 윗부분의 텍스트 "abex' 1st crackme" ) ④ : style ( MB_OK = OK버튼 1개, MB_OKCANCEL = OK와 CANCEL 총 2개 버튼 등 몇몇 종류의 값이 있다.) 401..
함수 호출 규약 "함수를 호출할 때 파라미터를 어떤 식으로 전달하는가?"에 대한 일종의 약속 → 함수 호출 후에 ESP(스택 포인터)를 어떻게 정리하는지에 대한 약속이 바로 함수 호출 규약이다. ● cdecl ● stdcall ● fastcall 1. cdecl 주로 C언어에서 사용되는 방식이며 호출자(함수를 호출한 곳)에서 스택을 정리한다. #include "stdio.h" int add(int a, int b) { return (a+b); } int main(int argc, char* argv[]) { return add(1,2); } =======main()문========= PUSH EBP MOV EBP, ESP PUSH 2 ;파라미터 2 PUSH 1 ;파라미터 1 CALL 00401000 ;A..
메모리 구조 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있다. 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 다음과 같다. 코드 영역 메모리의 코드 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 부른다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다. 데이터 영역 메모리의 데이터 영역은 프로그램의 전역 변수와 정적 변수가 저장되는 영역이다. 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 힙(heap) 영역 메모리의 힙 영역은 사용자가 직접 관리할 수 있는 그리고 해야만 하는 메모리 영역이다. 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다. 힙 영역은 메모리의 낮은 주소..
CPU 레지스터란? 레지스터란 CPU 내부에 존재하는 다목적 저장공간이다. CPU가 RAM에 있는 데이터를 Access하기 위해서는 물리적으로 먼 길을 돌아가야 하기 때문에 시간이 오래 걸리지만 레지스터는 CPU와 한 몸이기 때문에 고속으로 데이터를 처리할 수 있다. IA-32 IA-32는 인텔의 32비트 마이크로프로세서에서 사용하는 명령 집합 아키텍처를 말한다. IA-32에서 지원하는 기능은 매우 많고 그 만큼 레지스터의 수도 많다. 어플리케이션 디버깅의 초급 단계에서는 Basic Program Execution Registers에 대해서 알아야 하는데 그 이유는 디버깅 할 때 가장 많이 보게 될 레지스터이기 때문이다. Basic program execution registers Basic Progra..
Challenge orc GET 방식으로 pw를 입력받고 addslashes()함수를 통해 pw를 변환하고 그 비밀번호에 일치하는 비밀번호를 테이블에서 찾아낸 뒤 GET방식으로 받아온 pw와 같으면 문제가 풀린다. 여기서 addslashes()함수에 대해 잠깐 알아보고 넘어가자 만약에 I'm a girl 이라는 문자열을 전송하게 되면 '(따옴표)때문에 오류가 발생하게 된다. 이 때 addslashes함수가 I(역슬래쉬)'m a girl로 바꾸어 주는 작업을 해준다. 그리고 DB에서 다시 꺼내왔을 때 추가됐던 백슬래쉬를 제거해주는 함수가 바로 stripslashes()함수이다. 자 이제 문제는 pw를 어떻게 찾나 이다. 먼저 pw길이부터 알아보자 select id from prob_orc where id=..
Challenge goblin url에 ?no=1이라고 치면 다음과 같이 나온다. 코드를 보면 no에 따옴표가 필터링이 된다. 그리고 문제가 해결되려면 id가 guest가 아닌 admin이어야 한다. 그러므로 쿼리문은 no에 1이 아닌 다른 값을 넣어주어 거짓으로 만든 다음 뒤에 id='admin'을 붙여서 select id from prob_goblin where id='guest' and no=2 or id='admin' 이런식으로 보내면 문제가 해결될 것이다. 하지만 이대로 넣어주면 '이 필터링이 된다. 일단 첫번째 방법은 a=97(아스키 코드)이므로 id에서 맨 왼쪽 값이 a(97)을 찾아라라는 의미의 쿼리를 넣는 것이다. select id from prob_goblin where id='gues..