Python 140

TheBlackSheep Programming 1~3

1. index.php를 방문 후, tryout.php에서 문자열을 가져와서, solution.php?solution="+letters. 와 같은 형식으로 전송. 많이 해본 버튼 빨리 누르기같은거.... #-*- coding: cp949 -*- import urllib2,re req = urllib2.Request('http://www.bright-shadows.net/challenges/programming/get_started/tryout.php') req.add_header('cookie','쿠키') text = re.findall("'(.*?)'",urllib2.urlopen(req).read())[0] print text req = urllib2.Request('http://www.bright-..

beautifulsoup

download : http://www.crummy.com/software/BeautifulSoup/bs4/download/ docs : http://coreapython.hosting.paran.com/etc/beautifulsoup4.html docs가 워낙 정리를 잘해놔서 별로 설명할건 없을듯. 이전에 말했듯이 파싱으로 beautifulsoup과 re모듈을 쓰는데, html등에서 파싱할때는 beautifulsoup가 더 가져오기가 쉽고, 조금 더 세밀한작업. 즉 내가 원하는 부분 등을 뽑아올 때는 re모듈이 더 좋다. 두개를 잘 혼용해서 쓰면 좋을것같다. 그리고 여태까지 모듈 다운로드에서 tar.gz로 끝나는 확장자면 리눅스에서밖에 안되는구나.. 하고 무의식적으로 생각했었는데 아니었다.(이런 멍청한..

python win32api

파이썬에서 win32api함수들을 쓸 수 있음. 쓸수 있는건 알았는데 공식 홈페이지에서도 예제코드가 없어서 어떻게하는지 한참 해매다가.... 삽질로 대충 사용법을 깨달았다. 1. 내가 가장 많이 쓸 함수인 keybd_event함수는 다른 c#이던 c++이던 거기서 쓰는 keybd_event함수와 사용법이 동일하다. 인자 순서도 같고, 인자값도 같다. 2. 가상 키 코드표 http://lab.cliel.com/entry/%EA%B0%80%EC%83%81-Key-Code%ED%91%9C 만 참조하면 키보드 입력은 거의 다 된다. ctrl+c같은 조합키도 된다 3. 또다른 많이 쓸 함수인 mouse_event도 나머지 언어의 api하고 다 같다. mouse_event함수의 두,세번째 인자는 현재의 마우스 커서..

WeChall Training: ASCII, Encodings: URL, Training: Crypto - Caesar I

Training: ASCII # -*- encoding: cp949 -*- ascii = '84, 104, 101, 32, 115, 111, 108, 117, 116, 105, 111, 110, 32, 105, 115, 58, 32, 101, 97, 101, 104, 109, 115, 98, 98, 98, 105, 110, 105'.split(', ') print ''.join(map(chr,map(int,ascii))) Encodings: URL # -*- encoding: cp949 -*- import urllib2 url = '%59%69%70%70%65%68%21%20%59%6F%75%72%20%55%52%4C%20%69%73%20%63%68%61%6C%6C%65%6E%67%65%2F%74%72%..

WeChall Training: Net Ports, Can you read me

Training: Net Ports희한하게도 소스 포트를 설정하는 문제이다.(이런 문제는 처음 봄.) 소켓으로 보낼 생각을 하고,소켓 옵션 설정하는 함수인 setsockopt함수에 뭔가 인자가 있어서 그걸로 어떻게 설정하면 될거라고생각했는데 docs에 찾아봐도 없다.(내가 못찾은걸수도.) 구글링해보니http://bytes.com/topic/python/answers/555361-how-set-source-ip-adress에 어떤 분이 해결책을 적어주셨다.서버를 여는것처럼 bind로 내 아이피 주소를 열고, 포트 인자로는 내 포트를 준다. 그 후에 바로 connect()함수로 내가 원하는 서버에 연결하면 bind된 아이피주소와 포트로 보내진다고 한다. 신기함. # -*- encoding: cp949 -*-..

WeChall Training: Programming 1, Flow Over Astronomy

