일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- textfield
- appbar
- data
- android
- 앱바
- binding
- Dialog
- ScrollView
- Navigation
- CustomScrollView
- DART
- livedata
- activity
- LifeCycle
- 계측
- drift
- Flutter
- viewmodel
- textview
- TEST
- Compose
- Kotlin
- 테스트
- scroll
- 안드로이드
- 앱
- intent
- tabbar
- Button
- Coroutines
- Today
- Total
목록리버싱 (23)
Study Record
포맷 스트링 개요 및 메모리 값 바꾸기 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) =..
7단계 → 8단계 ※ 7단계(level7) 패스워드 : "come together" ☞ 기초개념 - 진법 전환 https://laustudy.tistory.com/63 ㉮ hint 를 본다. # cat hint ㉯ /bin/level7 을 실행해봤다. hint 를 생각해보면 2진수를 10진수로 바꿔야하고 패스워드는 가까운 곳에 있다고 했다. ㉰ "--_--_- --____- ---_-__ --__-_-" 가 "-"는 1 이고 "_" 는 0인 2진수 문자열이라고 생각해볼수도 있을 것 같다. # man ascii 구분 표기 예 아스키문자열 2진수(Bin) 1101101 1100001 1110100 1100101 10진수(Dec) 109 97 116 101 mate 16진수(Hex) 6d 61 74 65 ma..
readelf CMD - https://devanix.tistory.com/186 - ELF 파일의 정보를 확인할 때 사용한다. ☞ ELF 헤더 -h, --file-feader : ELF 파일 헤더 -l, --program-header, --semgents : 프로그램 헤더 -S, --section-headers, --sections : 섹션 헤더 -e, --headers : 위의 세가지 헤더 ☞ ELF 정보 출력 -s : 심볼 데이터 -r : 재배치 정보 -d : 동작 세그먼트 -V : 버전 섹션 -A : 아키텍쳐 의존 정보 -a : 모든 헤더 정보 ☞ 디버그 섹션 출력(DWARF2) -wl : line (.debug_line) -wi : info (.debug_info) -wa : abbrev (.d..
5단계 : /usr/bin/level5 ☞ /usr/bin/level5 어셈블리어 분석 (gdb /usr/bin/level5) 0x0804842c : push %ebp 0x0804842d : mov %esp,%ebp 0x0804842f : sub $0x8,%esp 0x08048432 : and $0xfffffff0,%esp 0x08048435 : mov $0x0,%eax 0x0804843a : sub %eax,%esp 0x0804843c : sub $0x8,%esp 0x0804843f : push $0x180 0x08048444 : push $0x8048580 # /tmp/level5.tmp 0x08048449 : call 0x804832c 0x0804844e : add $0x10,%esp ==> cre..
1단계 → 2단계 ※ 1단계(level1) 패스워드 : "level1" ㉮ hint 를 확인한다. # cat hint ㉯ find 명령어로 소유자가 level2 이고 setuid 비트가 걸려있는 파일을 찾는다. # find -user level2 -perm -4000 2>/dev/null ㉰ /bin/ExecuteMe 를 실행시켜본다. # /bin/ExecuteMe 레벨2의 권한으로 한가지 명령어를 실행시킬 수 있다면 가장 강력한 명령어는 "bash" 이다. bash 명령어로 레벨 2의 쉘을 획득하여 패스워드를 확인해볼 수 있다. 2단계 → 3단계 ※ 2단계(level2) 패스워드 : "hacker or cracker" ㉮ hint 를 확인한다. # cat hint ㉯ find 명령어로 다음 단계(lev..