이번 포스트에서는 Python Challenge의 Level 16 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 중간에 핑크색 선이 여러개 들어가 있는 사진이 한 장 출력되어 있다. 단서는 해당 문제의 제목인 "let me get this straight"이다. 즉 정렬해달는 뜻인데, 우선 해당 사진을 다운로드하고 픽셀을 출력해보면 다음과 같이 중복된 숫자가 출력된 것을 알 수 있다. 195가 바로 사진 중간에 보이는 핑크색 선이다. 해당 픽셀만 따로 정렬해서 푸면 될 것으로 보인다. ## 문제 풀이 : 파이썬을 통해 핑크색 선만 따로 정렬해보겠다. ### 공격 코드 : from PIL import Image, ImageChops img = Image.open..
이번 포스트에서는 레나 튜토리얼의 Level 16 문제에 대해 다루겠다. 문제를 실행하면 다음과 같다. ## 문제 해석 : GIF 관련 프로그램이다. 프로그램 종료 시 나타났던 Nag 창을 없애면 되는 것으로 보인다. ## 문제 풀이 : Resource Hacker로 해당 파일을 열어보겠다. Resource Hacker를 통해 확인해본 결과, 우리가 지우고자 하는 Nag의 아이디가 100번인 것을 알 수 있다. 이를 16진수로 변환하면 64이다. 이어서 Ollydbg를 통해 해당 프로그램을 실행해보겠다. 방금 찾은 Nag의 16진수 값이 64이므로 해당 값을 사용하는 명령어를 찾아보겠다. Ollydbg의 Search for All commands 기능을 통해 push 64를 검색해본 결과, 위와 같이 총..
이번 포스트에서는 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..
이번 포스트에서는 레나 튜토리얼의 Level 15 문제에 대해 다루겠다. 문제를 실행하면 다음과 같다. ## 문제 해석 : 해당 프로그램을 실행하면 다음과 같이 2개의 Nag가 출력된다. 2개의 Nag를 제거하면 되는 것으로 보인다. ## 문제 풀이 : 먼저 Ollydbg를 통해 해당 파일을 열어보겠다. 해당 프로그램을 실행하여 Nag가 뜬 상태에서 정지하고 Call stack을 확인해보면 다음과 같다. JMP으로 시작하는 스택이 있다. 해당 스택을 자세히 확인해보겠다. 해당 위치에 BP를 걸고 실행한 다음에, ESP를 확인해보면 다음과 같다. ESP의 바로 윗부분에 CALL 명령어가 있다는 것을 알 수 있다. 해당 명령어는 윈도우를 출력하는 함수로 예상된다. 또한 더 위로 올라가면 JE 분기문이 존재한..
이번 포스트에서는 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..