![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkBu5c%2Fbtq0TvrKUA8%2Fiuvckw4yTLr0WnBshQloA1%2Fimg.png)
[FTZ] 해커스쿨 FTZ level 3
2021. 3. 23. 20:24
Wargame/Hackerschool FTZ
hint를 확인한 결과입니다. 위 소스코드를 분석하면 다음과 같습니다. int main(int argc, char **argv){ 우선 인자값을 받습니다. strcpy( cmd, "dig @" ); strcat( cmd, argv[1] ); strcat( cmd, " version.bind chaos txt"); cmd = "dig @"+"argv[1](우리가 입력한 값)"+" version.bind chaos txt" system( cmd ); 그리고 system()를 통해 cmd의 값을 실행합니다. 소스코드를 통해 "아래의 힌트를 참고해서 autodig에 인자값을 전달해줘야 함"을 짐작할 수 있습니다. 그 다음 autodig 파일을 찾기 위해 find 명령어를 사용합니다. find / -name au..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMJP2V%2Fbtq0UcyG70F%2FKKkjXh4zE1Ngc7b3BgdvGk%2Fimg.png)
[FTZ] 해커스쿨 FTZ level 2
2021. 3. 23. 20:17
Wargame/Hackerschool FTZ
문제 풀이 방법 : Vim 편집기 실행 -> level3의 권한으로 쉘 명령어 입력 level 3 권한에 setuid가 걸린 파일이 있는지 찾기 위해 find 명령어를 사용합니다. find / -user level3 -perm -4000 2>/dev/null Find 명령어로 찾은 파일인 /usr/bin/editor를 실행하니, vim 편집기가 실행되는 것을 알 수 있습니다. 이때, vim 편집기가 Hint 상의 텍스트 편집기임을 알 수 있습니다. 힌트의 내용처럼 Vim 편집 중 쉘로 빠져나가지 않고 외부명령어를 실행해보았습니다. : !my-pass Level 3 권한으로 실행 중인 상태에서 My-pass를 입력하니 level 3의 패스워드가 나왔습니다. 참고 : vim 쉘 빠져나가지 않고 명령어 실행 ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtibDV%2Fbtq0TuTVBfV%2FkQzq5XNB32rpL1B0jVoOfk%2Fimg.png)
[FTZ] 해커스쿨 FTZ level 1
2021. 3. 23. 19:56
Wargame/Hackerschool FTZ
문제 풀이 방법 : #find 명령어 #SetUID→권한변경 조건에 맞는 '파일을 찾기 위해' find 명령어를 이용합니다. find / -user level2 -perm -4000 2>/dev/null 다음과 같이 /bin/ExecuteMe를 실행하여 my-pass(*해당 계정의 비밀번호를 획득하는 FTZ 명령어)를 제외한 명령어를 사용할 수 있음을 확인하였습니다. level2 권한으로 bash를 실행시켜 my-pass 명령어를 입력하는 방법으로 암호를 획득하였습니다. 참고 : http://logonluv.blogspot.com/2015/02/find-perm.html 리눅스 find 명령어 옵션 중 -perm linux에서 find명령어의 옵션 중 -perm에 관한 설명입니다. 특정 실행권한을 찾을 ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAwrDr%2Fbtq0HahFBmd%2F0YoMbTQNK8gZh831i5IB7k%2Fimg.png)
[Pwnable] PLT, GOT
2021. 3. 21. 20:48
Hacking/Pwnable
PLT, GOT example4의 디스어셈블리 결과를 보면 puts와 scanf 함수를 호출할 때 해당 함수의 라이브러리 코드 주소로 바로 점프하지 않고 PLT 영역으로 점프하는 것을 확인할 수 있다. Procedure Linkage Table(PLT)는 외부 라이브러리 함수를 사용할 수 있도록 주소를 연결해주는 역할을 하는 테이블이다. Global Offset Table(GOT)는 PLT에서 호출하는 resolve 함수를 통해 구한 라이브러리 함수의 절대 주소가 저장되어 있는 테이블이다. ASLR이 적용되어 있는 환경에서, 동적으로 라이브러리를 링크하여 실행되는 바이너리(Dynamically linked binary)는 바이너리가 실행될 때마다 라이브러리가 매핑되는 메모리의 주소가 변한다. 따라서 PL..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLjaUx%2Fbtq0MVRFFIp%2FkCrKrWMw5uKPeEHo0ZQ8gk%2Fimg.png)
[HITCON training] lab4 ret2libc
2021. 3. 21. 20:45
Wargame/etc
1. 문제 NX 만 걸려있어 RTL 문제임을 알 수 있다. 주소를 10진수 형태로 입력하면 그 주소의 내용을 출력해준다. 만약 이중 포인터 값을 넣어주면 또 다시 주소를 출력할 것이다. 여기서 뭔가 leak이 될 것 같은 강한 예감이 든다..! 그리고 메시지를 입력하라고 하고 입력한 메시지를 출력해주는 형태이다. 처음에 주소를 10진수 형태로 입력받고, 16진수로 변환해준 다음 이중포인터인 v8에 저장한다. 그리고 v8을 인자로 하는 See_something 함수가 실행된다. See_something 함수이다. 입력받은 주소의 내용을 %p 형태로 출력한다. Print_message 함수이다. 여기서 bof 취약점이 발생한다. dest 버퍼의 크기는 56 byte 지만, 256 byte 짜리 src를 de..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHWKXU%2Fbtq0zZ2zsdQ%2FKJ6LDzD8amOmJyZZpRluY0%2Fimg.png)
[Pwnable] Lazenca - RTL(x64) 정리
2021. 3. 21. 01:49
Hacking/Pwnable
RTL(Return to Libc) RTL이란 Return address 영역에 공유 라이브러리 함수의 주소로 변경해, 해당 함수를 호출하는 방식이다. 해당 기법을 이용해 NX bit(DEP)를 우회할 수 있다. 이번엔 x64에서 RTL을 실습해볼 것이다. x86과 x64 차이는 쉽게 말해 x86은 32비트, x64는 64비트인것으로 구분을 하면 된다. 그렇다면 이번에도 먼저 함수 호출 규약에 대해 공부해보자! Calling Convention System V AMD64 ABI Solaris, Linux, FreeBSD, macOS 에서 "System V AMD64 ABI" 호출 규약을 사용하기 때문이다. Unix, Unix 계열 운영체제의 표준이라고 할 수 있다. Calling convention fe..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlwAs0%2Fbtq0AqyqHzu%2Fib0wlM7D0j1v5whIbkUnu1%2Fimg.png)
[Pwnable] Lazenca - RTL(x86) 정리
2021. 3. 20. 21:48
Hacking/Pwnable
RTL(Return to Library) RTL이란 Return address 영역에 공유 라이브러리 함수의 주소로 변경해, 해당 함수를 호출하는 방식이다. 해당 기법을 이용해 NX bit(DEP)를 우회 할 수 있다. RTL 이해하기 위해 잠깐 Calling Convention을 공부하고 가자! Calling Convention Cdecl(C declaration) 해당 호출 규약(Calling Convention)은 인텔 x86 기반 시스템의 C/C ++ 에서 사용되는 경우가 많다. 기본적으로 Linux kernel에서는 Cdecl 호출 규약(Calling Convention)을 사용한다. Calling convention features 인자 전달 방법 Stack을 이용 인자 전달 순서 오른쪽에서 ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvtyJS%2Fbtq0Ao1FSAw%2F1qY3E7aHkLI1ctacbKTJL1%2Fimg.png)
[HackCTF] RTL_World
2021. 3. 20. 20:19
Wargame/HackCTF
1. 문제 파일을 실행시키니 뭐가 굉장히 많이 나왔다. 일단 1번을 클릭하자, 문제에 적용된 보호기법들이 나왔다. NX bit가 적용된 것으로 보아 스택에 쉘을 넣어 실행하지는 못할 것으로 보인다. 그리고 2,3,4 번은 돈(Gold)과 관련된 것들이었다. 이번엔 ida로 파일을 열어보았다. 메뉴 선택 > switch문 별로 나눠지는 것 같다. 그 중에서도 case 5(Attack)에 해당하는 것이 눈에 띄었다. buf에 0x400u 즉, 1024 byte 만큼 입력을 받고 있는데, buf의 크기는 고작 128 byte이다. 따라서 bof를 일으켜 RET 값을 변경할 수 있을 것이다. 그런데, NX 보호 기법이 적용되어있기에 그것을 우회하기 위해 실행 가능한 영역에 있는 코드 즉, 외부 라이브러리 함수를..