본문 바로가기

시스템/pwnable.kr

(14)
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를 또 반씩 나눠가며 비교 결과 꿀
shellshock shellshock 디렉토리 shellshock.c 포인트 1. 환경 변수 설정하는 과정에서 취약점이 발생 "() {"로 시작하는 문자열을 시스템 환경변수에 저장하면 동일한 이름을 가진 함수로 선언됨 이 과정에서 함수 선언문 끝에 임의의 명령어를 추가로 삽입할 경우, bash가 이 후 코드를 무시하거나 오류를 발생하지 않고 추가로 삽입한 명령어를 계속 실행 2. "/home/shellshock/bash"는 서브쉘 bash를 실행시킴으로 서브쉘이 실행되는게 다른 명령어 실행되는 거랑 뭔 상관? bash의 동작 원리 1. bash 실행 2. bash 환경변수 초기화 -> 여기서 취약점 발생 3. bash shell prompt 출력 4. 명령어 기다림 5. (명령어 수행할 경우) 명령어를 문자열로 저장해 해..
mistake mistake 디렉토리 소스 코드 일단 실행해보면,끊임없이 숫자를 입력받는다. 이 문제는 연산자 우선순위에 관한 문제다. >가 =보다 우선순위가 높다. 즉, 먼저 실행된다. 적용되는 곳은 두 곳 -> 이 명령문은 신경 쓸 필요X 주요 포인트 1. if("/home/mistake/password"파일의 파일 기술자 false 2. fd에 false(0) 저장됨 => 0은 stdin의 파일 기술자 3. 즉, read(0,pw_buf,PW_LEN) 실행 4. 입력한 문자열의 xor함수 실행후의 값과 scanf로 입력받은 것과 비교 -> xor함수 후의 문자열은 사실상 각 인덱스에 해당하는 요소의 아스키 코드 값이 +1씩된 문자열 꿀