본문 바로가기

Layer7 CTF 후기 Wargame.kr에 있는 게시판에 Layer7 CTF에 대한 홍보가 있어서 가입을 했다. CTF는 토요일 오전 9시부터 일요일 오전 9시까지 총 24시간 동안 진행되었다. 문제의 경우에는 바이너리, 포렌식, 리버싱, 웹, MICS 이렇게 5가지 분야로 있었다. 일단 바이너리 부분의 경우에는 기초가 안되어 있어서 그런지 한 문제도 풀지 못했다.... 바이너리에 대해 미리 공부해 놓았으면 한 문제라도 풀 수 있었을 텐데 아쉽다. 포렌식의 경우에는 한 문제를 풀었는데, 이미지를 주고 그 이미지를 찍은 사람이 어떤 대회에 참가했는지를 알아내는 문제였다. 이 문제의 경우에는 그냥 사진에서 Meta 데이터를 읽을 수 있는지 묻는 난이도의 문제였다. 사진에 있는 GPS 정보를 이용해서 대강의 위치를 알아내고, 찍힌..
[acmicpc.net] 1003 피보나치 함수 문제 링크 : https://www.acmicpc.net/problem/1003 문제 내용 fibonacci(3)을 호출하면 다음과 같은 일이 일어난다. fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다. fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다. 두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다. fibonacci(0)은 0을 출력하고, 0을 리턴한다. fibonacci(2)는 fibonacci(1)과 fibonacci(0)의 결과를 얻고, 1을 리턴한다. 첫 번째 호출한 fibonacci(1)은 1을 출력하고, 1을 리턴한다. fibonacci(3)은 fibonacci(..
SQL Injection 공부하기 웹 해킹을 보면 SQL Injection, XSS, LFI 등의 공격 방법이 있습니다. 특히 SQL Injection의 경우에는 성공만 한다면 모든 계정 정보 및 게시판에 대한 모든 정보(비밀 글로 등록한 경우에도)뿐만 아니라 관리자와 같이 행동을 할 수도 있기 때문에 매우 위험한 공격이라고 볼 수도 있습니다. 이러한 공격을 막는 가장 쉬운 방법은 쿼리 빌더(Query Builder)를 사용하거나 혹은 쿼리에 값을 넣어서 실행하기 전에 addslashes와 같은 이스케이프 함수를 이용해서 공격을 할 수 없도록 하면 됩니다. 물론 이렇게 이스케이프 함수를 이용하더라도 이를 우회할 수 있는 방법이 상황에 따라 존재하기 때문에 주의해야 합니다. SQL Injection 공격을 어떻게 하는지를 안다면 그것을 어..
일정 길이의 랜덤 문자열 생성하기 파이썬을 이용해서 일정 길이에 해당하는 랜덤 문자열을 생성하는 코드입니다. 여기서 len에는 원하는 문자열의 길이를 int형으로, characters 부분은 랜덤 문자열을 생성하는데 사용하는 문자들을 리스트 혹은 문자열 형태로 주시면 됩니다. import random def rand_str(len, characters): return "".join([random.choice(characters) for _ in range(len)]) 소스코드에도 있는 것처럼 random 모듈을 import를 해야 사용이 가능합니다. 코드에 대한 간략한 설명을 하자면 len에 해당하는 만큼 characters의 원소를 추출해서 (수학적인 용어로는 복원추출) 리스트를 만들고, 그것을 join 메소드를 이용해서 이어 붙이는 ..
네이버 로그인 분석 Python을 이용해 네이버 로그인을 구현하기 위한 분석 내용입니다. 일단 네이버 로그인을 할 때 https 통신을 이용해서 정보를 주고 받기 때문에 Wireshark와 같은 툴을 사용해 패킷을 가져오더라도 암호화가 되어 있어서 그 내용을 알기 어렵습니다. 물론 인증서에 대한 키 값을 알고 있다면 쉽게 복호화가 가능합니다. 또한 Paros나 Burp Suite와 같은 프록시 툴을 사용한다면 중간에 어떤 요청이 들어갔는지를 알아 낼 수 있습니다. 하지만 네이버는 프록시 툴을 이용하더라도 로그인 정보를 알 수 없게 만들었습니다. 여기에서는 어떠한 방식으로 구현을 했는지를 살펴보도록 하겠습니다. 여기에서는 특별한 프로그램을 사용하지 않고 Chrome에서 기본으로 제공하는 기능만을 사용해서 분석을 하겠습니다. ..
모바일에서만 보이는 이미지 아래 사진은 모바일 환경에서만 볼 수 있다. 실제로 테스트를 해보려면 http://imghumit.dothome.co.kr/img/younha.jpg로 들어가거나 혹은 를 이용해서 확인을 해볼 수 있다. 카테고리에서도 알 수 있듯이 PHP를 이용하면 이런 식으로 구현이 가능하다. 이것을 응용하면 IP 대역별로 이미지를 보여줄지 보여줄지 말지, 혹은 다른 이미지를 보여줄 수도 있다.
일정 시간마다 실행하기 Python을 이용해서 일정 시간마다 특정 작업을 반복할 수 있는 skeleton 코드이다. 아래 코드에서 print("Hello, World") 부분을 지우고 원하는 코드를 입력하면 된다. 응용 방법의 경우에는 매우 많은데, 일정 시간마다 글을 작성하도록 하는 봇을 만든다거나 혹은 주식과 같이 일정시간마다 바뀌는 값의 데이터를 저장하는데 쓰일 수 있다. import threading end = False def execute_func(second=1.0): global end if end: return # TODO print("Hello, World!") threading.Timer(second, execute_func, [second]).start() execute_func(2.0) 참고로 계속 돌아..
웹 페이지 파싱을 어렵게 하는 방법 웹 페이지에 있는 데이터를 읽어와서 그 데이터를 가공해서 우리가 원하는 데이터를 뽑아내는 과정을 파싱이라고 합니다. 보통 파싱은 검색 엔진에서의 실시간 검색어 데이터를 가져온다거나 혹은 주식의 현재 주가를 알아내는 등의 과정에서 많이 쓰입니다. 파싱 과정에서 중요한 것은 웹페이지에 있는 데이터를 가져오는 일입니다. 왜냐하면 데이터를 가져오지 못한다면 데이터를 가공하는 과정을 구현했더라도 쓸모가 없기 때문입니다. 대다수의 웹 페이지들은 파싱 프로그램을 좋아하지 않기 때문에 파싱을 하는 프로그램인지 체크를 하고 맞는 경우에는 에러 페이지를 보여주는 일을 합니다. 왜냐하면 파싱 프로그램을 사용하게 되면 페이지에서 광고를 보여줄 수 없기 때문에 수익이 생기지 않고, 트래픽만 잡아먹기 때문입니다. 보통 체크를 하..