전체 글
※ 문제될 시에 비공개 처리하도록 하겠습니다. ※ 들어가자마자 바로 나가집니다. 이 경우에는 클라이언트 단에서 접근을 제한하므로 자바스크립트을 통해 구현했을 것입니다. 따라서, 자바스크립트의 이벤트를 허용하지 않으면 이 페이지에 접근할 수 있게 됩니다. 저는 Chrome을 사용합니다. 이 부분을 클릭해줍니다. 설정에 들어갑니다. 사이트 설정에 들어갑니다. 자바스크립트를 클릭합니다. 차단에 webhacking.kr을 추가합니다. 설정이 완료되었으면 다시 문제에 들어갑니다. 들어가지네요. 들어가서 소스코드를 보면 '?getFlag'를 URL에 덧붙이면 될 것 같습니다. ※ 자바스크립트를 다시 허용해야합니다.
※ 문제될 시에 비공개 처리하도록 하겠습니다. ※ 소스코드를 분석해봅시다. 먼저, URL(https://webhacking.kr/challenge/js-1/)에서 '.kr'의 index 값을 ul에 저장합니다. 그 값에 30을 곱한 뒤 다시 ul에 저장합니다. 입력 값이 ul과 일치하다면, 입력 값에 ul을 곱한 뒤 앞에 '?'을 붙여 이동합니다. 이렇게만 보면 복잡(?)해보이지만, 콘솔창을 통해 쉽게 해결할 수 있습니다. if문에서 ul과 입력값이 같아야지만 이동하므로 location.href="?"+ul*ul; 과 같이 써줄 수 있습니다. 직접 값을 계산해도 좋습니다. ul 값의 변화는 18 -> 540 이고, 최종적으로 ul * ul = 291600이 됩니다. 또한, ul에 URL 문자열을 저장하는..
※ 문제될 시에 비공개 처리하도록 하겠습니다. ※ 딱 보면 첫 번째 입력란에 sql injection을 시도하고, 이를 통해 FLAG를 얻어 아래에 제출하는 것 같네요. 입력에 따라 어떠한 것들이 결과로 반환되는지 알아볼 때 저는 'guest' - 'admin' - 숫자 - sql injection 기본형(' or 1=1 -- -)의 순서로 입력해봅니다. GET 방식으로 no라는 파라미터가 전송되네요. 반환값으로는 0이 나왔습니다. 또한, 'admin'을 입력했을때도 0이 나옵니다. 그런데 0을 입력하니 출력 결과로 아무것도 나오지 않았습니다. 그리고 1을 입력하니 1이 나왔고, 그 이후의 숫자에는 모두 0이 반환된다는 것을 알 수 있었습니다. 즉, 0은 nothing, 1은 1, 나머지는 0이 반환된다..
※ 문제될 시에 비공개 처리하도록 하겠습니다. ※ GET 방식의 파라미터 val에 값이 정규식으로 표현한 $pat 변수 값에 대해 preg_match 함수에 의해 같다고 판별되면 풀리는 문제같습니다. 해석을 해보죠. [1-3] : 1부터 3까지 중 아무 숫자 하나만 오면 된다. [a-f]{5} : a부터 f까지 문자 중 아무 문자 5개만 오면 된다. . : 모든 문자 중 하나만 와야한다.(공백 제외) * : 앞 글자가 0회 이상 반복되어야 한다. 위를 바탕으로 저만의 payload를 작성해보겠습니다. 1abcde_a내IP주소a%09p%09a%09s%09s
※ 문제될 시에 비공개 처리하도록 하겠습니다. ※ 1, 2, 3의 선택지와 password 입력란이 보입니다. 1과 2에는 각각 Apple, Banana가 들어있고 url 파라미터로 no가 1, 2의 값을 가지는 것을 볼 수 있습니다. 그런데 3은 Secret이라는 문자가 나오면서 no 3의 id가 password 값이라고 나옵니다. 그렇다면 id 값을 알아내야겠네요. true일 때는 no에 3의 값이 반환되어 Secret 문자열이 나타나지만, false 일 때는 no에 0의 값이 반환되어 일치하는 아이디가 없으므로 password 입력란만 나타나게 됩니다. no의 값에서 문자열 검열도 하게 되는데 대충 적어보자면, ascii | " | ' | %20 | = | > | < | select | union ..
※ 문제될 시에 비공개 처리하도록 하겠습니다. ※ 음... 뭐가 됐다는 걸까요? 소스코드를 보겠습니다. 먼저 맨 아래를 보면, User-Agent와 IP를 가지고 guest라는 이름으로 데이터베이스에 질의하는 것을 볼 수 있습니다. 그리고 추가한 이 데이터를 가지고 접속 시에 User-Agent의 값만 비교해 있다면 해당하는 이름으로 접속된다는 사실 또한 알 수 있습니다. SQL query 질의에서는 값을 추가할 때 여러개를 추가할 수 있죠? VALUES('~~', '~~'),('~~', '~~') 이렇게 말이죠. 그러면 헤더에 무슨 짓을 해야할지 알 것 같습니다 ㅋㅋ 이렇게 값을 수정한 뒤 이런 문자열이 나오게 된다면, 데이터베이스에는 'flag'라는 값의 User-Agent와 'kickflag'라는 ..
※ 문제될 시에 비공개 처리하도록 하겠습니다. ※ auth를 클릭해봅시다. 'Access Denied!'라는 문자열이 나오네요. view_source를 통해 코드를 봅시다. 2와 사칙연산에 사용되는 문자, from과 등호, /과 \s를 검열합니다. 이 문제는 UNION을 통해 해결할 수 있습니다. UNION 전의 쿼리문과 후의 쿼리문을 합쳐 테이블을 가지고 오죠. payload를 작성해보겠습니다. 5)UNION(select(CHAR(50)) 괄호의 개수가 1개일 때만 이 문제가 풀립니다. 왜냐하면 두 개 이상일 경우, lv=((5)UNION(select(CHAR(50)))과 같이 UNION 결합이 아닌, lv 하나의 값으로 처리하기 때문입니다. 따라서 괄호가 하나일 때 즉, lv=(5)UNION(sele..