Python 140

Enigmagroup missions/programming 2

Objective: You have 1 second to multiply this random number 30882470 by 4 and submit it 랜덤으로 나타나는 숫자에 대해 4를 곱한 값을 적어서 1초안에 요청을 보내라. 근데 단순히 계산한값만 보내면 안된다. 보낼때 몸체부분을 보면 내가적은 답 뿐만아니라 시간, 어떤 해쉬값도 같이 가기 때문이다.(이게 하나라도 틀리면 인정 안됨.) 정규식에 익숙하지 않아서 더럽게 구분해서 짰다.. import urllib2 req = urllib2.Request('http://www.enigmagroup.org/missions/programming/2/index.php') req.add_header('cookie','enigmafiedV4=내 쿠키') r..

Enigmagroup missions/programming 1

Your objective is to send a POST header to this script. The POST content must contain your IP Address and your USERNAME. The variable names are ip & username! ONE MORE THING... MAKE SURE you send a cookie with the value mission=yes What? You haven't posted it yet??? Get Coding!!! POST메소드로 내 아이피주소와 USERNAME을 보내라. 변수 이름은 ip와 username으로 해라. 하나더.. 쿠키에 mission=yes를 추가해라. 코딩해라. 코딩시 세션을 유지하기위해 쿠키중에 eni..

소켓 파일 업로드 (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(..

wargame.kr pw_crack

codeshell의 admin_pass 보다 어려운 버전이다. 아마 codeshell이 이 문제를 보고 조금 쉽게 만든 버전인 듯... 소스를 보면......... $password=auth_code("pw crack"); $dest = $_SERVER['REMOTE_ADDR']; $port = 31337; $data=""; $sock = @fsockopen($dest,$port,$errno,$errstr,10); if(!$sock){die("IP : $dest port : $port Connection Error Please, open your port!");} fwrite($sock,"password : "); for($i=0;$i 4 + len(answer)*2: #걸린 시간이... 4초 + 답의길..

사칙연산 계산 서버, 클라이언트

이전에 소켓 공부하면서 소켓 프로그래밍에 익숙해지기 위해 짜봤던 계산 서버입니다. 코드는 제일 아래에.. 서버를 먼저 실행시키고 클라이언트를 실행시켰을시 첫 화면. 오른쪽이 서버, 왼쪽이 클라이언트. 클라이언트에 계산 식을 입력하면 서버에 자동으로 식과 답이 나타납니다. 클라이언트에서 q를 눌러 종료하면 클라이언트는 종료되고, 서버는 총 5대의 클라이언트를 기다릴수 있으니 다른 클라이언트 4대를 기다립니다. 새로 연결된 모습. 새로 연결되고 위와 같습니다. 지금 보니까 서버 부분에서 클라이언트 소켓 받아들이는 부분을 쓰레드로 처리 안해서 한번에 한 클라이언트만 처리 가능하겠네요... 처음에 c언어로 계산 서버, 클라이언트 짜보려고 했는데 c언어로 짜기에는 너무 어렵네요. 코드 라인수도 파이썬의 두배 이상..

Python/2.7 for fun. 2014.10.03

소켓과 urllib2 속도차이

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

파이썬챌린지.com 5

http://www.pythonchallenge.com/pc/def/peak.html 뭔지 모르겠다. http://www.pythonchallenge.com/pc/def/banner.p 라는 이상한 주소를 찾긴했는데 뭔 짓을 해야될지 모르겠다. 파이썬 peak, 파이썬 peak hell 등으로 검색해봤더니 peakle모듈을 이용하는 문제라고 한다.. 아...... peakle모듈은 dump로 어떤 인코딩을 해서 저장(?)하고 load로 다시 디코딩을 해서 불러온다. (딱히 표현할 말이 생각안나서 인코딩 디코딩이라고 표현했습니다.) banner.p를 다운받아서 인코딩된거라 가정하고 디코딩을 해봤습니다. import pickle file = open('banner.p','rb') data = pickle.l..

파이썬챌린지.com 4

http://www.pythonchallenge.com/pc/def/linkedlist.php ? 아무것도 없고 사진 클릭하면 and the next nothing is 44827 이 나옵니다. url은 http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345 이고요. 그럼 바꿔봐서 http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=44827 로 들어가봅시다. and the next nothing is 45439 가 나옵니다. 한번 더 숫자써보면 너 손아플꺼야.. 라고 나옵니다. 노가다문제네요. 파이썬으로 짜면. 파이썬으로 짤 시에 항상 is뒤에 숫자가 나오는걸 감안해서 is뒤의 값을..

파이썬챌린지.com 3

http://www.pythonchallenge.com/pc/def/equality.html하나의 소문자가 정확히 3개의 대문자 사이에 있다. 그러면 소문자 1개,대문자3개, 소문자1개 대문자3개 소문자 1개 이리 있다는 소리 같습니다. #정규식 모듈 re # -*- coding: euc-kr -*- import urllib2,re req = urllib2.Request('http://www.pythonchallenge.com/pc/def/equality.html') res = urllib2.urlopen(req) reads = res.read() str = re.findall('[a-z][A-Z]{3}([a-z])[A-Z]{3}[a-z]',reads) answer = '' for i in range(0..

파이썬챌린지.com 2

http://www.pythonchallenge.com/pc/def/ocr.html 문자를 찾아라. 아마도 그것들은 책에 있거나 아니면 아마도 그것들은 페이지 소스에 있을것이다. 보나마나 소스에 있겠죠 뭐. 헙. 페이지 소스에 엄청나게 많은 이상한 기호들이 나타나며 그사이에서 문자를 찾으란다. 중략했지만 끝 줄번호가 1257까지 이런 이상한 문자가 이어짐. 저기 저 주석 사이에서 알파벳을 찾으면 된다. 쉽다. 맨날 쓰는 urllib2으로 짜면 됨. # -*- coding: euc-kr -*- import urllib2 req = urllib2.Request('http://www.pythonchallenge.com/pc/def/ocr.html') res = urllib2.urlopen(req) reads ..

파이썬챌린지.com 1

http://www.pythonchallenge.com/pc/def/map.html 0번이 너무 간단해서 1번도 이것만 보고는 아래의 문자열을 k를 m으로, o를 q로, e를 g로 바꿔줬는데 아무 의미가 없는 글자다.. 곰곰히 계속보니 k에서 두글자 뒤가 m( k l m), o에서 두글자뒤가 q,( o p q) e에서 두글자 뒤가 g이다. (e f g) 나머지도 다 바꿔주면 되는건가? str = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamk..

파이썬챌린지.com 0

해킹 문제 아닙니다. 어디서 돌아다니다 찾아낸 파이썬 프로그래밍 관련 문제입니다.http://www.pythonchallenge.com/index.php가 원 주소입니다.Click here to get challenged를 눌러서 한번 문제를 풀어보도록 하죠... http://www.pythonchallenge.com/pc/def/0.html 가 문제 주소이고 url주소를 저 힌트?에 관해서 바꾸라네요? 2^38승 계산하란 소리인가요?print 2**38결과로 나온 274877906944 로 바꾸면 됩니다.. 처음이라 그런지 쉽네요.http://www.pythonchallenge.com/pc/def/274877906944.html

쓰레드,세마포어 기초

쓰레드 모듈. 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..