SISS
Bandit4 → Bandit5
Bandit4 → Bandit5 inhere 디렉토리 안의 'humman-readable' 파일에 패스워드가 들어있다고 한다. bandit4로 로그인 후, inhere 경로로 이동해주고, ls 명령어로 어떤 파일이 있는지 찾아보았는데 무려 10개나 있다. 첫번째 파일을 cat으로 열어봤더니 읽을 수 없는 글자들만 나타난다. 10개의 파일을 모두 열어보아도 되지만 너무 시간낭비니, 어떤 파일이 읽을 수 있는 파일인지 알아보기 위해 file 명령어를 이용해주었다. file 명령어를 이용해주면 파일의 종류를 출력해준다. 현재 경로의 모든 파일(*)의 종류를 살펴보았더니 -file07만이 아스키 텍스트로 되어있다. -file07을 열어주면 패스워드 등장! bandit4 → bandit5 PW : koReBOKu..
Bandit3 → Bandit4
Bandit3 → Bandit4 home 디렉토리 안의 inhere 디렉토리 안에 있는 숨겨진 파일에 패스워드가 있다고 한다. ls 명령으로 home 디렉토리를 살펴봤더니 inhere이라는 디렉토리가 보인다. inhere 디렉토리로 경로를 옮겨준다. 보통의 경우 디렉토리 안에 있는 파일을 보기 위해서는 ls 명령만 입력해줘도 되지만, 숨겨진 파일까지 모두 보기 위해선 -a, 즉 all 옵션을 함께 입력해주어야 한다. .hidden 이라는 이름의 파일이 보인다.이 파일을 열어주었더니 패스워드가 등장했다. bandit3 → bandit4 PW : pIwrPrtPN36QITSp3EQaw936yaFoFgAB
Bandit1 → Bandit2
Bandit1 → Bandit2 home 디렉토리 안에 있는 - 파일에 패스워드가 들어있다고 한다. bandit1으로 로그인을 해주고, ls 명령으로 파일들을 살펴보니 - 파일이 있다. - 대시는 보통 옵션을 넣어줄 때 사용하기 때문에 그냥 cat - 명령을 입력하면 읽을 수 없다. - 파일을 실행시키는 것처럼 해서 cat ./- 명령을 입력해주어야 읽을 수 있다. 패스워드가 등장했다. Bandti1 → Bandit2 PW : CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9
Bandit0 → Bandit1
Bandit0 → Bandit1 home 디렉토리 안에 있는 readme 파일을 읽으면 패스워드가 있다고 한다. ssh를 이용하여 bandit0으로 로그인을 해준다. ls 명령어로 안에 있는 디렉토리와 파일을 살펴보니 readme라는 파일이 있다.cat 명령어로 readme 파일을 읽어보았더니 패스워드가 등장했다. 쉽게 클리어! bandit0 → bandit1 PW : boJ9jbbUNNfktd78OOpsqOltutMc3MY1
조건분기명령어 JG JL 상태레지스터 SF OF
JG : Jump Greater ( ≒ JA)JL : Jump Less ( ≒ JB) : 비슷하지만 비교하는 데이터가 다름. JG, JL은 부호가 있는 부호비트, JA, JB는 부호가 없는 비트를 비교함. # 부호 비트 : 1 = 존재 → 가장 높은 비트가 1이라면, 즉 부호가 있는 것이라면 -로 판단. EAX에는 -4를, EBX에는 1을 넣고 둘이 비교하는 어셈블리를 작성한다. : MOV EAX, -4 / MOV EBX, 1 / CMP EAX, EBX # EAX에 들어가있는 값? : EAX에는 현재 FFFFFFFC 라는 값이 들어가 있는데, F는 16진수로 16, 2진수로 하면 1111이므로, 이를 이진수로 쓰면 1111 1111 1111 1111 1111 1111 1111 1100 이렇게 되고, 이는..
조건분기명령어 JNE, JA, JB 상태 레지스터 CF, JA JB에 N과 E 붙이기
1. 조건분기명령어 JNE, JA, JB 상태레지스터 CF 1) JNE(Jump if Not Equal), JNZ(Jump if Not Zero) (둘이 같이 사용함) : 같지 않을 때, 0이 아닐 떄 점프한다. MOV EAX, 1 : EAX 레지스터 안에 1을 넣어준다. CMP EAX, 1 : EAX와 1을 비교한다. 두 값이 같기 때문에 Zero Flag 값이 1이 된다. JNE 401005 : 두 값이 같기 때문에 401005로 점프하지 않는다. CMP EAX, 0 : EAX와 0을 비교한다. 두 값이 다르기 때문에 Zero Flag 값이 0이 된다. JNE 401005 : 두 값이 다르기 때문에 4010005로 점프할 수 있다. 2) JA (Above), JB :(Below) CMP EAX, 0 ..
조건분기명령어 JZ(JE) 상태레지스터 ZF
JMP 주소 -조건을 가지는 JUMP문 # 상태레지스터 : 1 bit - 상태에 따라서 점프의 조건이 결정됨. * MOV EAX, 0으로는 Z Flag가 변하지 않음. 1) JZ 주소 : 이전에 내렸던 명령으로 계산을 해서 값이 Zero가 될 때 JMP가 작동 EAX 값을 1로 만들고 1만큼 증가시키면 EAX의 값은 2가 된다. JZ는 이전 명령의 계산 값이 0이 되어야 Jump할 수 있는데, EAX의 값은 2이므로 상태레지스터 ZF의 값은 0, 즉 EAX의 값이 0이 아니므로 Jump 명령을 실행할 수 없다. (JZ와 JE는 그 의미는 다르지만 같이 사용할 수 있기 때문에 JZ 명령어를 입력해도 디버거 상에선 JE로 나타난다. ) 이번엔 EAX의 값을 1씩 감소하여 0으로 만들면 ZF의 값이 1로 변경..
메모리 주소지정방식
Offset : 기준 주소에서 얼만큼 떨어진 곳에 떨어진 메모리를 지칭 (변위차를 나타내는 정수형) 1) char a[6] = {0, 1, 2, 3, 4, 5}; : Offset으로 값을 이용해보자. # 기준 주소 : 402000. 총 6 바이트를 사용할 것 우선 레지스터 EBX에 기준 주소값인 402000을 넣어주고, 다음과 같은 어셈블리를 작성한다. 기준 주소를 시작으로 주소값에 Offset을 더해 값을 0부터 5까지 넣어준다. 2) char a[3] = {0, 1, 2}; : Offset으로 레지스터를 이용해보자. 우선 ECX에 0 값을 저장해주고, 402000 주소에서 ECX의 값만큼 주소를 이동하여 CL값을 넣어준다. 첫 번째로 어셈블리를 실행하면 ECX의 값이 0이기 때문에 402000 주소의..