Introducing the self-driving bicycle in the Netherlands
Memcache Basics
Webhacking.kr 25번 문제
25번문제는 150스코어 문제이다. 문제 난이도 상단히 낮아서 쉽게 클리어했다. 문제를 보면 file이라는 파라미터값에 기본값으로 hello라는 값이 대입되어있다. 확장자는 기재되어있지않다. password와 password.php를 대입해서 다시 요청해본다. 아무런 내용이 나오지않는것을보아 해당 파라미터값 마지막부분에 “.txt”확장자가 붙는 것 같다. 이 부분을 우회한다면 우리는 저 password파일을 볼 수 있을 것 이다. 이때는 ‘null’ 값을 이용하면된다. 문자열의 끝으로 인식하기때문에 ‘password.php%00’ 값으로 대입하고 요청하면 문제를 클리어할수있다. 합계 12 -rw-r–r– 1 oldzombie users 12 5월 14 00:57 hello.txt -rw-r–r– 1 oldzombie users 1158 9월 5 01:24 index.php -rw-r–r– 1 oldzombie users 57 5월 14 00:57 password.php
Webhacking.kr 24번 문제
24번문제는 100 스코어 문제이며 잠시 쉬어가는 문제라고도 할 수 있다. 해당 문제를 보면 client ip,agent 기재되어있고 상단에는 틀린 아이피라는 문구를 볼 수 있습니다. 소스코드를 보면 index.phps가 주석되어있는걸 볼수있습니다. 해당 파일로 접근합니다. 접근하면 아래와 같은 코드가 보입니다. extract($_SERVER);extract($_COOKIE);if(!$REMOTE_ADDR) $REMOTE_ADDR=$_SERVER[REMOTE_ADDR];$ip=$REMOTE_ADDR;$agent=$HTTP_USER_AGENT;if($_COOKIE[REMOTE_ADDR]){$ip=str_replace("12","",$ip);$ip=str_replace("7.","",$ip);$ip=str_replace("0.","",$ip);}echo("client ip$ipagent$agent");if($ip=="127.0.0.1"){@solve();}else{echo("Wrong IP!");} if($_COOKIE[REMOTE_ADDR]){ 이 구문을 참고하면 어떤식으로 문제를 solved 할수있는 알수있습니다. solve 조건은 ip라는 변수에 값이 127.0.0.1이어야합니다. REMOTE_ADDR 값이있고 ip라는 변수에 해당 값과 함께 ‘12’,’7.’,’0,’값을 replace 합니다. 따라서 우리는 해당 조건을 만족하기 위해 REMOTE_ADDR쿠키값에 해당 값(112277..00..00..1)을 대입해주면 됩니다. 112277..00..00..1 replace되는 값을 보고 이와같이 수정하면 해당 조건을 만족시킬수있습니다. console 을 통해서 간단히 입력하고 클리어 docum ent.cookie=”REM O TE_ADDR= 112277..00..00..1;”; 참고 extract : 배열에서 현재 심볼 테이블로 변수를 입력
XML 인덴트 강제 조정
#!/usr/bin/python # -*- coding: utf-8 -*- import re line = 'Cats are smarter than dogs' matchObj = re.match(r'dogs', line, re.M | re.I) if matchObj: print 'match --> matchObj.group() : ', matchObj.group() else: print 'No match!!' searchObj = re.search(r'dogs', line, re.M | re.I) if searchObj: print 'search --> searchObj.group() : ', searchObj.group() else: print 'Nothing found!!'
최단 경로 찾기: Dijkstra 알고리즘
Facebook and memcached - Tech Talk
What will you make better? Google Science Fair 2016
Webhacking.kr 23번 문제
이제 슬슬 문제 풀이하는게 좀 귀찮아지고있다. 푸는건 쉬워도 푸는 과정을 블로그에 포스팅하는건 좀 귀찮은 과정이다. 그래서 내 풀이글들을 보면 처음에는 정성 스럽게 사진 하나하나, 개념 하나하나 모두 짚고 넘어가는 글들이많은데 후반부로 갈수록 글들이 매우 짧아진다. 일 때문에 몸도 마음도 많이 지쳐있어서 그런걸지도 모르겠다. 조금 쉬고 돌아오면 활력을 되 찾을지도… 자, 각설하고 문제 풀이를 시작한다. 23번문제는 200 스코어 문제다. 들어가면 폼과 함꼐 아래와같은 문구가 기재되어있다. 보아하니 XSS(‘Cross-site scripting’) 문제다. XSS자체는 난이도가 매우 낮은 공격이지만 상황에 따라서 치명적인 피해를 입힐수도있는 공격법이다. 예전에는(제 얘기아닙니다만..) 주로 게시물이나 프로필 이외 취약점등을 통해서 많이 공격했고 해당 공격법을 통해서 제2차피해 예를 들어 브라우저 취약점(‘최신 브라우저 쓰세요.’)을 통한 공격등으로 어마어마한 피해를 입힐수있다. 해커는 수 많은 카드를 가지고있다. 그 카드들중의 XSS가 하나의 카드가 될 수도 있다. 하지만 요즘은 왠만한 서비스에서 XSS하기 힘들다. 오랜시간동안 수많은 보안법이 나왔고 이제는 쉽게 필터링만으로도 걸러낼수있다. 여기서 필터링을 우회한다면 얘기는 또 달라지겠지만.. Your mission is to inject <script>alert(1);</script> 우리는 폼에 저 스크립트를 넣어주면 된다. 일단...
python naming convention, naming rule
Naming module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_CONSTANT_NAME, global_var_name, instance_var_name, function_parameter_name, local_var_name. Names to Avoid single character names except for counters or iterators dashes (-) in any package/module name double_leading_and_trailing_underscore names (reserved by Python) Naming Convention “Internal” means internal to a module or protected or private within a class. Prepending a single underscore (_) has some support for protecting module variables and functions (not included with import * from). Prepending a double underscore (__) to an instance variable or method effectively serves to make the variable or method private to its class (using name mangling). Place related classes and top-level functions together in a module. Unlike Java, there is no need to limit yourself to one class per module. Use CapWords for class names, but lower_with_under.py for module names. Although there are many existing modules named CapWords.py, this is now discouraged because it’s confusing when the module happens to be...
python 교집합, Intersection of two lists
c1 = [1, 6, 7, 10, 13, 28, 32, 41, 58, 63] c2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]] c3 = [[13, 32], [7, 13, 28], [1,6]] c3 = [filter(lambda x: x in c1, sublist) for sublist in c2]
AWS 루트계정 활성화 & PasswordAuthentication
AWS 보안상의 이유로 key pair file을 이용하도록 권장하고있다. 하지만 개발을 할때마다 너무 불편해서 ROOT 계정을 활성화한다. ubuntu@ip-172-31-30-99:~$ sudo passwd rootEnter new UNIX password: Retype new UNIX password: passwd: password updated successfullyubuntu@ip-172-31-30-99:~$ su 루트계정 패스워드를 설정한후에 해당 계정으로 로그인합니다. 그리고 ssh 설정 파일을 조금 수정해줍니다. vi /etc/ssh/sshd_config PasswordAuthentication yes ssh 데몬을 다시 Restart 해줍니다. sudo service ssh restart
Webhacking.kr 22번 문제
22번 문제는 500스코어 문제입니다. 이번 문제도 Blind SQL Injection 관련 문제입니다. 아침에 회사에서 풀이하고있네요. 문제를 보면, login,join 두개의 폼이있고 맨 아래 힌트가 기재되어있다. echo("hi! $id");echo("your password is $pw");if($id=="admin") echo("good! Password is $solution"); admin 계정으로 몇번의 로그인 삽질 후, 테스트 계정(“hax0r , passme”) 생성 후 해당 계정으로 로그인했습니다. user key 에 fa1b7a72586b7dfde844a4a2b8ea1bfe 값이 출력되네요. 32자(128bit)로 구성된 값으로 MD5를 유추해볼수있습니다. 이전 풀이에서 hash와 base64의 개념을 짚었습니다. 이번에는 MD5의 개념을 간략하게 짚고넘어가겠습니다. MD5(Message-Digest algorithm 5)는 128비트 암호화 해시 함수입니다. 초창기 시절 안전하다 평가되었지만 컴퓨터의 엄청난 발전으로 인해 해쉬크래쉬를 통한 MD5크랙이 가능해졌습니다. 때문에 현재는 사용을 권장하지않고있습니다. 하지만 아직도 일부 오래된 서비스에서는 MD5로 패스워드를 암호화하고있으며 이를 통해 공격자(해커)는 쉽게 유저의 패스워드를 알수있습니다. 추가로 패스워드는 대부분 공통으로 사용하는 유저들이 많아 타 서비스 (구글,페이스북,인스타그램)등에도 제2의 피해가 발생할수있으니 프로그래머는 이를 가볍게 여겨서는 절대 안됩니다. 네이버D2게시물 중 “안전한 패스워드 저장(http://d2.naver.com/helloworld/318732)”이라는 포스트가 있습니다. 한번씩 읽어보면 아주 좋은 내용이니 참고하실분은 참고하시길 바랍니다. md5의 가장 큰 특징은, 어떤길이의 문자라도 _128비트로 만들어서 출력_시킨다는...
[GIT] Pro GIT
출,퇴근 지하철에서 틈틈이 읽기 좋은 자료. 직접 빌드해서 사용할수있음. https://github.com/progit/progit/tree/master/ko https://git-scm.com/book/ko/v2
Pots of gold game
Pots of gold game: Two players A & B. There are pots of gold arranged in a line, each containing some gold coins (the players can see how many coins are there in each gold pot - perfect information). They get alternating turns in which the player can pick a pot from one of the ends of the line. The winner is the player which has a higher number of coins at the end. The objective is to “maximize” the number of coins collected by A, assuming B also plays optimally. A starts the game. The idea is to find an optimal strategy that makes A win knowing that B is playing optimally as well. How would you do that? At the end I was asked to code this strategy! 구글전화 면접으로도 유명한, Pots of gold game 이 게임의 목표는 A가 먼저 게임을 시작할 때 A가 가장 많은(Maximize) 금화를 가질...