
EasyBoF를 실행한 모습니다. 전 문제인 HelloBoF와 비슷한 모습이다. gdb기능을 이용해보자. ni를 통해 넘어가다 main+77을 지나니 입력을 할 수 있는 창이 떠서 중요함수 임을 알았다. 같은 방법으로 process 내부에서 read부분을 지나면 입력창이 떠서 브레이크포인트를 걸어놓고 이 부분이 핵심임을 알았다. 버퍼 구분을 위해서 aaaaaaaaaaaaaaaaaa을 입력해보았다. 주소 0xff8ad7d4에 내가 입력한 값이 들어간 것을 확인했고 , 상세 값을 확인하기 위해서 주소값으로 접근해 보았다. x/20wx 0xff8ad7d4 내가 입력한 값은 a 8개였다 . 0x61로 변환되어서 18개가 들어간 것을 확인 할 수 있었고, 거꾸로 들어간 순서서 역시 확인 가능했다. 이후 남아있는 ..

1: mov dl, BYTE PTR[rsi+rcx] // 2: xor dl, 0x30 // XOR 0x30(2진수 0011 0000) 3: mov BYTE PTR[rsi+rcx], dl // 4: inc rcx // rcx 1증가 5: cmp rcx, 0x19 // rcx 값과 ox19비교 ( 6: jg end // 위 조건 만족 시 7: jmp 1 // 아닐 시 반복 수행 0x400000 부터 0x40018 까지 XOR 0x30을 반복 하는 코드 이다. 바꾼 코드 0x57 = W 0x65 = e 0x6c = l 0x63 = c 0x6f = o 0x6d = m 0x65 = e 0x20 = (space) Welcome() 0x74 = t 0x6f = o 0x20 = (space) 0x61 = a 0x73 ..

1. 컴퓨터 구조(Computer Architecture) 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법을 말합니다. 2. 폰 노이만 구조 초기 컴퓨터 과학자 중 한명인 폰 노이만은 컴퓨터에 연산, 제어, 저장의 세 가지 핵심 기능이 필요하다고 생각했습니다. 근대의 컴퓨터는 연산과 제어를 위해 중앙처리장치(Central Processing Unit, CPU)를, 저장을 위해 기억장치(memory)를 사용합니다. 그리고 장치간에 데이터나 제어 신호를 교환할 수 있도록 버스(bus)라는 전자 통로를 사용합니다. 2-1. 중앙처리장치(연산) CPU는 프로그램의 연산을 처리하고 시스템을 관리하는 컴퓨터의 두뇌입니다. 프로세스의 코드를 불러오고, 실행하고, ..

