0x02 Study :)/Webhacking
Webhacking.kr Level 22 문제풀이
Level 22 username password 아이디와 비밀번호를 넣고 로그인과 회원가입하는 버튼이 존재한다. 힌트도 위 사진처럼 보여지고 있다. 소스코드를 보면 id와 pw가 POST방식으로 전달되는 것을 볼 수 있다. 회원가입을 통해 아이디를 만들고 로그인을 해보았다. (ttest / 1234) key값을 보아 특정 암호화가 이루어 지는것 같다. key값의 길이를 알아보니 32바이트였다. 32바이트 하면 떠오르는건 MD5 해시 뿐이였다. 예상대로 MD5였다. 복호화 문자는 '1234zombie' 였다. 즉, 비밀번호를 생성하면 비밀번호 뒤에 'zombie'를 붙이고 md5 해싱을 하여 key값으로 사용한다. (지금 write-up쓰면서 생각해보니, '1234zombie' 라는 md5값이 서버에 있는..
webhacking.kr Level 46 문제풀이
Level 46 level : index.phps 파일을 보면, 특정 필터링이 일어나고, 쿼리문을 통해 얻은 값이 'admin'이면 문제가 풀린다. 1을 넣어보니 위와 같이 출력되었다. lv 파라미터를 통해 'admin'의 데이터를 추출해야 하므로 다음과 같은 방법을 사용하면 될것 같았다. 위 그림을 통해 'admin'이 출력되는 것을 볼 수 있다. 그러면 lv값에는 무엇을 넣어야 되는지 궁금할 수 있다. 위 사진처럼 lv값에 상관없이 'admin'의 값이 먼저 출력된다. 이런 경우라면 lv의 무엇이든 상관 없다. 하지만, 대상 시스템에서는 어떻게 출력 될지 모르므로 확실하게 앞부분을 False로 만들고 'admin' 데이터만 출력하게 하는 것이 좋다.(실제 이문제에서도 lv값이 False일 때 풀리게 ..
Webhacking.kr Level 41 문제풀이
Level 41 코드를 보면 파일을 받아 파일이름을 필터링 하고 hidden_dir이라는 곳에 카피한 후, 패스워드를 그 곧에 쓴다. 따라서 우리는 hidden_dir의 주소를 알아야 한다. 코드를 자세히 보면, eregi함수를 통해 필터링 하는 부분과 str_replace를 통해 필터링 하는 부분이 있다. 이 두가지 특성이 있는데, str_replace는 치환을 하는 반면, eregi는 치환은 하지 않지만, 해당 문자열이 존재하면 종료시켜 버린다. 여기서 한가지 생각을 해야 한다. fn값이 '.' 이나 '' 이면 공백으로 치환되는데 이럴때 어떻게 처리가 될까? 이 소스에서 예외처리 하는 부분은 없다. 따라서 시도해 보았다. 어이없는 삽질을 기록해 보자면, 실제 파일의 이름을 '.', '>', '
webhacking.kr Level 9 문제풀이
Level 9 숫자 버튼이 1~3 까지 있고, 패스워드 입력 창이 보인다. 1번을 누르면 "Apple"이 보여지고, no값이 1이 된다. 2번은 "Banana" 이다. 3번은 "Secret" 이라고 나오면, 힌트들이 보여진다. 길이는 11자리이며, 컴럼에는 'id'와 'no' 가 있다고 나와있다. 일단 no에 값에 따라서 나오는 문자열들이 id값이라고 추측해볼 수 있다. 우리가 넣을 수 있는 input값은 no 파라미터이다. 즉, no파라미터를 조작하여 no=3의 id를 알아내면 될 것같다. 일단, "Apple", "Banana"가 id값이 맞는지 테스트해 보았다. 위와 같은 쿼리문으로 id값이 맞는지 확인해 보려고 했으나, (') 문자 필터링 되어 있었다. 그래서 필터링 되는 문자들을 몇개 찾아보니 '..
webhacking.kr Level 12 문제풀이
Level 12 javascript challenge 라고 뜬다. 소스코드를 살펴보자. 괴상한 숫자들이 들어있다. WorkTimeFun 부분을 크롬 개발자모드 콘솔에 넣어보자. fromCharCode 함수가 유니코드 문자값을 문자열로 바꿔주는 함수이다. 즉, 난독화 되어 있었던 코드였던 것이다. 이제 추출된 코드를 정리해서 보면 다음과 같다. var enco = ''; var enco2 = 126; var enco3 = 33; var ck = document.URL.substr(document.URL.indexOf('=')); for (i = 1; i < 122; i++) { enco = enco + String.fromCharCode(i, 0); } function enco_(x) { return en..
webhacking.kr Level 11 문제풀이
Level 11 $pat에 이상한 정규 표현식들이 들어있고, if문을 살펴보면 pat와 val값이 같으면 풀리는 것 같다. 먼저 php 정규포현식에 대해 알아보았다. 대괄호 안에 있는 패턴의 일부를 "캐릭터 클래스"라고 하는데, '캐릭터 클래스'에서 사용할 수 있는 메타 문자는 다음과 같다. 다음은 이스퀘이프 시퀀스에 대한 정규식이다, 위 내용들을 종합하여 문제의 정규식을 해석하면, 참고 "/[1-3][a-f]{5}_.\*223.52.120.172.*\tp\ta\ts\ts/" / : 구분기호[1-3] : 1부터 3까지 중 하나[a-f]{5}_ : a부터 f까지 중 하나의 문자를 5번 반복하는 문자를 찾음, 마지막에 '_'를 붙임 ( x{n} : 'x'를 n 번 반복 )\t : tab을 의미함. (url ..