일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Button
- DART
- 앱
- 안드로이드
- CustomScrollView
- drift
- LifeCycle
- Dialog
- binding
- data
- 앱바
- viewmodel
- tabbar
- appbar
- 테스트
- textfield
- livedata
- 계측
- Flutter
- TEST
- android
- intent
- textview
- Compose
- Navigation
- activity
- Kotlin
- Coroutines
- ScrollView
- scroll
- Today
- Total
목록전체 글 (346)
Study Record
※ 사용할 함수 - 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(..
포맷 스트링 개요 및 메모리 값 바꾸기 1. 포맷 스트링 개요 ※ 포맷 스트링? 일반적으로 사용로부터 입력을 받아들이거나 결과를 출력하기 위하여 사용하는 형식이다. 매개변수 형식 매개변수 형식 %d 정수형 10진수 상수(integer) %c 문자 값(char) %f 실수형 상수(float) %s 문자열 %lf 실수형 상수(double) %o 8진수 양의 정수 %n * int(총 바이트 수) - 이전까지 쓴 문자열의 바이트 수 %u 10진수 양의 정수 %hn %n의 반인 2바이트 단위 %x 16진수 양의 정수 포맷 스트링 형식 중 %x 는 버그가 있는 함수와 사용됐을 때 예상치 못한 동작을 하는 경우가 있다. 바로 printf("%x") 이다. 다음과 같은 코드(format.c)가 있다고 해보자. #inc..
버퍼 오버플로우 공격 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점이다. 보통 개발된 프로그래밍 언어의 버퍼 오버플로우에 취약한 함수가 있는 경우 데이터가 지정된 크기의 공간보다 커서 해당 메모리 공간을 벗어나 의도치 않은 동작이 실행될 수 있는 공격으로, 결론적으로 버퍼 공간의 크기보다 큰 데이터를 저장하게 해서 일어나는 오버플로우(Overflow)를 이용한 공격이다. 버퍼 오버플로우 공격 중, 스택 오버플로우는 스택공간에서 버퍼 공간의 크기보다 큰 데이터를 저장하게 해서 의도치 않은 동작(악성코드 실행)이 실행되게 한다. 예시로 Hake Me 의 level9 단계 중 /usr/bin/bof 소스 코드를 보자. #include #include #include // /usr/b..
7단계 : /bin/level7 ☞ /bin/level7 어셈블리어 분석 (gdb /bin/level7) 0x08048454 : push %ebp 0x08048455 : mov %esp,%ebp 0x08048457 : sub $0x8,%esp 0x0804845a : and $0xfffffff0,%esp 0x0804845d : mov $0x0,%eax 0x08048462 : sub %eax,%esp 0x08048464 : sub $0xc,%esp 0x08048467 : push $0x64 0x08048469 : call 0x8048344 0x0804846e : add $0x10,%esp ==> malloc(0x64) 0x08048471 : mov %eax,0xfffffffc(%ebp) # 0xfffffff..
1. 진법 전환 2진수 ↔ 10진수 10011(2) = 1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 0 + 2^3 + 1 * 2^4 = 19(10) 19(10) = 19 / 2 : 9 --- 1 ↑ 9 / 2 : 4 --- 1 ↑ 4 / 2 : 2 --- 0 ↑ 2 / 2 : 1 --- 0 ↑ = 1011(2) 2진수 ↔ 8진수 3글자씩 나눠서 읽는다. 101001110(2) = 101 | 001 | 110 = 5 | 1 | 6 = 516(8) 516(8) = 5 | 1 | 6 = 101 | 001 | 110 = 101001110(2) 2진수 ↔ 16진수 4글자씩 나눠서 읽는다. 101001110(2) = 0001 | 0100 | 1110 = 1 | 4 | E = 14E(16) 14E(16) =..