분류 전체보기 289

LOB Level 2 (Gremlin)

이번 문제는 버퍼 크기가 매우 작다. 노답. 암만 찾아도 쉘코드 중 가장 짧은게 25바이트 인데.. 버퍼가 16바이트이다. 공격을 하지말란 것인가. 아니? 꼭 페이로드를 버퍼에만 올릴 필요는 없다. 어떻게 넣을 수 있을까. 여러가지 방법이 있지만 여기서는 argv에 올리는 공격법을 선택하겠음. 일단 [**argv] [argc] [ret] [sfp] 스택이 요래 되어 있다. argv에 올린다고 했는데, 정확하게 argv[2]에 올리는 것이다. argv[1]은 버퍼로 복사가 되므로 해봤자 16바이트 밖에 못쓴다. argv[1]에 RET가 argv[2]를 가르키도록 맞춰서 인자값을 넣고, (['A'*20]+[argv[2] 주소]) argv[2]에 페이로드를 올린다. 먼저 argv[2]의 주소를 찾는다. 순서대..

LOB Level 1 (Gate)

먼저 LOB 문제 풀이에 들어가기 전에 환경설정을 좀 해줄게 있다. 기본으로 되어있는 bash 쉘을 bash2로 바꿔야 한다. bash에서는 \xff 를 null로 처리해버린다고 한다. 그래서 bash2로 설정하고 문제풀이를 시작한다. 먼저 gate/gate 로 접속하면 gremlin, gremlin.c 두가지 파일이 있다. gremlin.c를 열어보면 argv로 인자를 받아 strcpy로 복사하는 기본 bof 문제이다. strcpy() 함수가 입력값의 길이를 검사하지 않는 취약점을 이용한 BOF이다. 디버깅하여 정확한 스택 구조에 대하여 확인해보자. 지금 그대로 하면 권한이 없어 GDB를 올바르게 구동시킬 수가 없다. 실행도 안되고 확인도 불가 그래서 다른 곳에 gremlin을 복사해서 볼것임. 대충 ..

Book review | 나를 사랑하지 못하는 나에게

상처받은 현대인의 자존감 회복 프로젝트의 일환(?)으로 볼 수 있는 책. 굳이 분류하자면 자기계발서.. (저자는 이 책이 자기계발서가 아니라고 주장하지만, 내가 봤을 땐 그냥 영락없는 자기계발서이다.) 이전에 리뷰를 작성한 적이 있는 이라는 책과 궤를 같이한다. 저자인 안드레아스 크누프는 독일의 심리회복 전문가로 매우 유명하다고 한다. 이 책의 포커스는 "자기비난" 이라는 키워드에 맞추어져 있다. "현대인들은 완벽주의라는 탈을 쓴 자기비난을 일삼고 있고, 이것을 인지하지 못하여 늘 심리적으로 고통받고 있다. 대충해도 된다. 미움받아도 된다. 스스로에게 조금 더 친절할 필요가 있다." 정도로 이 책을 요약할 수 있겠다. 방금 언급했던 대로 본인이 마음속으로 희망하는 '이상적인 나의 모습'에 한참 부족한 '..

Book review | 에고라는 적

Ego(에고)를 경계하라 Egoist(이기주의자), Egoism(이기주의)에 사용되는 Ego(에고)를 디스하는 책이다. 이 책을 읽기 전, 제목만 보고 내가 생각한 Ego는 프로이트의 정신분석학에 나오는 Ego(자아, 독어로 das lch)를 떠올렸지만.. 그 Ego가 아니라, 보편적인 의미의 Ego인데 .. 쉽게 자만감 정도로 보면 될 것 같다. (+ 근거 없는 자신감) 책 전반적으로 가장 많이 나오는 말이 에고이다. "에고를 다스려라", "에고는 적이다.", "에고를 유심히 들여다봐야 한다.", "에고와 맞서 싸워라" 사실 나는 책을 다 읽은 이 시점에도 작가가 주장하는 에고에 대한 내용이 크게 와닿지가 않는다. 에고의 구체적인 개념정립이 안돼있기 때문이다. "에고란 이런 것이다." 가 없다. 그래서..

Book review | 공포 다이어트

