-
Team H4C CTFfkillrra ?/CTF 2017. 11. 12. 12:03
Team H4C에서 주최한 CTF에 출전해 보았습니다. 제 1회 TeamH4C Capture The Flag1. 개최 일시 : 2017년 10월 27일 금요일 21:00PM ~ 10월 28일 토요일 21:30PM2. 등록 기간 : 2017년 10월 13일 금요일 20:00PM ~ 10월 21일 토요일3. 참가 자격 : 제한없음4. 참여 형태 : 개인전5. 보상 : 1위 : 제 4회 TeamH4C 해킹캠프 티켓 , 상장 2위 : 제 4회 TeamH4C 해킹캠프 할인권 , 상장3위 ~ 15위 : 상장 좋은 성적은 아니지만 misc 문제 2개를 풀어 41위로 대회를 마감했습니다.매번 대회에 출전하여 문제를 풀지 못하고 마무리한 기억밖에 없는데 이번 대회는 50위 내로 집입한 점에서 저에게는 의미있는 대회였습니..
-
level13. 풀이System hacking training/Hackerschool F.T.Z 2017. 11. 5. 22:17
해커스쿨 F.T.Z level 13을 풀이해 보았습니다. 로그인 후 힌트를 열어본 화면입니다. attackme에 대한 소스코드인것 같습니다. char 형으로 buf[1024] 만큼 버퍼를 할당해주었고, long 형 i 에 1234567이 들어가 있는것을 알 수 있었습니다. 또한 입력값을 buf에 복사해주는 strcpy 함수가 보이네요. 이 함수는 버퍼오버플로우 공격에 취약합니다. 입력값의 길이를 지정하지 않아, 입력값을 그대로 복사해서 만일 buf 크기 즉, 1024 보다 큰 길이의 입력값이 들어온다면 엉뚱한 것들을 건드려서 프로그래머의 의도와는 다르게 작동할 수 있습니다. 또한 setreuid()를 호출하여 '특권'을 주는것을 볼 수 있습니다. 하지만 이전과는 다르게 if문을 이용하여 i에 0x1234..
-
level12. 풀이System hacking training/Hackerschool F.T.Z 2017. 10. 23. 22:35
해커스쿨 F.T.Z level12 풀이입니다. ls -al 로 디렉터리와 파일을 보니 11번과 같이 attackme에 setuid가 걸린것을 확인 할 수 있습니다. 힌트 내용은 이러합니다. 11번의 소스코드와 유사합니다만 이 문제에서는 포맷스트링에 대한 취약점은 없어보입니다. get()의 취약점을 이용하여 공격을 하면 될것같습니다. get()는 문자열의 수를 제한하지 않아 버퍼오버플로우 공격의 대상이 되는 함수입니다. 이런 취약점으로 문제를 풀어보았습니다. 11의 풀이와 마찬가지로 cp 명령어를 이용하여 tmp 디렉토리에 attackme 실행파일을 복사해줍니다. 이는 level12의 디렉토리에서 gdb 사용을 제한한것에 대한 대비책입니다. 복사된 파일을 gdb를 통해 분석해보았습니다. 힌트 내용과는 달리..
-
c언어를 배워야 하는 이유?tmp/doc 2017. 10. 15. 03:42
"해커가 되고 싶은데 왜 c언어를 배우라고 할까..." 라는 의문을 갖게 되었고 그에 대한 제 생각을 정리해 보게되었습니다. 많은 newbie분들에게 도움이 되었으면 좋겠습니다.(물론 저도 newbie #.#) 지극히 제 개인적인 생각이니 참고만 하시길 바랍니다. Q. 해킹을 하러왔는데 왜 c(프로그래밍 언어)를 배워야할까?A. c는 우리를 위한 언어라고 할 수 있다. 고급언어라고도 하죠! 즉, 사람이 이해하기 쉬운 언어로 컴퓨터를 조작할 수 있게 해준 언어입니다.또한 os(운영체제)의 주 언어가 c라고 합니다. 그 만큼 c 의 존재는 크다고 생각합니다.컴퓨터를 배우는 사람에게 필수적이라고 생각을하고, 선대 해커들의 인터뷰나, 해킹 공부에 대한 검색을 해보시면 알다시피 제일 먼저 c를 많이들 추천하죠ㅎ ..
-
level 11. 풀이System hacking training/Hackerschool F.T.Z 2017. 10. 15. 03:13
오랜만에 F.T.Z를 풀었습니다. bof에 대한 개념부족, gdb 사용법, 쉘코딩에 대한 학습이 부족하여 풀이를 이제서야 하게되었네요ㅠ. (3주전 풀이를 보고 풀어보았는데 이해가 가지 않아서 다시 풀이합니다.) level11의 풀이를 시작합니다. attackme의 소스인듯 합니다.로그인 후 hint를 열어본 결과 여기엔 취약점이 두개가 있더군요. 1. 버퍼오버플로우 취약점2. 포맷스트링 취약점 저는 버퍼오버플로우 취약점에 대해 공부를 하였으니 이 취약점을 갖고 문제를 풀었습니다. 일단! 프로그램을 실행시켜보니 segmentation fault를 출력하고, 인자로 문자열을 넘겨 주면 그대로 출력을 해주네요! 아직 얕은 수준의 지식이지만 달고나님의 문서를 보고 공부한 결과ret주소를 찾아야한다는 것을 알게 ..
-
Linux 02. hello_server.cProgramming/TCP , IP prog 2017. 10. 13. 16:44
소켓에 대한 이해를 마치고 hello_server.c 라는 열혈 TCP/IP 에 나와있는 예제를 분석해보겠습니다. Linux 와 Windows 와는 거의 유사하지만 조금 다른부분이 있습니다. 저는 먼저 리눅스에서 실행되는 예제를 설명해 드리겠습니다. 일단 흐름부터 설명을 드리고 자세히 각 함수의 역할에 대해 좀 더 자세히 설명드리겠습니다. 역할 : 클라이언트 연결시 hello world! 출력 #include #include #include #include #include //bind() 함수에 주소정보를 전달하기 위한 주소정보 구조체가 들어있습니다.#include //socket관련 함수가 들어있습니다. void error(char *message); //error 를 출력할 함수입니다. 인자로 문자열..
-
Linux 01. what is socket?Programming/TCP , IP prog 2017. 10. 12. 21:04
소켓이란 ▶소켕의 의미에 대해 설명드리기에 앞서 네트워크 프로그래밍에서 우리가 살펴봐야할 부분은 물리적 연결이라기 보단 소프트웨어적인 연결을 생각해 보아야 합니다. 대부분의 컴퓨터는 이미 물리적으로 인터넷이라는 네트워크로 연결되어 있기 때문입니다. 네트워크 프로그래밍에서 소켓이 담당하는 역할 : 운영체제에서 제공하는 소프트웨어적인 장치. 소켓은 집에서 다들 이용하고 있을겁니다. 집에 돼지코가 없으신분들은 없겠죠?! 가정이나, 회사 등에서 전기를 사용하기 위해 소켓을 꽂습니다. 이와 같은 이유에서 네트워크 프로그래밍에서의 소켓의 의미가 생기게 되었습니다. 소켓프로그래밍은 어느정도의 형태가 존재합니다. 보통의 진행 순서입니다. socket() // socket 생성 ▼bind() // 생성한 socket 에..
-