이번 포스트에서는 Python Challenge의 Level 18 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 문제의 제목을 보면 "can you tell the difference?"라고 되어있다. 해당 사진의 차이는 바로 밝기(brightness)이다. brightness.html로 접속하면 진짜 문제가 보인다. ### 공격문 : http://www.pythonchallenge.com/pc/return/brightness.html ### 실행 결과 : 개발자 도구를 확인해보면 다음과 같이 deltas.gz라는 파일이 존재하는 것을 확인할 수 있다. 해당 파일을 다운로드해서 분석해보면 되는 것으로 보인다. ## 문제 풀이 : gz파일을 압축해제하면 다음과 ..
이번 포스트에서는 Python Challenge의 Level 17 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 화면 좌측 하단에 보면 Level 4에 나왔던 사진이 다시 나온 것을 확인할 수 있다. Python Challenge (Level 4) 이번 포스트에서는 Python Challenge의 Level 4 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 사진이 한 장 달려 있다. 사진을 클릭하면 다음과 같은 화면이 jy05un.tistory.com Level 4에 들어가서 쿠키를 확인해보면 다음과 같이 파라미터를 busynothing을 쓰라고 한다. 파라미터만 busynothing으로 바꾼 다음에 레벨 4와 같은..
이번 포스트에서는 Python Challenge의 Level 16 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 중간에 핑크색 선이 여러개 들어가 있는 사진이 한 장 출력되어 있다. 단서는 해당 문제의 제목인 "let me get this straight"이다. 즉 정렬해달는 뜻인데, 우선 해당 사진을 다운로드하고 픽셀을 출력해보면 다음과 같이 중복된 숫자가 출력된 것을 알 수 있다. 195가 바로 사진 중간에 보이는 핑크색 선이다. 해당 픽셀만 따로 정렬해서 푸면 될 것으로 보인다. ## 문제 풀이 : 파이썬을 통해 핑크색 선만 따로 정렬해보겠다. ### 공격 코드 : from PIL import Image, ImageChops img = Image.open..
이번 포스트에서는 Pwnable의 asm 문제에 대해 다루겠다. 문제 코드는 다음과 같다. #include #include #include #include #include #include #include #include #define LENGTH 128 void sandbox(){ scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_KILL); if (ctx == NULL) { printf("seccomp error\n"); exit(0); } seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 0); seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0); seccomp_rule_add..
이번 포스트에서는 Python Challenge의 Level 15 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 달력이 출력되어있다. 달력 우측 하단에 위치하는 오른쪽 달력을 보면 2월이라고 되어있는데, 29일까지 있다는 것을 알 수 있다. 즉 윤년인 것이다. 일단 1**6년 중 윤년이면서, 1월 1일이 목요일이면서 6으로 끝나는 해를 찾으면 될 것 같다. ## 문제 풀이 : 파이썬을 통해 1**6년 중 윤년을 구해보겠다. ### 공격 코드 : import calendar leap_years = list() for i in range(1006, 2000, 10): curr_year = i if(calendar.isleap(curr_year)): if(calen..
이번 포스트에서는 Python Challenge의 Level 14 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : italy라는 회오리빵 사진과 바코드처럼 보이는 사진 한장이 출력되어 있다. 개발자 도구를 확인해보니 아래와 같이 "100*100 = (100+99+99+98)"이라는 힌트가 있다. 100*100은 가로와 세로의 길이라고 생각할 수 있고, 100+99+99+98에서 총 4개의 수가 나와 있으므로 사각형이라고 생각할 수 있다. 즉 100(외부)에서 1(내부)로 크기를 줄이면서 생긴 회오리형태라고 볼 수 있다. ## 문제 풀이 : 이미지를 다운로드해서 크기를 출력해보겠다. ### 공격 코드 : from PIL import Image img = Image..
이번 포스트에서는 Lord of SQLInjection의 zombie문제에 대해 다루겠다. 문제를 클릭하면 다음과 같이 쿼리와 php코드가 표시된 화면을 볼 수 있다. ## 문제 해석 : 해당 문제는 preg_match() 함수를 통해 rollup, join, ace, @를 필터링하고 있다는 것을 알 수 있다. 또한 pw값을 알아야 문제를 해결할 수 있는 것으로 보인다. ## 문제 풀이 : ace가 필터링 처리되어 replace() 함수를 사용하지 못한다. 따라서 다른 방식으로 접근해야 한다. DB의 information_schema에는 processlist이라는 테이블이 존재한다. 해당 테이블에는 현재 실행 중인 쿼리가 저장되어 있다. 따라서 이를 활용하면 문제를 쉽게 해결할 수 있다. ### 사용할..
이번 포스트에서는 Python Challenge의 Level 13 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : evil한테 전화하라고 한다. 개발자도구를 확인해보니 다음과 같은 phonebook.php라는 페이지가 존재한다. 해당 페이지를 조사해보면 될 것 같다. ## 문제 풀이 : phonebook.php에 접속해보겠다. XML faultCode 105가 뜬 것을 확인할 수 있다. 이는 xml-rpc 프로토콜을 통해서 호출할 수 있다. 파이썬 코드를 통해 해당 페이지를호출해보겠다. ### 공격 코드 : import xmlrpc.client as xc url = "http://www.pythonchallenge.com/pc/phonebook.php" serv..
이번 포스트에서는 Python Challenge의 Level 12 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 카드를 5군데로 나눈 그림이 한 장 출력되어 있다. 개발자 도구를 통해서 확인해본 결과, 사진의 이름이 evil1.jpg로 되어있는데, 이 말인 즉슨 evil2.jpg, evil3.jpg도 존재할 수 있다는 말이다. ## 문제 풀이 : evil2.jpg를 열어보면 다음과 같다. jpg가 아닌 gfx라고 되어있다. 파일의 확장자를 gfx로 바꾸면 바로 gfx 파일이 저장되었다. 또한 evil3.jpg를 확인해본 결과 다음과 같다. 더 이상의 evils가 없다고 한다. 혹시나 해서 evil4.jpg를 입력하고 확인해보았다. 사진이 출력되지 않는다. 그러..
이번 포스트에서는 Python Challenge의 Level 11 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 사진 한 장만 달려 있는 페이지다. 페이지의 제목을 확인해보면 odd와 even이 적혀있는데, 그림의 픽셀을 홀짝으로 나누면 되는 것으로 보인다. ## 문제 풀이 : 파이썬을 이용하여 그림의 픽셀을 홀짝 별로 나눠서 저장해보겠다. ### 공격 코드 : from PIL import Image with Image.open("cave.jpeg") as img: odd_img = Image.new("RGB", img.size) even_img = Image.new("RGB", img.size) for h in range(img.height): for w i..