Webhacking (47) 썸네일형 리스트형 [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로 남겨보았다. 이름을 남기면 내가 적은 이름, 그리고.. [Webhacking.kr] old-02번 문제 풀이 2번문제가 예전에는 홍길동 페이지였던것으로 기억하는데... 사이트 이전을 하며 문제가 조금 변경된 듯 하다. 우선 2번문제로 들어가면 IP가 로깅되고 있다는 말을 제외하고는 따로 뭐 풀이를 위한 입력공간이나 기능은 없다. 혹시 뭐가 숨겨져 있나 싶어 코드를 열어보았더니 너무나 떡하니 admin.php로 오라는 문구를 확인할 수 있었다. admin.php를 보니 password를 입력하는 페이지를 확인할 수 있었고, 본능적으로 password를 알아내야 함을 알 수 있었다. 하지만 뭔가 공격할 만한 건덕지가 보이지 않았다. admin.php에 가볍게 공격을 시도해보았지만, 여기가 아닌것을 알 수 있었다. 그러던 중, 쿠키를 보니 time이라는 값에 unix timestamp가 설정되어있음을 확인할 수 있었.. [Webhacking.kr] old-01번 문제 풀이 Level1의 경우 따로 문제가 무엇인지, 어떻게 풀어야하는지 문제 화면만 통해서는 알 수가 없다. 일단 view-source를 눌러보자. 그러면 이렇게 level1에 대한 php와 html코드가 나타난다. php 는 서버사이드 언어이므로 실제 웹이라면 저렇게 소스코드가 나타나지 않는다. 즉 나타난 php 코드는 문제를 어떻게 풀어야하는지를 알려주기 위해, php 코드를 일부러 공개해 둔 것이다. 코드를 보면 가장 중요한건 바로 $_COOKIE 이다. 아래쪽에 있는 if문들을 보면 $_COOKIE['user_lv']>5 조건에 성립하면 1번 문제가 solve 되지만, $_COOKIE['user_lv']>=6 조건에 성립하면 $_COOKIE['user_lv']이 1로 초기화 된다. 즉 user_lv 쿠키값.. 이전 1 2 3 4 5 6 다음 목록 더보기