![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FenVL3z%2FbtrEAAOpjgK%2FOmu86DnoTALKFEAYfkmCMk%2Fimg.png)
이번 포스트에서는 리눅스의 Makefile에 대해 다루겠다. Makefile : 실행 파일을 만들기 위해 필요한 파일들과 만드는 방법을 기술한다. 주요 매크로 : CFLAGS : cc와 gcc의 옵션을 지정한다. CC : C 컴파일러를 지정한다. (CC=gcc 혹은 CC=cc) ASFLAGS : as의 옵션을 지정한다. AS : 어셈블러를 지정한다. (AS=as) CPPFLAGS : c++와 g++의 옵션을 지정한다. CXX : C++ 컴파일러를 지정한다. (CXX=g++) LDFLAGS : ld의 옵션을 지정한다. LD : ld 프로세스를 지정한다. (LD=ld) LFLAGS : lex의 옵션을 지정한다. LEX : lex 프로세스를 지정한다. (LEX=lex) YFLAGS : acc의 옵션을 지정한다..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcSEnX%2FbtrEw8k0XfV%2FnXKKfNxLtr3oo1sc0n3OKk%2Fimg.png)
이번 포스트에서는 리눅스의 명령어인 gcc에 대해 다루겠다. gcc : 유닉스 계열 운영체제에서 사용된 컴파일러이다. 주요 옵션 : -c : 목적파일까지 생성 -o : 별도의 실행파일 지정 -O : 컴파일 최적화 수행 -S : 어셈블리 프로그램 확인 -l : 특정 라이브러리 링크 -L : 라이브러리의 디렉토리 위치를 명시적으로 지정한다 -D : 매크로를 지정한다 실행 화면 :
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs8fHG%2FbtrEuXKTV0U%2Fdz9QrmiKiCfPxoooWYiPJk%2Fimg.png)
이번 포스트에서는 리눅스의 텍스트 에디터인 vi에 대해 다루겠다. vi : 쉘 상에서 새로운 문서를 편집할 수 있는 환경을 제공한다. 명령 모드 : vi 명령어를 통해 vi를 시작할 경우 실행되는 모드. 방향키를 통해 커서를 이동할 수 있다. k : 한 줄 위로 이동 j : 한 줄 아래로 이동 l : 한 문자 오른쪽으로 이동 h : 한 문자 왼쪽으로 이동 ^ / 0 : 줄의 시작으로 이동 $ : 줄의 마지막으로 이동 - : 이전 줄의 처음으로 이동 + / Enter : 다음 줄의 처음으로 이동 H : 키 화면 맨 위로 이동 M : 키 화면 중간으로 이동 L : 키 화면 맨 아래로 이동 w : 다음 단어의 첫문자로 이동 b : 이전 단어의 첫문자로 이동 e : 다음 단어의 끝 글자로 이동 ( : 현재 문..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHpspv%2FbtrEuFXXzfK%2FY0smXVHZM1BT2Gy9WeIQE0%2Fimg.png)
이번 포스트에서는 리눅스의 명령어인 crontab, awk, du에 대해 대루겠다. crontab : crontab 파일을 cron 시스템에 등록한다. 주요 옵션 : -l : 사용자의 등록된 crontab 파일 리스트 -e : 사용자의 등록된 crontab 파일 수정/생성 -r : 사용자의 등록된 crontab 파일 삭제 실행 화면 : awk : 파일로부터 레코드(record)를 선택하고, 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 것을 목적으로 사용하는 프로그램이다. 주요 옵션 : -f : 필드 구분자를 c로 정할 수 있음 (default : 공백) 실행 화면 : du : 하나의 파일을 일정한 크기의 여러 개 작은 파일로 분할 주요 옵션 : -s : 각 파일에 대한 전체 합계 표시 실행 화면 :
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrMWxb%2FbtrEtawX3Tq%2FHkQkd21rJn0IyLHDvWXKm1%2Fimg.png)
이번 포스트에서는 Lord of SQLInjection의 frankenstein문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., (, ), union을 필터링하고 있다는 것과 에러가 발생하면 탈출한다는 사실을 알 수 있다. 또한 pw의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : error 출력 및 case문을 이용해서 공격을 시도해보겠다. 또한 ()괄호가 필터링 되어 있으므로 비밀번호의 길이를 구하지 않고 바로 비밀번호를 구하도록 하겠다. ### 사용할 공격문 : pw=1' or id='admin' and case when pw like ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOUtw5%2FbtrEtHAtJQX%2F3ZFurEkNIAaBp3V47s8rKk%2Fimg.png)
이번 포스트에서는 Pwnable의 bof 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } ## 문제 해석 : 문제 코드를 살펴 보니, 우리가 입력한 값이 overflowme 라는 변수에 저장되고 해당 변수의 크기가 32바이트인 것을 알 수 있다..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHzU5d%2FbtrEnLKOKOb%2FzQ3HCT8Nl1dxOVkmsPfNk0%2Fimg.png)
이번 포스트에서는 Lord of SQLInjection의 blue_dragon문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, ., ', \를 필터링하고 있다는 것을 알 수 있다. 또한 pw의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : "\"와 "'"가 필터링 되었으므로 이번에는 Time based SQL Injection 기법을 통해 공격을 실행해보겠다. ### 사용할 공격문 : id=&pw=' or if(id='admin' and length(pw) > 5, sleep(2), 1)%23 ### 실행 결과 : 페이지가 2초 동안 로딩한 뒤에 ..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm0N5H%2FbtrEeKsqBgr%2FWPqKLcJkl4MsMOTdncw3Q0%2Fimg.png)
이번 포스트에서는 Lord of SQLInjection의 red_dragon문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 prob, _, .을 필터링하고 있다는 것을 알 수 있다. strlen() 함수를 통해 id값의 길이를 7자 이하로 제한하고 있다. no값이 숫자인 경우에 그대로 쓰이고 아닌 경우에는 1로 변경된다. 또한 no의 값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : 해당 문제는 글자 제한이 걸려있으므로 최대한 짧은 쿼리문을 사용하여 no의 값을 알아내야 한다. 또한 is_numeric() 함수는 공백 문자 등을 인식하지 못하는 점을 활용하여 공격해..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCx5sM%2FbtrEhZCH8J7%2FcGfGoQjuj2xb7gRZMItOAK%2Fimg.png)
이번 포스트에서는 Pwnable의 collision 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i> hashcode = 0x21DD09EC >>> hex(hashcode/5) # 5로 나누었을 때의 값 '0x6c5cec8' >>> hex(hashcode%5) # 5로 나누었을 때의 나머지 '0x4' >>> hex(hashcode/5+hashcode%5) # 5로 나누어 떨어졌을 때의 마지막 값(나머지 포함) '0x6c5cecc' >>> he..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkDgmE%2FbtrEhp2MsZY%2FkmrrX30JcU4lw0q7lrQt40%2Fimg.png)
이번 포스트에서는 Pwnable의 fd 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #include char buf[32]; int main(int argc, char* argv[], char* envp[]){ if(argc