본문 바로가기

2016/08

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) 참고로 계속 돌아..
웹 페이지 파싱을 어렵게 하는 방법 웹 페이지에 있는 데이터를 읽어와서 그 데이터를 가공해서 우리가 원하는 데이터를 뽑아내는 과정을 파싱이라고 합니다. 보통 파싱은 검색 엔진에서의 실시간 검색어 데이터를 가져온다거나 혹은 주식의 현재 주가를 알아내는 등의 과정에서 많이 쓰입니다. 파싱 과정에서 중요한 것은 웹페이지에 있는 데이터를 가져오는 일입니다. 왜냐하면 데이터를 가져오지 못한다면 데이터를 가공하는 과정을 구현했더라도 쓸모가 없기 때문입니다. 대다수의 웹 페이지들은 파싱 프로그램을 좋아하지 않기 때문에 파싱을 하는 프로그램인지 체크를 하고 맞는 경우에는 에러 페이지를 보여주는 일을 합니다. 왜냐하면 파싱 프로그램을 사용하게 되면 페이지에서 광고를 보여줄 수 없기 때문에 수익이 생기지 않고, 트래픽만 잡아먹기 때문입니다. 보통 체크를 하..
mod_rewrite가 적용이 안될 경우 1. phpinfo 페이지에서 mod_rewrite 모듈이 설치되어 있고 활성화가 되어 있는지 확인한다. 확인 방법은 phpinfo.php라는 파일을 생성해서 아래 내용을 입력해서 저장을 하고 페이지에 접속을 해서 ctrl+F로 mod_rewrite를 검색하면 된다. 검색해서 없는 경우에는 설치를 하고 활성화를 시킨다. 2. 검색해서 나오는 경우에는 http.conf 파일을 열어서 아래 부분처럼 바꾸고 apache를 재시작한다. Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all 참고로 환경에 따라서 이렇게 해도 안되는 경우가 있는데, 그 경우에는 Options ~ 부분만 주석처리를 하면 된다..
네이버 로그인 뜯어보기 다음(Daum) 로그인이나 페이스북(facebook) 로그인의 경우에는 로그인 요청을 보낼 때 아이디와 패스워드 정보를 그대로 전송 합니다. 즉, paros와 같은 프록시 툴을 이용해서 요청을 캡처한다면 아이디와 패스워드 정보를 손쉽게 얻을 수 있다는 위험성이 있습니다. (https 통신을 사용하기 때문에 패킷을 캡처한다고 해서 정보를 볼 수 있진 않습니다.) 네이버(Naver) 로그인 과정에서 보내는 요청을 살펴보면 아이디와 패스워드 정보가 직접적으로 드러나지 않는 것을 확인할 수 있습니다. 즉 네이버의 경우에는 요청을 보내기 전에 클라이언트 측에서 아이디와 패스워드 정보를 암호화해서 요청을 보냅니다. 즉 클라이언트 측에서 암호화를 하기 때문에 대칭키 알고리즘을 사용하게 된다면 암호화를 하는 의미가 없..