study 973

쓰레드,세마포어 기초

쓰레드 모듈. import threading으로 임포트합니다. import thread가 있긴하지만 threading이 더 최신에 나온것이고 쓰기 쉽다고 어디 써있었는데 제가 둘다 써봤는데 threading모듈 내부에는 세마포어도 자동으로 있어서 더 쓰기가 쉬워요. 쓰레드 쓰기. 1. 쓰레드 인스턴스 생성해준다. ex) th = threading.Thread()같은 형식으로 만들어줍니다. th에는 만들어진 쓰레드 인스턴스가, 첫번째 인자는 쓰레드로 돌릴 함수 target=돌릴함수이름, 두번째 인자는 쓰레드로 돌릴 함수의 인자인데 여기서 인자로 튜플을 받습니다. args=() 이런형식 으로 받아요. 코드. import urllib2,threading def thread_even(i): print i def..

webhacking.kr 2번

2번은 추측과 서브쿼리에 관한 지식이 필요합니다.1. 소스를 보면 /admin이라는 관리자 페이지 발견./admin페이지에 들어가서 소스를 보면 폼 이름이 admin과 텍스트상자 이름이 password라는걸로테이블명은 admin, 컬럼은 password라는걸로 추측..2. /bbs/index.php 라는 곳에서 비밀글 발견. FreeB0aRd 라는 대문에 있는 문자열과폼 텍스트박스 이름이 마찬가지로 password라는걸로 테이블명 FreeB0aRd, 컬럼명password추측. (솔직히 조금 오바같아요.)3. 쿠키에 time이라는 이름의 쿠키와 1407736636라는 이상한 값 발견.값 뒤에 and 1=1같이 아무 값이나 인젝션했을때 메인 페이지 소스에서 시간 값 변경 발견.. 기술보다는 엄청나게 추측이 ..

webhacking.kr 1번.

1번 문제 소스입니다. 일단 eregi함수는 필터링으로 해당 문자가 있는지 확인하는 내용입니다. sql인젝션 문제에서 자주 등장하니 형태를 익혀두시는게 좋을거에요.http://c_study_s.blog.me/30133211775 참고하시기 바랍니다...첫번째 패턴 부분인 [^0-9,.]에서 ^는 제외한다는 뜻, 0-9는 0~9사이의 숫자라는 뜻.,는 0-9와 .을 구분하기 위한 ,이고 .은 임의의 한 글자를 뜻합니다.즉 [^0-9,.]은 0~9사이의 숫자를 제외한 나머지 아무 한 글자를 뜻합니다.또 $_COOKIE[]변수는 쿠키값을 뜻하고, 내부의 인자는 쿠키 이름입니다.$_COOKIE[user_lv]는 user_lv라는 이름의 쿠키가 있다고 보시면 됩니다.즉 if(eregi("[^0-9,.]",$_CO..

webhacking/client 2014.08.11

파이썬 소켓 기본.

urllib2나 urllib, httplib은 기본은 다룬것 같고, 소켓 시작하도록 하겠습니다. 소켓 프로그래밍을 하려면 http요청 헤더 구조를 잘 아는게 '매우매우매우' 중요합니다.. 단순히 요청 헤더를 잘못 썼다는 이유만으로 답변이 안 올 수도 있기 때문이죠... 한번 읽어보고 아래 글 읽으시길 바랍니다. http://blog.naver.com/cptcho/110021031351http://blog.naver.com/eqelizer/20134185046 전부 다 어떤 역할을 하는지, 어떻게 쓰는지는 몰라도 되지만 이런 헤더가 있다, 이런 헤더는 이런곳에 쓰인다 정도는 알아두셔야 될 것 같습니다. 예로 이번 코드게이트 2014때 Range헤더에 관한 문제가 나왔었죠.... 일단 중요한 부분중 하나는 ..

파이썬 리스트 관련

c언어에서 배열처럼 처음부터 일정한 크기의 리스트를 만들어서 쓰고싶은데 파이썬 list는 배열과 뭔가 달라서 불편합니다. 파이썬에서 크기가 10인 리스트 생성 방법 a = [0 for i in range(10)]​ #10칸 생성. 각각 0으로 초기화됨. 초기화를 1로 시키고 싶으면 a = [1 for i in range(10)]​ #1로만 바꿔주면 됩니다. 활용1 : 리스트에 0부터 9까지 숫자가 들어간 10칸 배열을 만들고 싶다. a = [i for i in range(10)]​ 활용2 : sql인젝션 브루트포싱을 위해 0부터 127까지 16진수형태로 들어간 128칸 배열을 만들고 싶다. ex)0,1,2,3,4,5,6,7,8,9,a,b,c,d,.... 7d,7e,7f a = ['{:x}'.format(..

md5, sha1, base64등의 인코딩,디코딩

파이썬으로 쉽고 빠르게 인코딩 디코딩이 가능합니다. 워게임 풀때 많이 나오는 md5, sha1, base64를 다루기에 좋습니다. hashlib이라는 모듈로 md5,sha1인코딩이 가능합니다. 예제코드.(md5) import hashlib h = hashlib.md5() h.update('abcde') #update 안에는 인코딩할 문자열을 집어넣습니다. print h.hexdigest() #hexdigest는 우리가 익히 아는 16진수로 출력. print h.digest() #digest는 한글로 변환되어 이상하게 출력. 코딩 돌린 결과. md5로 인코딩해주는 사이트인 http://www.md5encryption.com/ 에서 abcde를 md5로 인코딩한 결과 동일하게 나오는걸 확인할수 있겠네요. 예..

