본문 바로가기

전체 글

(71)
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씩된 문자열 꿀
ARM Assembly 간단 정리 1. Thumb 모드, ARM 모드 - Thumb 모드 레지스터 : R0 ~ R7 (8개) 기계어코드 길이 : 16bit(2byte) - ARM 모드 레지스터 : R0 ~ R15 (16개) 기계어코드 길이 : 32bit(4byte) Thumb ARM 전환 : BLX/BX 등 X로 끝나는 분기문 명령 2. 레지스터 R0 ~ R12 : 범용 레지스터, 인자값 및 임시 계산 저장소 등 R13(SP) : Stack Pointer, x86의 ESP와 비슷한 역할 R14(LR) : Link Register, 함수 호출 전 LR에 리턴 주소 저장하고 점프 (함수 호출시 리턴주소 스택 활용X) R15(PC) : 다음 실행할 코드의 주소 저장, x86의 EIP 레지스터와 동일한 역할 3. 함수 호출 규약 x86에서는 c..
leg leg leg.asm leg.c ssh leg@pwnable.kr -p2222 하면 쉘이 나온다. 디렉토리 목록을 봅시다. leg 한 번 실행해보자. 조건key1()+key2()+key3() 값이 key와 동일 이 어셈블리는 이제껏 봐왔던 intel환경과는 다른 ARM 어셈블리이다.자세한 건 정리했던 글 참조 key1 함수 pc : 다음에 실행해야 할 명령어의 메모리 주소{r0}={r3}=pc=0x8ce0 key2 함수 r3 값=0x8d06r0 값 = r3값+4 =0x8d0a key3 함수main lr레지스터 : ret 같은 역할lr 값=0x8d80 왜 r0? 결국 r2 값(key3)+=r4 값(key1)+r3 값(key2) r2 값과 r3 값(scanf 한 수) 비교 0x8ce0+0x8d0a+0x8d8..