Training: Programming 1 아주 일반적인 요청 빠르게 보내기 문제. # -*- encoding: cp949 -*- import urllib2 req = urllib2.Request('http://www.wechall.net/challenge/training/programming1/index.php?action=request') req.add_header('cookie','쿠키') message=urllib2.urlopen(req).read() req = urllib2.Request('http://www.wechall.net/challenge/training/programming1/index.php?answer='+message) req.add_header('cookie','쿠키') pri..

유니코드, christmasctf a letter to her 500, los xavis

모든 한글 전체 출력 for i in range(0xd7a4-0xac00): print unichr(0xac00+i), #print '\n',unichr(0xac00),unichr(0xd7a3) #시작은 0xac00(가)부터 끝은 0xd7a3(힣)까지 어떤 웹사이트에 한글을 인코딩해서 보낼 시. urllib2.quote('가'.encode('utf-8')) 처럼 인코딩하면 utf-8로 변환해서 전송. christmasctf web500 (못풀었던거 writeup보고 코드만 짜봄.) 맨날 느끼는건데 writeup을 보면 풀수있는건데 막상 풀라고 하면 못푼다 ㅠㅠ writeup에서 루비 코드로 4줄?인가면 짜던데;파이썬은 [가..힣] 이런거 없나... # -*- encoding: cp949 -*- impor..

lob gremlin->cobolt

이것도 그냥 손으로 풀어보니까 대충 이해가서 프로그래밍적으로 다 해주는거 만들려다가 페이로드 출력까지 하고 끝.... 기왕이면 쉘까지 실행시켜보고 싶었지만 그게 되지를 않는다..... gdb를 알아서 분석해서 스택크기 계산하는 그런것도 자동화 시켜보려고 했는데 그건 오바일듯; 1. execve의 시스템 콜 번호를 /usr/include/asm/unistd.h에서 가져옴. 2. 가져온 시스템 콜 번호로 어셈블리어를 짠 후 objdump까지 완료한 결과값을 obj라는 파일에 넣음. 3. obj에서 정규표현식으로 opcode부분만을 공백으로 잘 연결해서 shells라는 파일에 넣음. 4. shells파일에서 opcode를 잘 가져와서 문자열로 잘 캐스팅 후 shell이라는 환경변수로 등록함. 5. 환경변수의 ..

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...

Security Override Programming 11~12

캡챠를 프로그래밍적으로 인식해서 제한된 시간안에 보내면 성공이다. 이전 글에서 pytesser을 언급했었는데 그때 풀어보려고 했었는데 풀라고 나온 캡챠가 너무 작아서 그냥 포기했었다. 우연찮게 돌아다니다가 http://kthan.tistory.com/176 요 글을 보았는데. 요 글에서는 캡챠를 인식하기 쉽게 변형하는 부분이 맨 아래에 나오는데 나도 이걸 보고 생각을 해봤다. 글자가 너무 작아서 인식하기 어려우면 글자를 크게 하고, 인식하기 쉽게 픽셀을 변경해주면 될거같은데? 라고 생각해서 PIL공식 홈페이지에서 이것저것 찾아서 시도해봤더니 됬다. 내가 한 작업은. 1. 이미지를 받아온다. 2. 이미지를 보정한다. 이미지 크기를 늘리고, 글자가 있는 부분의 픽셀은 진하게, 글자가 없는 부분의픽셀은 그냥 ..

gui 멀티쓰레드 채팅 서버, 클라이언트

방학때 몇일 날잡아서 멀티쓰레드 채팅 서버를 만들어보려고 했는데 의외로 여태까지 한 수련이 헛되진 않았는지 하루동안 열심히 투자하니까 틀은 완성됬다. 이번 코딩을 하면서 오히려 서버 클라이언트 사이의 작동보다는 유니코드 인코딩 관련 조사를 가장 많이 한것 같다. 근데 소스코드를 다시 살펴보면 정말 초심자가 짠 어색하고 더러운 코드다.... 방법이 있긴 한거같은데 몰라서 야매로,더럽게 구현한것도 많다. 실행결과. 첫 실행 결과. 왼쪽 서버, 오른쪽 클라이언트이다. 서버는 gui화 안했고 클라이언트만 gui. 접속하면 접속한 유저의 아이피주소와 내가 유저몇인지 뜸.. 왼쪽이 서버이고 클라이언트를 하나 더 실행시켰을때 화면. 원래 있던 유저 1에도 유저 2가 접속했다고 뜨는것을 확인할수 있다. 메시지를 쓰고 ..