리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트로 구분합니다. 1. 코드 세그먼트(Code Segment) 실행 가능한 기계 코드가 위치하는 영역으로 텍스트 세그먼트(Text Segment)라고도 불림. 프로그램이 동작하려면 코드를 실행할 수 있어야 하므로 이 세그먼트에는 읽기 권한과 실행 권한이 부여됩니다. 반면 쓰기 권한이 있으면 공격자가 악의적인 코드를 삽입하기가 쉬워지므로, 대부분의 현대 운영체제는 이 세그먼트에 쓰기 권한을 제거합니다. 아래에서 정수 31337을 반환하는 main함수가 컴파일되면 554889e5b8697a00005dc3라는 기계 코드로 변환되는데, 이 기계 코드가 코드 세그먼트에 위치하게 됩니다. int main() { return 31337; } 2. 데이터 세그먼트(D..

[이 문제는 동아리자체 제작 문제입니다. ] [이 문제를 풀기 전 꼭 HelloBoF에 권한을 주어야 합니다. ] HelloBoF라는 문제로 Docker내에서 자체 실행시켰습니다. 이 문제는 접근권한이 없는 flag를 읽는 문제입니다. exploit을 통해서 shell을 탈취한 뒤, flag을 읽으면 됩니다. 도커를 통해 서버를 실행시켜 접근한 모습 문제 내용인 HelloBoF로 접근해보겠다. 문제폴더에 접근하니 hellobof라는 파일이 보인다. 실행시켜 보았다. 아무값이나 입력해 보았을 때, Nop... 이라면서 좋지 않은 결과가 나왔다. 문제는 여기까지 알아보고, 이 문제를 풀면서 새로운 기능들을 알게 되었다 바로 tmux와 gdb라는 것이다. 바로 보여주겠다. 먼저 tmux이다. 단축키키 tmux..
tmux 핵심 기본 조작키 : Ctrl + b 세션 이름 정하기 : tmux new -s 세션이름명 세션 종료 : Ctrl + d 세션 나오기 : Ctrl + b - d 세선 확인하기 : tmux ls 세션 불러오기 : tmux attach -t 세션 이름명 세션 움직이기 : Ctrl + b - 키보드 세션 창 크기 조절 : Ctrl + b - Ctrl + 키보드 좌우 분할 : Ctrl + b - " 상하 분할 : Ctrl + b - % GDB 기본 명령어 gdb 바이너리명 프로그램 시작(올리디버거에서 Ctrl + F2 기능과 같음) : start 프로그램 인자 값으로 시작 : run $(python3 -c "print(10)") - 인자값으로 10을 주고 프로그램 시작 Step Over(올리디버거에서 ..

파일 실행 시 위와 같은 화면을 얻을 수 있고 serial값을 입력 시 잘못된 정보인 거 같으면 꺼지는 점을 발견했다. 올리디버거로 파일을 실행 시 빈칸의 창이 뜬다. 추후 어떤 부분을 지나면 화면에 출력되지 않을까 하는 추측으로 진행해보았다. 먼저 어디서 실행이 되나 찾아보기 위해서 계속 f8을 눌러보았다. 00401481부분에서 프로그램이 걸리는 부분을 확인했다. F7을 통해 메인함수로 접근했다. 주석 부분에는 내가 좀 낙서를 많이 적어서 어지럽지만 초기화면은 저렇지 않았다. 이 부분을 지나자 , 화면에 출력되었다. 마찬가지로 이 부분 통과 시 serial이 출력되었다. 하지만 입력은 할 수 없었다. 계속해서 진행해 보았다. 401104 부분을 지날 때 값을 입력해야만 넘어갈 수 있게 화면이 바뀌었다..

최초 프로그램을 실행하면 이런 창이 뜨게 된다. 올바른 값을 넣으면 풀 수 있는 문제 인 것 같다. 올리디버거로 실행해 보자. 먼저 올리디버거로 접근 후 F8을 통해 실행되는 부분까지 가보았다. 0040152B에서 실행되는 것을 확인했고, 아까와 같은 창이 떴다. 아무 값이나 입력해 보았다. 바로 wrong word!가 뜬 후 종료된다. 유일한 단서인 main으로 접근해봤다. 메인에서 프로그램이 실행되는듯한 함수를 발견했다. CreateWindowExA, ShoWWindow, GetMessageA 등등 이 후 계속해서 F8로 진행 하였을 시, 무한루프에 빠지는 부분을 발견했다. 여기서 저번에 풀었던 문제와 유사함을 느꼈고, GetDlgltemTextA라는 저번문제에서도 풀었던 함수가 똑같이 있었다. 여기..

1. SSTI 이란 SSTI(Server-Side Template Injection) 취약점은 웹 템플릿 엔진의 취약점을 이용한 공격을 말한다. 공격자가 서버 측 템플릿에 악성 코드를 주입할 수 있는 보안 취약점의 일종으로, 이는 애플리케이션의 권한으로 서버 측에서 실행될 수 있습니다. 이로 인해 정보 노출, 권한 상승, 원격 코드 실행과 같은 다양한 유형의 공격이 발생할 수 있습니다. 2. Template 구문 SSTI는 웹 템플릿마다 사용할 수 있는 페이로드가 다르니 하나씩 대입해 결과 값을 통해 페이로드를 찾는 것이 좋다.

chall04문제는 "frida"를 send로 보내라 처음엔 잘 이해가 가지 않았다. 일단 디컴파일부터 해보았다. 역시 MainActivity에 있었고, 함수를 해석해 보았다. arg3의 값이 frida와 같다면, completeArr 배열의 3번 인덱스에 1을 할당하는 함수였다. 이때 completeArr배열은 앞 문제에서 보았던 배열이다 https://hwan2story.tistory.com/19 FridaLab 2번 문제 풀이 저번 시간에 이어서 , 2번 문제를 풀어보려 한다. 2번 문제는 Run chall02()이다. 실행을 시키면 문제를 해결할 수 있겠지?라는 생각으로 접근해보려 한다. 먼저 검색기능을 활용해 chall02() 함수를 찾 hwan2story.tistory.com 따라서 strin..

chall03()을 true로 바꿔라?라는 문제로 추측하고 들어가 보았다. 저번 문제를 경험 삼어 chall03함수를 금방 찾았다. return이 false로 되어있는것을 확인되었다. 이것을 true로 바꾸면 될 꺼 같은 문제였다. Frida문법에 대해서 서치해 보면서 앱에서 정의된 메서드의 구현 내용을 재작성하는 내용을 찾았다. https://hwan2story.tistory.com/18 Frida 문법 1. Java.perform 현재 스레드가 가상머신에 연결되었는지 확인하고 function을 호출한다. Java.perform(function(){ }); 2. Java.use(ClassName) - 메소드 후킹 시 사용한다. - Method가 static으로 설정이 되어 있을 경우 hwan2story..

x86 레지스터 x86 레지스터 에서는 총 8개의 32비트 레지스터가 있으며, 각 레지스터는 다음과 같은 역할을 합니다. EAX: Accumulator register. 산술 연산과 논리 연산에 사용됩니다. EBX: Base register. 주로 데이터의 베이스 주소를 저장하는 데 사용됩니다. ECX: Count register. 반복문에서 카운터로 사용됩니다. EDX: Data register. 입출력과 곱셈, 나눗셈 연산에서 사용됩니다. ESI: Source Index register. 데이터의 소스 주소를 저장합니다. EDI: Destination Index register. 데이터의 목적지 주소를 저장합니다. EBP: Base Pointer register. 지역 변수와 함수 호출에 사용됩니다...