Python/2.7 information 74

winpexpect ( ftz level5 )

레이스 컨디션이라 생각하고 풀어볼시 파이썬 소스.. winpexpect라는걸 찾았는데 ssh로 접속해주는 라이브러리이다. ssh로까지 자동 접속 가능하면 나의 ftz서버에 자동으로 파일 생성해서 실행까지 시킬 수 있다. 사용하다 보면 느끼는건데 winpexpect의 spawn은 내 cmd창 내부에서 또다른 하나의 cmd창을 만들어서 거기서 명령어를 실행시킨다는 그런 느낌? 써보면 되게 신기함. 여기에 정리 잘 해놓으심. 참고 import sys,winpexpect child = winpexpect.winspawn('cmd.exe') child.logfile = sys.stdout child.expect('>') child.sendline('C:\\Users\\Ko\\plink level5@192.168...

pytesser모듈.

파이썬 모듈중에 pytesser이라는 모듈이 있다. 신기하게도 캡챠를 프로그래밍적으로 인식할수있다. 근데 이 모듈을 써보면서 특징들을 적어보자면.. 0. 공식 홈페이지에는 tif파일로 예시를 드는데 .png 파일도 되는거보니 확장자에 대해 무관한거같다. 1. 글씨가 어느 정도 작아지면 인식을 못한다. 실험결과 그림판에서 9이하로는 인식을 못한다. 즉 그림판 기준 글자크기가 10 이상은 되야 인식을 한다. 2. 왠지 모르지만 bmp형식?으로 바꿀수 없을때 에러메시지가 뜨면서 아예 안된다. 예시로 받은 tif파일을 조금 색을 넣고 변경했더니 아예 에러메시지가 떠버린다. 그런데 또 내가 임의로 만든 파일은 된다. 이것도 이유를 잘 모르겠다.. 3. 예시는 바탕색이 흰색에 글자가 검은색인데, 반대로 해도 무관하..

Tkinter(python gui)

gui가 필요한건 아닌데 해보고 싶었다.... (갓빨라님의 클릭만 하면 자동으로 문제가 다 풀어지는 vb를 보고 멋있어서 해보고싶었음) 솔직히 gui는 c#이 가장 편한것같다. 버튼도 그냥 마우스로 가져와서 원하는곳에 붙이면 되고. 코드도 그냥 더블클릭 해주면 나오는곳에다가 쓰면 된다. gui전용 툴이 없어서(PyQt가 있긴 하지만 해보려고 하다가 자료를 못찾겠어서 그냥 포기...) 파이썬 gui는 처음이라 내가 봐도 코드가 어설픈 부분이 많다..... 결론 : 재밌지만 개발 용도가 아니면 그닥..... # -*- coding: euc-kr -*- import Tkinter,urllib2 def button1Click(event): req = urllib2.Request('http://'+E.get())..

정규표현식 (파싱)

지금까지 많은 문자열 내부에서 내가 필요한 문자열 찾아내는게 파싱이라는 거라는걸 알았다.... 아. 파싱이라는 말은 많이 들어봤고, 또 이게 문자열을 내가 필요한 형태로 변환한다? 라는 뜻인줄은 알았는데 이게 내가 힘들게 하고있는건줄은 몰랐다. 파이썬 파싱에는 현재 검색해본바로 두가지 방법이 있는데.. beautifulsoup라는 모듈을 사용하는것과 정규표현식을 사용하는 것이다. 현재 정규표현식이 되게 편하다고 생각되어 beautifulsoup는 사용할 필요성을 못 느끼겠으나... 언젠가 왠지 필요하게 될거같아 다음에 시간날때 익혀 봐야겠다. 정규표현식 연습을 위해 이전 문제들중에 문자열 가져오는 방법이 더러웠던 것들을 모아 정규표현식으로 다시 풀어보았다. 파이썬챌린지2번. import urllib2,r..

소켓 파일 업로드 (webhacking.kr 37)

처음에 37번을 풀때는 netcat으로 7777번 열어놓고 현재 시간보다 한 30초 뒤?의 파일을 올린후 f5폭풍클릭으로 타이밍을 맞춰서 풀었었는데 이제 조금 프로그래밍 할줄 알게 되서 프로그램으로 짜봤습니다... 소켓으로 파일 업로드 구현시 주의점은 content length.. POST방식으로 보내기 때문에 body부분에 파일이 올라가서 보내집니다. ------WebKitFormBoundaryBARaBgUn7pXm0LIxContent-Disposition: form-data; name="upfile"; filename="tmp-1414222870"Content-Type: application/octet-stream ------WebKitFormBoundaryBARaBgUn7pXm0LIx-- 대충 이런..

유효한 웹페이지 찾기?

http://www.neroa.com/q/?id=q1 의 2번 문제를 대상으로... 코딩 연습용으로 다시 짜봤습니다. 2번 풀려면 디렉터리를 무작위로 대입해서 풀어야되는데 아무것도 모를때는 dirbuster라는 툴..... 을 이용해서 했었는데 툴은 안쓰려는 지금의 마음가짐으로 다시 ㄱㄱ 에서 한 단어씩 가져와서 대입. 리눅스 환경의 vi에서 쓰여진 것 같습니다. txt로 열면 구분자가 좀 이상하게 보입니다. import urllib2 file = open("directory-list-lowercase-2.3-small.txt","r") for line in file: #파일에서 한줄씩 가져옴. req = urllib2.Request('http://neroa.com/level/2/'+line.split(..

소켓과 urllib2 속도차이

일부러 속도 비교해본건 아니고, 제가 소켓과 urllib2두개로 문제를 풀어보면서 코딩 연습을 하는데.. 전 오래걸리는 코드같은건 습관적으로 포문 돌때마다 번호가 출력되게 코딩합니다.(제대로 돌고 있는지 확인을 위해서) 700번 반복하는 문제가 있는데 소켓과 urllib2로 코딩하다보니까 숫자 내려가는 속도가 눈에 보일 정도로 차이가 나더라고요?? 그래서 time모듈을 써서 속도를 비교해봤습니다. 예시 문제는 suninatas 8번입니다. ( http://suninatas.com/Part_one/web08/web08.asp ) 아이디는 admin, 비밀번호는 0~9999사이의 하나라고 주석에 나와있는 완전 노가다 문제입니다. 당연히 코딩연습하라고 낸 문제같습니다. 답은 이미 알고있어서 짧은 범위만 돌리겠..

쓰레드,세마포어 기초

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

파이썬 소켓 기본.

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로 인코딩한 결과 동일하게 나오는걸 확인할수 있겠네요. 예..

일반적이지 않은 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..