목록보안/개인공부 (32)

인터넷을 기반으로 구현된 서비스 중 HTTP를 이용하여 정보를 공유하는 서비스를 웹이라 합니다. 여기서 정보를 제공하는 주체를 웹 서버, 정보를 받는 이용자를 웹 클라이언트 라고 합니다. 웹 리소스 모든 웹 리소스는 공유의 URI를 가지며, 이를 이용하여 식별됩니다. HTM , CSS, JS 웹 클라이언트와 서버의 통신 1. (클라이언트) 이용자가 브라우저를 이용하여 웹 서버에 접속합니다. 2. (클라이언트) 브라우저는 이용자의 요청을 해석하여 HTTP 형식으로 웹 서버에 리소스를 요청합니다. 3. (서버) HTTP로 전달된 이용자의 요청을 해석합니다. 4. (서버) 해석한 이용자의 요청에 따라 적절한 동작을 합니다. 리소스를 요청하는 것이라면, 이를 탐색합니다. 계좌 송금, 입금과 같은 복잡한 동작을 ..

HTTP(Hyper Text Transfer Protocol)란 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response) 형식으로 정의한 프로토콜입니다. HTTP 헤드 헤더는 필드와 값으로 구성되며 HTTP메시지 또는 바디의 속성을 나타냅니다. 하나의 HTTP 메시지에는 0개 이상의 헤더가 있을 수 있습니다. HTTP 바디 헤드의 끝을 나타내는 CRLF뒤, 모든 줄을 말합니다. 클라이언트나 서버에게 전송하려는 데이터가 바디에 담깁니다. HTTP 요청 서버에게 특정 동작을 요구하는 메시지 시작 줄은 메소드, 요청 URL, HTTP버전으로 구성됨 메소드는 8개가 있으나, GET, POST가 자주 사용됨 GET은 리소스를 가져오라는 메소드 반대로 POST는 서버에 보내주는 것 HTTP ..

어느덧 해킹을 공부한지 1년이 되었습니다. 1년 동안 쉬지 않고 달려오느라 몸도 상하고 힘들었지만 그만큼 얻은것도 많아 행복했습니다. dreamhack을 이용한지는 약 9개월정도 됐습니다. 9개월동안 dreamhack을 이용하면서 얼마나 성장했는지 적어 볼려고 합니다. 제가 한참 드림핵을 이용했을때 단계별로 풀어보기로 시작을 했습니다. pwn을 좋아했기에 pwn문제를 모두 풀어보자는 목표를 세우고 시작했습니다. 지금도 초보이지만 그때 당시는 맨땅에 해딩이라 큰 벽을 느끼고 그 벽을 뿌실때마다 기분이 너무 좋고 재미있었죠 강의가 잘나와있어 참고해가며 단계를 진행했습니다. 그 후 libc버전 차이로 긴 시간동안 삽질을 했었던적이 있었습니다. 혼자 공부를 독학하여 진행했기에 그 누구 하나 알려준 사람이 없어 ..
보호되어 있는 글입니다.

가끔 ctf 문제를 보면 fork를 쓰는 경우가 있다 gdb를 키면 부모 프로세스를 따라가기 때문에 자식 프로세스를 따라가게 만들어주어야 한다. set follow-fork-mode child gdb를 키고 이 명령어를 통해 자식 프로세스를 따라 가준다. 지금까지 PIE가 걸려있는 바이너리를 어렵게 디버깅 했으나 PEDA에서는 0x0000555555554000로 고정이라고 한다...... offset을 더해주어서 bp를 걸어주면 된다. 온몸에 전율이 생긴다.

dreamhack 문제를 푸는데 dll injection 관련 문제가 나왔다. dll을 로드하여 exe파일을 만들어야 했다. 처음에 notepad로 확장자명을 바꾸어 만들었으나 dll을 로드하는데있어 잘 되지 않았다. 그래서 visual studio를 이용했다. #include #include int main() { HINSTANCE prob = LoadLibraryA("???.dll"); if (prob == NULL) { printf("dll 로드 실패\n"); return -1; } printf("dll 로드 성공"); return 0; } 해당 코드로 원하는 dll을 로드한 exe파일을 만들 수 있다. 옵션 창에서 빌드 -> 일괄 빌드를 눌러준다. 실행시 프로젝트 디렉터리에 exe파일이 생성되어있..

Base64는 그대로 표현하면 64진법이다. 바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩이다. 8비트짜리 바이트 3개를 6비트씩 4개로 쪼개어 Base64 코드 4개로 바꾸어 표현한다. example 원문 E 1 L 바이트 값 0x45 0x31 0x4C 2진수 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 1 0 1 0 0 1 1 0 0 변환 값 17 19 5 12 결과 R T F M 원문 'E1L' 을 인코딩하는 과정이다. 결과로 'RTFM' 이 나온다. $ echo -n E1L | base64 RTFM $ echo RTFM | base64 --decode E1L 리눅스에서의 인코딩 디코딩 과정이다. Base64 변환표 값 문자 값 문자 ..

https://dreamhack.io/learn/274#1 로그인 | Dreamhack dreamhack.io #include #include #include char account_buf[1024]; int overwrite_me; void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int read_account() { FILE *fp; fp = fopen("flag", "r"); fread(account_buf, sizeof(char), sizeof(account_buf), fp); write(1, account_buf, sizeof(account_buf)); fclose(fp); } int main() { FILE *fp; char..