본문 바로가기

Problem Solving

(21)
[Webhacking.kr] Old - 26 문제 풀이 들어가니 아무것도 안 뜨고 소스 코드 보기 링크만 있네요. PHP 코드가 보이네요. preg_match 함수로 admin을 필터링하는 것을 볼 수 있습니다. 그런데 그 밑에 urldecode 함수가 있네요. 그럼 admin을 URL 인코딩해서 id 파라미터로 넘기면 문제가 풀리겠군요. 하지만 바로 넣으면 서버에 들어가기 전에 이미 admin으로 해석되어 들어가기 때문에, 한 번 더 인코딩해야 합니다. 그래야 서버에 들어갔을 때 %61%64%6d%69%6e로 해석되어 들어갈 테고, 서버의 urldecode 함수로 인해 최종적으로 admin으로 해석됩니다. id 파라미터로 인코딩된 값을 넣어주면 이렇게 문제가 풀리게 됩니다. https://webhacking.kr Webhacking.kr Index Welc..
[Webhacking.kr] Old - 07 문제 풀이 들어가니 어드민 페이지가 보이고, 밑에 인증 버튼이 있네요. 클릭하니 Access_Denied! 문구만 뜹니다. 소스 코드를 확인해 봅시다. PHP 소스 코드와 SQL 쿼리문이 보이네요. 이번 문제는 SQL Injection 문제인 것 같습니다. GET 방식으로 val 파라미터에서 값을 얻어온 뒤 preg_match 함수로 정규식을 이용해 필터링을 하네요. 그 아래에선 랜덤으로 5가지의 쿼리문 중 하나를 선택해 쿼리를 보내고, 결과가 2이면 문제가 풀리는 것 같군요. 바로 시도해볼 수 있는 방법으로 val 파라미터에 2를 넣어볼 수 있지만, 필터링에 걸리기 때문에 문제가 발생합니다. 그래서 이번엔 사칙연산 기호 중 필터링에 걸리지 않는 % 연산자를 이용해서 5 % 3 = 2인 점을 이용해 간접적으로 2가..
[Webhacking.kr] Old - 06 문제 풀이 처음 들어가면 나오는 화면입니다. 아이디와 패스워드가 보이네요. 일단 소스 코드를 확인해 봅시다. PHP 소스 코드가 보이네요. 이 부분은 아이디와 비밀번호를 암호화하는 부분인 것 같습니다. $val_id에 guest, $val_pw에 123qwe가 들어간 뒤 Base64 인코딩을 20번 수행합니다. 마지막으로 str_replace 함수로 몇 개의 문자열을 바꾼 뒤에 최종적으로 쿠키에 대입하네요. 이 부분은 위에서 수행한 작업을 반대로 하는 것으로 보아 암호화된 내용을 복호화하는 코드인 것 같습니다. 쿠키에 기록된 암호화된 아이디와 패스워드를 가져온 뒤에 복호화를 수행하고, 마지막에 아이디가 admin, 패스워드가 nimda가 되면 문제가 풀리는 것 같네요. 그럼 admin과 nimda를 암호화해 쿠키에..
[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초가 걸립니다. 땅의 크기..