Python/2.7 for fun. 2014.12.22

pytesser모듈.

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

Security Override Programming 10

문제가 moo directory에서 아래에 랜덤으로 3개 나온 문자열이 나온 서브디렉터리의 위치를 찾아서 서브디렉터리:문자열; 형식으로 이어주는건데.. moo directory가 뭐지? 싶어서 이것저것 찾아봤다. 포럼에서 글을 보니 http://securityoverride.org/challenges/programming/10/moo/ 가 moo 디렉터리를 말하는 거였다.. 브루트 포스 공격하듯이 하나하나 서브디렉터리로 들어가봐서 해당 문자열이 존재하면 이어주면 된다. 오히려 level9보다 더 쉽다. # -*- coding: euc-kr -*- import urllib2,re req = urllib2.Request('http://securityoverride.org/challenges/programmi..

Security Override Programming 9

랜덤으로 미국식으로 달 일, 년; 형식의 날짜가 3개씩 나온다. 그럼 그 날짜의 해당 요일을 ;로 구분지어서 보내면 된다. 처음에는 해당 년도에서의 요일 구하는 알고리즘까지 직접 구현하려고 귀찮아 죽겠는데 관련 정보를 찾아다니던 도중... datetime이라는 모듈의 존재가 떠올랐다! 날짜 관련된 모듈인데 아마도 여기서 잘 찾아보면 해당 년도를 입력하면 요일이 나오는 함수가 있을거라 생각하고 찾아봤더니 있었다. 다른 분의 티스토리인데 정리가 잘 되어있다. 링크 여기서 datetime.isoweekday() 라는게 있는데. 월요일은 1을 반환하고 ...... 일요일은 7을 반환한다. 이것을 잘 이용해서 포맷을 만들어 보내면 된다. 주의점 : 문제에는 답변 포맷을 "Monday; Tuesday; Wednes..

Security Override Programming 8

level 8. 요러한 원이 있다. A의 반지름, CD,AB의 길이가 주어져있고 A,B는 정원이다. 주어진 3개의 정보만으로 BC의 길이를 구하는건데. 오른쪽 사진은 예시값을 대입한 것이다. 피타고라스로 잘 변형해서 풀면 된다. 코드를 짜 봤는데.. 반반의 확률로 에러가 뜬다. math domain error라고 뜨는데 아마도 루트씌운값을 몇자리까지 쓰겠다. 그런 말 없이 바로 제곱에 쓰니 범위가 길어져서 에러가 뜨는 것 같다. 답이 나오는 경우가 있어서 고치기 귀찮다. import urllib2,re from math import * req = urllib2.Request('http://securityoverride.org/challenges/programming/8/index.php') req.add..

Security Override Programming 6~7

level 6. x^2 + 3x + 4 같은 다항식은 (x+1)(x+3) 과 같이 변형해서 보내야 한다. 몇번 돌려보니 +만 나오고, 대략 -50000~0사이의 값이 해가 된다. 그냥 가장 단순한 알고리즘으로 하나하나 대입해봐서 값이 맞으면 그걸 값으로 정하는 알고리즘으로 짰다. 주의점 : 방정식을 만들어서 그냥 보내면 안된다. 데이터 전송시 url인코딩되어져서 보내지는데 (,)가 인코딩되지 않고 그냥 보내면 서버에서 알아먹질 못한다. urllib2.quote()같은걸로 한번 인코딩해서 보내야 한다. import urllib2,re,math req = urllib2.Request('http://securityoverride.org/challenges/programming/6/index.php') req...

Security Override Programming 4~5