이번에 리뷰할 책은 "공포 다이어트"라는 건강관리에 관련된 책이다. 요즘 다이어트 중이라 .. 도움이 될 내용이 있을까 해서 한번 읽어보았다. 대부분의 건강관련 지식들이 그렇듯이 효과적인 다이어트. 건강관리 법은 너무 많다. "이걸 하면 뭐가 좋다, 저걸 먹으면 어디에 좋다" 등등 사람마다 식습관, 생활패턴, 건강상태가 상이하므로 정답이 없다는 것은 본인도 알고 있지만 계속해서 더 편하고 빠르게 효과를 보는 방법들을 찾는 건 어쩔 수 없나보다. 이 책을 구매하는 나의 마음도 같았으리라.. 공포 다이어트의 공포는 공복감과 포만감을 조절하는 방법으로 다이어트를 하는 것을 일컫는다. "매번 시도하는 다이어트가 실패하는 이유는 우리가 공복감을 참지 못하기 때문이다." 라는 가정에서 시작한다. [CHAPTER 1..

Book review | 사피엔스

진짜 완독하는데 오래걸렸다. 드디어 리뷰를 쓰네 ㅠ.ㅠ 책의 분량이 많기도 하지만, 요즘 집에 평온하게 앉아 책 읽을 시간이 많지 않아 출퇴근 시간에만 읽다보니.. 1달 정도 걸린듯 하다. 라는 책 자체는 워낙 유명한 베스트셀러 라서.. 책을 즐겨 읽는 사람들 대부분이 '언제간 꼭 읽어봐야지' 하는 책이 아닐까 싶다. 나도 그런 물결에 동참하여(?) 처음 이 책을 손에 들었지.. 실은 과학 분야에 크게 관심이 없었다. 물론 지금도 없다(!) "관심 분야도 아니고 두껍기만 한 이 책을 끝까지 읽고 리뷰까지 쓰냐?" 라고 묻는다면 '그럼에도 불구하고' 흥미로운 책이기 때문이다. 이 책의 주제는 명확하다. 저자가 서문에 쓴 내용을 빌리자면, 나는 이 책이 독자 스스로 '우리는 누구인가, 어디에서 왔는가, 어떻..

입출력 다중화 (I/O Multiplexing)

이번에 배울 개념은 입출력 다중화, I/O Multiplexing 이다. 멀티플렉싱의 사전적 의미를 보면, "하나의 통신채널을 통해서 둘 이상의 데이터(시그널)을 전송하는데 사용되는 기술" 이다. 다시 말하자면, 효율성을 높히기 위해 물리적인 장치를 최소한으로 사용하여 최대한의 데이터를 전송하는 기술이다. 이 개념을 네트워크 소켓에 적용 시키면, 다수의 프로세스를 생성하지 않고도 여러 개의 클라이언트에게 서비스를 제공할 수 있는 기술이 되겠다. 프로세스를 생성하는 데에는 상당히 많은 작업이 요구된다. 많은 양의 연산작업, 잡아먹는 메모리 공간 등등.. 그리고 프로세스 간의 통신 (IPC)도 솔직히 복잡하다. 그래서 I/O 멀티플렉싱이 의미를 가진다. 기존의 I/O 모델들을 살펴보고 멀티플렉싱에 대해 자세..

시그널 핸들링(SIGCHLD)

TCP echo server, client에 대해 봤다. 그럼 이 프로그램의 정상적인 시작과 종료에 대해 알아보자. 처음에 클라이언트가 연결 요청을 하지 않았을 때, 서버는 listen 상태 일 것이다. netstat -a 명령을 통해 local ip :*, local port : 9877 로 listen 상태인 것을 확인할 수 있다. 그럼 이제 클라이언트 요청에 의해 서버가 연결된 모습을 보자. 보다 시피 연결이 되었을 때는 ESTABLISHED 상태가 되어 있다. 서버의 자식 소켓과 클라이언트 소켓이 ESTABLISHED 상태가 되어 있고, 서버의 부모 소켓은 여전히 Listen 상태가 되어 있다. 그럼 이번에 정상종료 하는 것을 보자. 서버의 자식 소켓의 연결이 끊어지면 부모 소켓으로 SIGCHLD..

TCP echo Server/Client

이번부터 지금까지 배운 TCP 소켓 함수들을 이용하여 TCP 서버-클라이언트 예제를 한번 구현해보겠음. echo(메아리) 서버, 클라이언트를 한번 만들어보자. main 함수의 for문 전까지는 그냥 소켓을 생성하고 바인딩한 후 listen 상태도 만드는 기본적인 소켓 셋팅 코드임. 그리고 for문에 들어오면 연결 소켓을 connfd에 저장하고 fork로 자식 프로세스를 생성한다. fork 반환값이 0이면 자식프로세스 분기인데, 자식은 listen 소켓을 닫고 연결 소켓을 연다. str_echo 라고 하는 아래 정의된 함수에 의해서 connfd 가 작업을 함. 원래는 여기 나오는게 concurrent server 즉, 동반 서버에 대한 설명을 했어야 했는데, 따로 빼서 하기도 애매해서 코드와 함께 작성할 ..

소켓 프로그래밍

앞서 소켓이 무엇인지 알아봤고, 이제 소켓으로 실제 통신이 어떻게 구현되는지 알아보자. 클라이언트의 동작에 대한 함수를 알아보고 난 뒤, 서버에 대해 알아보겠다. 일단 먼저, 서버든 클라이언트든 통신에 앞서 socket을 생성해야 할 것이다. ​TCP 통신 전체 그림을 보면서 socket 녀석이 어딨는지 보자. 소켓은 socket 함수를 이용하여 생성한다. 어떤 친구인지 한번 알아보자. 어떤 프로토콜로 통신할 것인지, 어떤 종류의 소켓을 사용할 것인지 미리 정해진 값들을 집어넣기만 하면 된다. domain 부분에서 PF_INET 와 AF_INET 이부분이 좀 혼동할 수 있는데, PF_INET는 프로토콜 체계(프로토콜 패밀리)이고 AF_INET는 주소 체계(주소 패밀리)이다. connect() 소켓을 생성..

반응형