webhacking.kr 8번

중요 부분. $pat="/\/|\*|union|char|ascii|select|out|infor|schema|columns|sub|-|\+|\||!|update|del|drop|from|where|order|by|asc|desc|lv|board|\([0-9]|sys|pass|\.|like|and|\'\'|sub/"; if(preg_match($pat,$agent)) exit("Access Denied!"); //agent값에서 $pat으로 필터리을 함. $q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'"); //쿼리 돌려서 $ck=@mysql_fetch_array($q); if($ck) //결과가 admin이면 통과 {..

webhacking.kr 6번

http://webhacking.kr/challenge/web/web-06/index.php 참고 포스팅 : http://qkqhxla1.tistory.com/entry/md5-sha1-base64%EB%93%B1%EC%9D%98-%EC%9D%B8%EC%BD%94%EB%94%A9%EB%94%94%EC%BD%94%EB%94%A9 6번 입니다. 소스봐서 문제코드를 해독한 후 역으로 따라올라가면 답이 나올겁니다. 1. 'admin' 문자열을 20번 인코딩 2. $decode_id=str_replace("!","1",$decode_id); ~~ 등의 규칙으로 문자열을 역으로 변경. 3. user,password라는 쿠기값에다 저 값을 집어넣음. 역시 파이썬으로 아주 쉽게 가능합니다. 1번과정. import ba..

webhacking/client 2014.08.10

webhacking.kr 2번 소스코드

여기에 쓰인 로그인 방법론이나 sql인젝션 관련 지식은 해당 카테고리에 다 포스팅해놨어요. 파이썬 로그인 방법론은 웹,소켓 프로그래밍 카테고리에 있습니다. import urllib,urllib2 form = urllib.urlencode({'id':'??????','pw':'??????'}) req = urllib2.Request('http://webhacking.kr',form) res = urllib2.urlopen(req) session = res.headers.get('set-cookie') for i in range(0,30): #password길이를 구하기 위한 반복문. < print i req = urllib2.Request('http://webhacking.kr/challenge/web/w..

일반적이지 않은 HTTP 요청 메소드를 보내는 방법.

대부분의 사람들이 가장 정상적으로 많이 이용하는 요청 메소드는 GET, POST가 있습니다.GET방식은 URL끝에 ?보낼데이터=값&보낼데이터2=값2 이런식으로 붙어서 보내지는거고, POST는 패킷의 BODY에 전송이 됩니다.어떻게 전송되는지는 이전글에 다 캡쳐해놨었어요. 그런데 워게임 문제를 풀다보면 일반적인 요청 헤더 말고, 일반적이지 않은 요청 메소드로 보내야 할 상황이 생깁니다. 예로 htaccess같은걸로 GET,POST메소드를 막아놓는 경우 우회하는 방법으로 OPTION, PUT메소드같은 요청으로만 바꿔주면 엑세스가 허용되는 경우도 있습니다. 이걸 이용한 워게임문제도 있고요.binaryU님의 티스토리에 있는 문서를 첨부파일로 올렸습니다. ( http://binaryu.tistory.com/28 ..

페이지 이동과 요청보내기.

이전에서는 로그인 구현 시에 대해서 적었었고, 로그인 구현 후에 페이지를 돌아다니거나, 또는 요청을 보내는 것에 대해서 적겠습니다.일단 저번에 로그인하는 코드를 다시 적겠습니다.webhacking.kr 을 예로 들자면 import urllib,urllib2 # -*- coding: euc-kr -*- form = urllib.urlencode({'id':'?????','pw':'?????'}) req = urllib2.Request('http://webhacking.kr',form) res = urllib2.urlopen(req) print res.read(20000) 이 코드가 로그인하는 코드이고, '로그인된 상태'로 페이지들을 돌아다녀야 '님이 누군지 모르겠습니다. 로그인하세요'이런 메시지가 안뜨겠죠..

파이썬으로 로그인 구현.

전 httplib은 되도록 쓰지 않습니다. 제가보기에 urllib2가 더 쓰기가 편하고, 알아보기가 쉬운것 같아요. 필요한 기능도 다 제공되고요. GET,POST이외의 OPTION등의 메소드로 요청 보낼 시를 제외 하고서는 httplib 모듈은 쓰지 않습니다. 나중 추가. GET,POST말고도 다른 메소드도 urllib2모듈로 보낼 수 있음. 1. 로그인 요청시(로그인 버튼 클릭했을시) 로그인정보가 POST방식으로 가는 경우.(요즘사이트 대부분) URL인코딩을 해서 보내줘야 합니다. 아래 캡쳐부분처럼 데이터가 body부분에 따로 데이터만 가는 경우 인코딩을 해줘야 제대로 데이터가 전송됩니다. 그게 아니라 전송되는 원리를 내가 안다고 하면 직접 문자열을 제작해서 보내도 됩니다. 일단은 urllib모듈의 u..