목록분류 전체보기 (186)
Iriton's log
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 스택 버퍼 오버플로우 스택의 버퍼에서 발생하는 오버플로우 버퍼 CS에서 버퍼는 데이터가 목적지로 이동되기 전에 보관되는 임시 저장소의 의미로 사용된다. 데이터 처리속도가 다른 두 장치가 있을 때, 이 둘 사이에 오가는 데이터를 임시로 저장해 두는 것은 일종의 완충 작용을 한다. 이해를 돕기 위해 키보드에서 데이터가 입력되는 속도보다 데이터를 처리하는 속도가 느린 프로그램이 있다고 가정해 보자. 사 이에 별도의 장치가 없다면 키보드의 입력 중에 프로그램에서 수용되지 못한 데이터는 모두 유실될 것이다. 이런 문제를 해결하고자 수신 측과 송신 측 사이에 버퍼라는 임시 저장소를 두고 이를 통해 간접적으로 데이..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. 함수 호출 규약 함수의 호출 및 반환에 대한 약속을 말한다. 한 함수에서 다른 함수를 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동한다. 그리고 호출한 함수가 반환하면 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나간다. 따라서 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 한다. 또한, 호출자는 피호출자가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 한다. 함수 호출 규약을 적용하는 것은 일반적으로 컴파일러의 몫이다. 컴파일러가 호출 규약에 맞게 코..
Description 입력한 셸코드를 실행하는 프로그램이 서비스로 등록되어 작동하고 있습니다. main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다. flag 파일의 위치와 이름은 /home/shell_basic/flag_name_is_loooooong입니다. 풀이 우선 문제 파일에 있는 c코드부터 봤다. main함수만 보라고 했으니 확인해 봤다. read 함수를 사용하며, 일반입력을 이용한다. 첫번째 인자의 0은 stdin을 의미한다. 강의에서 /tmp/flag처럼 파일 데이터를 읽어냈는데 이때 배운 orw shellcode를 작성해야 할 거 같다. 근데 이전 강의에서 배운 쉘코드를 직접 작성하여 실행하는 것이 너무 복잡할..
*본 포스트는 Dreamhack - Systemhacking Lecture 을 참고하여 작성되었습니다. Shellcode 익스플로잇을 위해 제작된 어셈블리 코드 조각 해커가 rip을 자신이 작성한 쉘코드로 옮길 수 있으면 해커가 원하는 어셈블리 코드를 실행할 수 있게 된다. 어셈블리어는 기계어와 거의 일대일 대응되므로 사실상 원하는 모든 명령을 CPU에 내릴 수 있게 된다. 쉘코드는 어셈블리어로 구성되므로 공격을 수행할 대상 아키텍처와 운영체제에 따라, 그리고 쉘코드의 목적에 따라 다르게 작성된다. orw Shellcode 작성 /tmp/flag 를 읽는 쉘코드를 작성해보자. 참고 systemcall syscall rax arg0 (rdi) arg1 (rsi) arg2 (rdx) read 0x00 uns..
실행 화면은 #0과 같은 프로그램이어서 어김없이 문자열을 찾아서 해당 코드로 이동했다. 0번 문제처럼 구성되어 있다. 분기점 전 호출되는 함수로 이동해 보자. eax와 문자를 하나씩 비교하는 것으로 보인다. 저 문자를 다 조합하다 보면 Compar3로 시작하는 Flag 값이 나온다. 문자열이 다 흩어져 있다는 걸 제외하면 #0, #1 둘 다 같은 난이도로 너무 쉬웠다. 그치만 어셈블리코드 분석 자체로 의미 있는 풀이였다.
문제 파일을 다운로드 하고 기존 사용하던 올리디버거로 파일을 열었는데, 실행이 안 됐다. 새로운 디버거 x64dbg를 설치하니 실행이 잘 됐다. 프로그램을 실행하면 그냥 Input: 이 뜨고 내가 문자를 입력하면 자동 종료가 된다. 디버거를 열어서 문자열 검색을 진행했다. 내가 찾으려고 한 건 Input이기 때문에 해당 코드로 이동한다. 어떤 함수를 호출하고, test 명령어가 나온 후 Correct와 Wrong으로 나뉜다. eax 값을 검사하여 값이 0이면 Wrong, 1이면 Correct를 띄우는 것이다. (TEST 연산이란 두 피연산자 사이에 AND 연산을 하고, 결과가 0인 경우 ZF가 1로 세팅되지만 결과값을 저장하지는 않는다. 단독 사용은 불가하며 JMP문과 같은 이동 명령어와 함께 사용된다...
*본 포스트는 '유선배 SQL개발자 과외노트' 도서를 참고하여 작성되었습니다. 01. 정규화 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정 정규화 할 경우 데이터 조회성능은 처리 조건에 따라 향상되는 경우도 있고 저하되는 경우도 있다. 근데 입력, 수정, 삭제 성능은 일반적으로 향상된다. 하지만 그렇다고 모든 엔터티를 무작정 분리하면 안 된다. 따라서 일정한 룰이 존재한다. 제1정규형 모든 속성은 반드시 하나의 값만 가져야 한다. 유사한 속성이 반복되는 경우도 1차 정규화의 대상이 된다. 애플리케이션에서 데이터를 꺼내 쓸 때 불필요한 Split을 사용해야 하는 번거로움이 생길 수 있기 때문이다. 제2정규형 엔터티의 모든 일반 속성을 반드시 모든 주 식..
*본 포스트는 '유선배 SQL개발자 과외노트' 도서를 참고하여 작성되었습니다. 01. 데이터 모델의 이해 모델링이란? 데이터베이스의 모델링은 현실 세계를 단순화하여 표현하는 기법 모델링이 갖춰야 할 조건 현실 세계 반영 단순화하여 표현 관리하고자 하는 데이터를 모델로 설계 모델링의 특징 추상화 현실 세계를 일정한 형식으로 표현 아이디어나 개념을 간략하게 단순화 복잡한 현실 세계를 정해진 표기법으로 단순하게 쉽게 표현 명확화 불분명함을 제거하고 명확하게 해석할 수 있도록 기술 모델링의 세 가지 관점 데이터 관점 어떤 데이터들이 업무와 얽혀 있는지, 데이터 간의 관계가 어떤지에 대해 모델링 프로세스 관점 이 업무가 실제로 처리하고 있는 일은 무엇인지 또는 앞으로 처리해야 하는 일은 무엇인지를 모델링 데이터와..