전체 글 (79) 썸네일형 리스트형 [Webhacking.kr] old-10번 문제 풀이 10번문제는 뭐가 이렇게 길게 있다. 코드를 살펴보니 onclick에 무언가 정보가 적혀있다. 저 글자를 한번클릭하면 우측으로 1px움직이며, 1600px가 되면, go라는 파라미터에 현재 위치를 담아 전송한다. 즉 저 글자의 위치를 클릭을 통해 1600px로 이동시키면 문제가 풀린다. 풀이방법은 정말 많지만 간단하게는 두개가 있다. 직접 go 파라미터에 1600px를 넣어, 요청을 시도한다. javascript 코드 수정을 통해 1px씩 움직이던 것을 1600px씩 움직이도록 수정한다. 먼저 첫번째 풀이방법은 코드에 나온대로 ?go=1600px를 uri뒤에 붙여주는 것이다. 다만 여기서 그냥 이렇게만 진행하면 no hack을 만날 수 있다. 왜냐하면 해당 문제는 링크 클릭을 통해서 풀리도록 의도한 문제.. [Webhacking.kr] old-09번 문제 풀이 9번 문제는 1, 2, 3번 버튼 그리고 password 입력 버튼이 있다. 하나씩 눌러보았다. 1번은 Apple이 2번은 Banana가 3번에는 Secret이라고 나타난다. 하지만 추가적인 정보가 더 공개되어있다. Table의 컬럼명은 id, no이다 3번의 id는 password이다 컬럼명을 알려주는 것을 통해 확실히 알 수 있는 것은, 이 문제가 SQL Injection 문제라는 것이다. 그래서 인젝션을 몇차례 시도하다보니 아래와 같은 문자들이 필터링 되어있음을 확인할 수 있었다. =, , +, - 등의 연산자 %20, %09, %0a 등의 공백 ', " 와 같은 쿼터 substring, left, binary, ascii, hex 등의 sql function or, and, &&, || 기초적인 .. [Webhacking.kr] old-08번 문제 풀이 8번문제에 들어갔더니 done! 이라는 문구를 제외하고는 볼 것이 없었다. 바로 view source로 이동했다. 무언가 코드가 잔뜩 나왔다. 간단히 정리해 보자면 DB에 저장되어 있는 user-agent라면, 해당 user-agent에 맞는 id 값을 조회한다 DB에 저장되어 있지 않는 user-agent라면, user-agent, client-ip, guest 순서대로 DB에 삽입한다 조회한 id값이 admin일 경우 문제가 풀린다 가장 중요한건 이부분이다. 문제를 풀려면 id가 admin인 값을 불러와야 하는데, 애초에 insert할때 id를 guest로 하드코딩 해두었다. 그렇다. 이 문제 역시 SQL Injection으로 쿼리를 조작해서 하드코딩 된 부분을 우회하여 id가 admin으로 inse.. [Webhacking.kr] old-07번 문제 풀이 7번 문제는 auth 버튼 하나가 전부이다. view source를 눌러보자 php 코드가 쫘아악 나온다. 간단하게 정리하면 get 방식으로 val 파라미터를 전달받는다 1~5 사이의 정수를 랜덤으로 뽑아, 괄호의 개수를 정해 SQL select 문을 실행한다. SQL query의 결과가 2면 문제가 풀린다. 파라미터를 전달받으며, SQL select문을 실행하고, query결과의 조작이 필요하다... SQL Injection 문제임이 틀림없다. 하지만 주의해야 할 점이 바로 이 구문에 있다. preg match로 몇가지 문자들을 필터링 해 두었는데, Injection을 하게 어렵게 하는 항목은 아래와 같다. 2 : 결과값을 2로 만들어야 하는데, 2 자체를 필터링 해 두었다. -, +, /, * : 사.. [Webhacking.kr] old-04번 문제 풀이 4번 문제는 무언가 hash 비슷하게 생긴 문자열 하나를 주고 password 입력 공간을 준다. view source를 읽어보자 아... 코드를 읽자마자 드는 불길한 예감. 그렇다. 이 문제는 어려운 문제가 아닌 귀찮은 문제.... 문제를 대충 정리해보면 화면에 보이는 sha1 hash값이 원래 어떤 값인지 맞추라는 것이다. 다만 hash는 매번 랜덤하게 바뀐다... 문제의 의도는 rainbow table을 만들어 풀라는 것으로 보인다. 문제의 의도를 파악한 이상 지체할 필요는 없다. rainbow table을 만드는 간단한 코드를 github에 올려두었다. 특징이 있다면 아래와 같다. multiprocessing을 통해 총 9개의 process를 동시에 실행하여 효율을 뽑아내려 노력한 코드 각 pro.. [Webhacking.kr] old-06번 문제 풀이 6번 문제도 뭐 입력할 수 있는 공간이 있거나 하진 않았다. view source를 눌러보니... php 코드가 나왔다. 그 중에서도 가장 중요한건 바로 아래쪽에 있는 코드다. 간단히 정리하면 문자열 치환과정과, 20번의 base64 디코딩을 통해 admin, nimda가 되는 값을 찾아내라는 문제이다. 조금 특이한것이 있다면, 찾아낸 값을 쿠키에 넣어야 한다는 점이다. 사실 문제자체는 엄청 쉽다. 인코딩 과정도 php 코드로 다 공개해 두었기 때문에, 문자열 치환과정과 20번의 base64 디코딩을 거꾸로 진행하면 된다. 즉 admin과 nimda라는 문자열을 각각 20번씩 base64 인코딩 시키고, php 코드에서 치환하는 문자를 다시 거꾸로 역 치환 해주면 된다. python script로 짜면 .. [Webhacking.kr] old-05 풀이 5번문제의 경우 상당히 심플한 구성으로 이루어져 있다. Login을 해보기 이전에 Join을 시도해보고자 버튼을 눌렀더니... Access Denied 란다. 그래서 코드를 한번 살펴보았더니... onclick 이벤트 핸들러에 no() 함수가 걸려있었고, script 어디를 봐도 join으로 이동할 수 있는 부분은 존재하지 않았다. 그래서 우선 login 페이지로 이동해보기로 했다. login 페이지는 단순했다. 그저 id, pw 넣으면 맞는지 틀린지 정도 구별해주는 역할을 하는듯 싶었다. 다만 한가지 확실한건, 여기도 조금 공격을 시도해보았지만 전부 막혀있었다. 즉 login 페이지에 공격하는 것이 아닌 join페이지를 공격하는 것이 이 문제의 핵심임을 알 수 있었다. 하지만 join 관련 페이지가 어.. [Webhacking.kr] old-03 풀이 old 3번 문제의 경우 무슨 퍼즐같은 미니게임으로 시작한다. 규칙은 간단하다. 가로 세로에 적혀있는 숫자의 합은 그 행 또는 열에 색이 칠해진 칸의 갯수이다. 숫자가 합쳐져 있으면 색칠된 칸이 연속되어 있다는 의미이다. 숫자가 각각 따로 써져있으면 색칠된 칸이 다 따로 있다는 의미이다. (ex. 3 이라고 써져있다면 색칠된 칸 3개가 붙어있고, 1 1 1 이렇게 써져있다면 색칠된 칸 3개가 다 떨어져 있다) 위에 작성한 규칙에 의거하여 문제를 풀면 요런형태가 나오고, solved 버튼을 누르게 되면....끝...? (해치웠나..?) 은 기대도 안했다. 여기가 메인이구만... 성공한 사람의 기록을 남기기 위해 이름을 남겨달라고 한다. 우선 tomato로 남겨보았다. 이름을 남기면 내가 적은 이름, 그리고.. 이전 1 ··· 5 6 7 8 9 10 다음 목록 더보기