level 4. 정육면체가 하나 떡하니 그려져 있는데, 1에서 2까지 가는 최단경로를 찾는 문제이다. 조건은. 정육면체 중앙을 통과해서 갈 수 없음, 가장 짧은 거리를 찾는 것, 소숫점 부분은 버림. 등이다. 그림이 있어서 더 복잡해보일지도 모르지만 level3보다도 간단하다. 어떤 길이가 나오면 루트( (2*길이)^2+(길이)^2 ) 와 같은 형식으로 계산하면 된다.(피타고라스) import urllib2,re,math req = urllib2.Request('http://securityoverride.org/challenges/programming/4/index.php') req.add_header('cookie','PHPSESSID=쿠키') length = float(re.findall("\s*(...

Net-Force Programming 4~5,6?

4. app.txt에서 8방향으로 123이 나타나는지 검사해서 나타난 갯수를 구하는 문제이다. 이거 뭔가 알고리즘이 있을텐데 내 낮은 프로그래밍 실력으로는 일일히 검사하는방법밖에 모르겠다. 으아아아ㅏ아아 더러워 이거 좋은 알고리즘 아시는분 좀 알려주세요... import urllib2 req = urllib2.Request('http://www.net-force.nl/challenge/level604/aap.txt') req.add_header('cookie','PHPSESSID=1ltc3b2dod3nc2ft8jbc47irt0') num = urllib2.urlopen(req).read() num = num.split('\n') cnt = 0 for i in range(0,len(num)): for j ..

Net-Force Programming 1~3

http://www.net-force.nl/ 1. 의사 코드가 쓰여져있는데 의사 코드대로 프로그래밍해보면 다음과 같다. x = 1 y = 1 answer = 1 while 1: answer = x*y + answer + 3 if x==525: break x += 1 y += 1 print answer 2. prog2.php에서 숫자를 받은 뒤 2초안에 answer = (number * 3 + 2) - 250처럼 계산해서 prog2.php?solution=12345와 같은 형식으로 전송해라. import urllib2,re req = urllib2.Request('http://www.net-force.nl/challenge/level602/prog2.php') page = urllib2.urlopen(re..

webhacking.kr 31

webhacking.kr 서버에서 내 주소로 10000~10010사이의 랜덤한 숫자의 포트로 패킷을 쏜다. 그걸 그냥 받아먹으면 된다. 1. 공유기를 쓰는 사람은 10000~10010포트를 다 포워딩해준다. 2. 방화벽 규칙에서 허용하던지, 아니면 문제 풀 동안 방화벽을 잠시 끈다. 3. nc를 실행시키거나 프로그램을 짜서 패킷을 받는다. nc를 실행시키면 커맨드창 하나당 하나밖에 nc를 못띄우는데, nc를 한개만 띄우고 새로고침을 여러번 해서 내가 설정한 포트로 오게하거나, nc를 10개를 띄우면 패킷을 한방에 받을 수 있다. 아니면 nc를 10개를 실행시키는것과 같은 효과의 코드를 짤 수도 있다. import socket,threading,urllib2 def bind(port): s = socket..

Enigmagroup missions/programming 9

8번은 뭔지 잘 모르겠다. 9번 같은경우 실행시키면 요런 이미지가 나오는데. 이 이미지와 숫자의 뜻은 다음과 같다. 1행 : 2*하트+별+사각형 = 11492행 : 3*삼각형+원 = 1364.... 1열 : 2*삼각형+사각형+하트 = 13852열 : 하트+3*삼각형 = 1525..... 이런식인데 이걸 연립방정식을 만들어서 각각 하트,삼각형,별,사각형,원 이 5개의 값을 방정식을 푼 뒤에 값을 찾아내서 2초안에 전송하면 성공이다. 미지수는 5개이나 식은 10개가 나오니 반드시 푸는게 가능하다. 풀려면 미지수 5개에 식 5개만 나와도 된다. 단순 프로그래밍만 좋아해서는 몰랐을텐데 이번에 듣는 수업중에 수치해석이라는 수업이 있는데, 해당 수업에서 매트랩으로 해당 미지수의 계수와 해당 값만 알면 구할수 있는 ..

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..

Enigmagroup missions/programming 7

페이지를 열어보면 We need you to steal data from the Research department. 부분에서 빨간색 부분이 계속 바뀌고, 상자 내부의 Company: N.O.G.N.A 부분이 계속 바뀐다. 위의 두 빨간색 부분을 얻어와서 저장해두고 위의 department라는 이름의 회사의 budget총액을 계산해서 전달하면 된다. 본격적으로 정규표현식을 쓰기 시작했는데 이전의 쳐다보기도 싫은 더러운 코드보다 더 깔끔해진걸 느낄수 있었다. import urllib2,re req = urllib2.Request('http://www.enigmagroup.org/missions/programming/7/') req.add_header('cookie','내 쿠키값') page = urllib..

hack this site Programming missions : Unscramble the words

외국워게임 https://www.hackthissite.org 의 프로그래밍 문제이다. 우연찮게도 enigmagroup.org가 막혀서 이리로 와서 프로그래밍 1번을 풀어봤는데 이게 enigmagroup 에서 마지막으로 풀었던 프로그래밍 6번과 비슷한 문제이다. 들어가보면 단어가 섞여져 있고 사전파일을 하나 준다. 여기서 찾아서 알맞는 단어로 만든다음 word1,word2~이런형식으로 보내면 된다. 외국서버라 그런지 응답시간이 느리다. 그래서 30초나 준 듯 싶다. enigmagroup 6번을 더럽게 문자열을 가져오는것과 달리 이번부터는 정규식을 써서 가져왔다. 까먹었던 건데 파일열때는 f = open('wordlist.txt','r')for line in f: print line 요런식으로.. 또 re..

Enigmagroup missions/programming 6

페이지를 열면 섞인 단어 리스트가 나온다. ex) o)orrcspao ls a lte p(mfslntmmptiire punes rocoe ggnaostrheay acinkkb eDBSnop eEuSponS oeskoiigopcinno gpmoegr inua ecle aknnrip nardviam rtroten ielntuvylairb ncionlqitsej gaop)D ( d nPtfoehi cgM( ae)nmeihalxX SBl etner)ud os aDefboh(ce taoieln t (rse)PclpfrTofFro honkgio )f(pone utppscrfeut http://www.enigmagroup.org/missions/programming/6/keywords.txt에 사전 파일이 있고, 저..

Enigmagroup missions/programming 4

대충 흑백이 이진수같다는건 알았지만 어떻게할줄 몰라서 여기저기 물어봤었는데.... 사진에서 1픽셀씩 얻어와서 8자리씩 끊은 후 그걸 십진수로 만들고 아스키코드로 만들면 글자가 된다고 한다. 근데 키값은 얻었는데 문제에 image.php로 전송하라고만 있을뿐 GET인지 POST인지 변수는 뭐로줘야하는지 안알려줘서 이것저것 다해봤는데도 답이 안나온다. 그래서 그냥 답만 내고 포기.... import os,sys,urllib2,Image def download_photo(img_url, filename): file_path = "%s%s" % ("C:\\Users\\Ko\\Documents\\Visual Studio 2012\\Projects\\PythonApplication27\\", filename) do..

Enigmagroup missions/programming 5

4번은 지식이 부족해서인지 잘 모르겠다. 나중에 다시 풀어봐야겠다. 5번은 이상한 언어가 중간에 있고 실행시마다 바뀐다. 미션은 이 코드를 분석해서 그 분석한 결과값을 ?ans=의 GET방식으로 보내는게 목표이다. 이건 brainfuck이라는 언어이다. 이 부분을 읽어와서 해석하면 된다. 근데 구글에 brainfuck interpreter라고 쳐봐도 자바스크립트만 나와서 파이썬용으로 찾았다. https://github.com/DoctorLai/PyUtils/blob/master/bf.py 여기에 어떤분이 친절하게 올려주셔서 가져다가 조금 수정해서 썼다. import urllib2 def bf(src, left, right, data, idx): """ brainfuck interpreter src: so..

Enigmagroup missions/programming 3

image.php에 랜덤으로 이미지가 생기는데 그 이미지를 받아서 rgb값을 분석한 뒤에 1초안에 rgb값을 post형식으로 보내라. 형식은 color=255;255;255&submit=1처럼 한다. 이미지 분석 모듈.(pil) http://kylog.tistory.com/17 http://effbot.org/downloads 여기서 참고받아서 pil모듈로 이미지를 분석하였고, url에서 이미지를 다운받는 부분이 잠시 헷갈렸는데,(이전까지는 그냥 cmd에서 wget으로 받았는데, 이 문제를 풀기 위해서는 wget으로 되지 않았다. wget으로는 세션값을 추가할수 없기 때문. wget으로 받았을시 그냥 검은색 이미지만 다운받아졌다.) 여기서 또 찾았다.http://marobiana.tistory.com/1..