본문 바로가기

시스템

(42)
간단한 정리 RTL return to library 의 약자이고 linux에서는 return to libc라고 불린다.(linux에서 library가 libc)DEP/NX를 우회하기 위한 기법 이 기법을 이용하면 프로그램에 system()가 없어도 라이브러리의 system()를 호출하여 사용이 가능하다. 이 기법을 익히기 전에 먼저 알고가야할 것들이 있다. 바로 plt와 got.plt = procedure linkage table, got = global offset table plt란?사용자가 만든 함수는 plt를 참조할 필요가 없지만 외부 라이브러리에서 가져다 쓸 경우 plt를 참조하게 된다. 예를 들어 우리가 바이너리에서 만든 함수들 (main(), func() 등)은 plt를 참조할 필요가 없다. got란?실..
Format String Bug Format String Bug 포맷 스트링을 이용한 공격 기법으로 printf()함수의 취약점을 이용 ex)fgets(buf, sizeof(buf), stdin);printf(buf); 문자열일 때는 정상적으로 문자열로 인식하지만 서식문자를 넣었을 경우 문자열로 인식하지 않고 서식문자로 인식한다.서식문자를 만나면 메모리의 다음 4byte 위치를 참조해 그 서식문자의 기능대로 출력한다.ex. %d를 입력 -> 메모리 다음 위치에 있는 값을 10진수로 출력 format string 예를 들면, 여기서 "AAAA %p %p %p %p %x %x %x" 를 입력했을 때 printf 호출하기 직전 스택의 상태 중요한 것만 정리해보면 즉, 출력할 때 각 포맷 스트링이 참조하는 것은 출력은 당연히 아래처럼 된다. ..
uaf uaf 디렉토리 uaf.cpp Human 클래스 Man 클래스 Woman 클래스 main case 1 일단 문제 이름도 uaf인 만큼 간단히라도 알고 들어가자. UAF(Use After Free) heap영역에서 할당된(allocated) 공간을 free하고 재사용(reuse)할 때 일어날 수 있는 취약점heap spray와 병행해서 사용 포인트1. uaf2. give_shell m,w 할당됐던 자리에 메모리를 집어넣어 give_shell 재사용-> uaf는 free한 메모리를 재사용하는 것이기 때문 순서: case3 -> case2 2번 -> case1 1. case3으로 m, w을 free2. case 2 2번(64bit이기 때문에 4byte주소 2번 넣음)으로 introduce주소를 give_she..
cmd2 cmd2 cmd2.c 포인트1. echo 명령어2. command 명령어3. read 명령어 삽질 1 filter함수에 걸리진 않지만 /bin/cat hey3를 실행한 결과값을 출력하는 것이기 때문에 Permission denied 된다. 삽질 2이것 또한 filter함수에 걸리진 않지만 \57bin\cat hey3 출력 후, system("57bin57cat") 실행 실패 * hey3 : flag의 심볼릭 링크 삽질 3 echo -e 를 써서 바로 입력도 가능한데 쉘이 -e옵션을 인식하지 못한다. 정답 1. echo 명령 사용해서 /bin/cat flag 실행한 결과 출력 $(echo "\57")bin$(echo "\57")cat fla* 그대로 출력된다. "\57"가 '/'로 변경된 후, $(echo..
cmd1 cmd1 cmd1.c 포인트 심볼릭 링크(ln -s) /var/tmp 디렉토리에 flag의 심볼릭 링크를 만들어서 cat으로 출력꿀
lotto lotto lotto.c main 포인트 뭔가 허점있는 코드 lotto의 모든 문자를 맞춰야 match가 6이 되는게 아니고 한 문자가 6번 맞으면 됨즉, 같은 문자로 6byte 입력해서 lotto한글자만 맞추면 match가 6이 된다.어떻게 맞추냐고? 때려맞추자 (lotto범위: 1~45) 꿀
blackjack blackjack 백만장자가 되면 flag 포인트1. betting 함수 2. 정수 overflow betting 함수 betting 함수를 보면gameBet > gameCash일 때 경고만 주고 다시 입력하게 한 후다시 검사를 하지 않아 그 돈으로 배팅을 할 수 있게 된다. 정답 1. betting 함수를 이용해 배팅금액을 크게 한 뒤 게임을 이긴 후 획득 2. 정수 overflow를 이용해 게임에서 진 후 배팅한 금액만큼 획득ex. -1000000000 배팅 -> -(-1000000000) 획득 참고 1. system("cls") : 함수를 만나기 전까지 출력한 것을 모두 없앤다. 메뉴 출력 바로 위에 해주면 깔끔 2. 정수 overflow : 정수의 범위를 벗어나면 입력된 숫자가 음수(쓰레기값)로 ..
coin1 coin1 이건 그냥 N에 이진 탐색하면 딱 되는 C의 개수가 나온다. 포인트N의 반씩 나눠가며 무게를 비교한다.ex. N=123일 때,0~60, 61~122 나눠서 0~60의 무게 비교 후 정상이면 61~122를 또 반씩 나눠가며 비교 결과 꿀