본문 바로가기

Problem Solving

(18)
[Webhacking.kr] Old - 24 문제 풀이 제 아이피와 사용자 에이전트(User agent)가 보이고, 그 아래 잘못된 아이피(Wrong IP!)라고 표시가 되어있네요. 일단 소스 코드를 확인해 보겠습니다. PHP 코드가 있네요. 대충 보니 $ip 변수에 클라이언트의 아이피 주소를 담고, 이 값이 127.0.0.1일 경우 문제가 풀리는 것 같습니다. 하지만 아이피 주소는 서버의 REMOTE_ADDR로 얻어오기에 얼핏 보면 불가능해 보이지만, 상단에 extract($_COOKIE); 코드가 있기 때문에 값을 제 마음대로 바꿀 수 있습니다. https://www.php.net/manual/en/function.extract.php PHP: extract - Manual [New Version]This function is very useful for..
[Webhacking.kr] Old - 16 문제 풀이 알 수 없는 별이 보이네요. WASD 키를 누르니 큰 별이 막 움직이네요. 일단 소스 코드를 먼저 확인해 봅시다. 대충 보니 mv 함수에서 별을 움직이게 하는 것 같네요. 매개변수인 cd에 키 코드가 들어가는 것 같고요. 맨 마지막 if 문이 좀 수상해 보입니다. 124번에 맞는 | 키를 눌러보았습니다. 풀렸네요! 그냥 JavaScript 문제인 것 같습니다... https://webhacking.kr Webhacking.kr Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts t..
[Webhacking.kr] Old - 15 문제 풀이 들어가자마자 경고 창이 뜨면서 강제로 메인 화면으로 돌아가지네요. 소스 코드를 한번 확인해 봅시다. 크롬의 경우 주소 앞에 view-source를 넣어주면 쉽게 소스 코드를 확인할 수 있습니다. document.write("[Get Flag]"); 코드가 수상하네요. 주소 뒤에 ?getFlag를 한 번 넣어봅시다. https://webhacking.kr/challenge/js-2/?getFlag 이렇게 입력하고 들어가니 문제가 풀렸네요! https://webhacking.kr Webhacking.kr Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been obs..
[Webhacking.kr] Old - 01 문제 풀이 들어가면 가장 먼저 보이는 화면입니다. view-source 링크를 클릭해 소스 코드를 확인해 보겠습니다. PHP 소스 코드가 보이네요. 중요한 부분은 아래 부분입니다. user_lv 쿠키의 값이 5보다 크면 solve(1) 함수를 호출하는 것으로 보아 저 부분을 실행시키면 될 것 같네요. 하지만 6 이상일 경우 1로 초기화되기 때문에 5보다 크고 6보다 작은 5.5 같은 값을 넣어주면 될 것 같습니다. 쿠키 변조는 간단히 EditThisCookie 확장 프로그램을 사용했습니다. user_lv 값을 5.5로 바꾼 뒤 새로고침을 하면 이렇게 문제가 풀립니다. 가장 기본적인 쿠키 변조 문제였네요. https://webhacking.kr Webhacking.kr Index Welcome Stranger! No..
[Baekjoon] 18111 - 마인크래프트 (C++) https://www.acmicpc.net/problem/18111 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 땅을 파거나 집을 지을 수 있는 게임이다. 목재를 충분히 모은 lvalue는 집을 짓기로 하였다. 하지만 고르지 않은 땅에는 집을 지을 수 없기 때문에 땅의 높이를 모두 동일하게 만드는 ‘땅 고르기’ 작업을 해야 한다. lvalue는 세로 N, 가로 M 크기의 집터를 www.acmicpc.net 블록을 설치하거나 제거해서 땅을 평평하게 만들어 줘야 합니다. 블록을 설치할 때는 1초, 제거할 때는 2초가 걸립니다. 땅의 크기..
[Baekjoon] 1966 - 프린터 큐 (C++) https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 www.acmicpc.net 중요도가 높은 문서를 먼저 뽑고, 중요도가 낮은 문서는 맨 뒤로 밀려나는 상황에 특정 문서가 몇 번째로 인쇄되는지 구하는 문제입니다. ..
[Baekjoon] 11866 - 요세푸스 문제 0 (C++) https://www.acmicpc.net/problem/11866 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 처음엔 문제 이해가 잘 안 갔는데 그냥 처음부터 K번째 사람을 제거하고 다시 그 위치에서 K번째 사람을 제거하고... 계속 반복만 하면 되는 것 같더라고요. 중간의 데이터를 제거해야 하는 상황이라 자료구조 중 하나인 연결 리스트(linked list)를 사용하면 될 것 같다는 생각이 들었습니다. 연결 리스트는 C++에서 STL로 제공하는 list를 사용했습니다. 데이터 제거와 연결 리스트의 끝으로 이동하면 다시 처음으로 되돌리는 부분은 반복자(iterator)를 이용해 쉽게 구현할..
[Baekjoon] 1018 - 체스판 다시 칠하기 (C++) https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net M × N 크기의 보드가 주어집니다. 이를 8 × 8 크기의 정사각형으로 잘라서 색을 칠했을 때 다시 칠해야 하는 정사각형의 최소 개수를 구하는 문제입니다. 입력으로 들어오는 N과 M의 크기가 최대 50인 것을 보고 브루트 포스로 모든 경우의 수를 다 고려해서 풀면 될 것 같다는 생각이 들었습니다. 8 × 8 크기로 자른 보드에서 첫 번째 칸의 색이 하얀색인 경우와 검은색인 경우에 대해 개..