Webhacking.kr 11번
·
Webhacking.kr
$pat 변수에 정규식이 대입되어 있다. preg_match 통해 GET 메소드로 입력 받은 val 파라미터 값과 $path을 비교하여 일치해야 문제가 클리어 된다. 정규식의 의미는 아래 표와 같다. 정규식 의미 [1-3] 1 ~ 3 사이의 정수값 [a-f] a ~ f 사이의 알파벳 {5} 이전 정규식을 5번 반복 * 모든 문자 \t Tab (탭) * Tab => URL Encoding => %09
Webhacking.kr 10번
·
Webhacking.kr
10번 문제 초기 화면, 'O' 문자를 클릭하면 "yOu" 로 변경되면서 한칸 우측으로 이동한다. (사진 클릭화면 확대 됨) 소스를 보면 "hackme" id 값을 가지는 'o' 문자 클릭시(onclick) 한칸 이동한다(this.style.posLeft += 1) 해당 속성은 크롬 콘솔을 통해 초기화 할 수 있다. 10 으로 "posLeft" 속성 값을 초기화하고, 문제 페이지에서 'O'를 한번 클릭하면 11로 값이 증가한다. 값이 800일 때 클리어가 되니, 799로 세팅하고 문제 페이지에서 'O'를 한번 클릭하면 된다.
Webhacking.kr 9번
·
Webhacking.kr
9번 문제를 클릭하면 위와 같이 HTTP Authentication 창이 나타남 임의의 값 ("test/test")를 입력 후 로그인 버튼을 누르면 위와 같이 패킷이 전송 됨 * 여기까지 해보고 도저히 감이 안 잡혀서 구글링을 해봄 * 문제에서 요구하는건 "htaccess"를 사용하여 접근 방식을 설정했을 때 발생하는 취약점을 이용하라는 뜻 * htaccess 파일에 " " 형식으로 제한을 걸면 다른 메소드를 검증하지 않음 * 따라서 "OPTIONS" 등을 이용하여 인증 우회 가능 전송되는 패킷을 일일이 프록시에서 "GET = > OPTIONS" 처럼 수동으로 변경해도 되지만 버프스위트에서는 "Match and Replace" 기능을 이용하여 자동화 가능 위와 같이 설정하면 자동으로 OPTIONS 메소드..
Webhacking.kr 8번
·
Webhacking.kr
$agent 변수에 "getenv" 함수를 이용하여 "HTTP_UESR_AGENT" 값을 저장한다. $ip 변수에 클라이언트의 공인 IP 값을 저장한다. $agent 변수에서 공백을 제거(trim) 한다. $agent 변수에서 '.', '/' 문자가 발견되면 '_' 문자로 치환한다. $pat 변수에 필터링 할 여러 문자열들을 저장한다. $agent 변수 값과 $pat 변수값을 비교하여 일치하면(필터링에 걸리면)가 오류가 발생한다. HTTP_USER_AGENT 값에 대하여 특정 문자를 치환한다. $count_ck 변수에 "SELECT" 쿼리 결과가 저장된다. 쿼리 결과(id 컬럼 개수)값이 70개 이상이면 "lv0" 테이블의 모든 데이터를 삭제한다. $q 변수에 쿼리를 저장하는데, 쿼리에서 $HTTP_US..
Webhacking.kr 7번
·
Webhacking.kr
7번 문제 페이지 소스 화면, 주석으로 "admin mode : val=2" 라고 적혀있다. 물론 그냥 URL 부분에 "val=2" 입력하면 안된다. index.phps 페이지에서 소스 분석을 진행한다. URL 에서 "get" 파라미터로 받은 값을 $go 변수에 저장한다. (입력 받지 않으면 자동으로 1 세팅) $go 변수 값을 다시 $ck 변수에 저장한다. $ck 변수 값에서 '*', '/' 문자가 발견되면 '' 으로 치환한다. $ck 변수 값에서 "--", "2", "50", "\+", "substring", "from" 등의 문자열이 발견되면 오류가 발생한다. $ck 변수 값에서 공백(%20)이 발견되면 오류가 발생한다. 1 ~ 5 사이 임의의 값을 $rand 변수에 저장한다. $rand 변수 값에..
Webhacking.kr 6번
·
Webhacking.kr
6번 문제 메인 페이지, "base64" 인코딩이 힌트인 것을 알려주고 index.phps 페이지를 통해 원본 소스를 볼 수 있다. // $val_id, val_pw 변수에 각각 "guest, "123qwe" 문자열 저장 // 반복문이 20번 돌면서, $val_id, val_pw 변수를 base64 인코딩함 // 20번 인코딩 된 문자열에서 특정 문자를 다른 문자로 치환함 // $val_id, val_pw 변수에 동일한 치환값이 적용됨 // 20번 인코딩 -> 문자 치환 결과 문자열을 쿠키에 "user", "password" 값으로 세팅 // $decode_id, decode_pw 변수에 쿠키 "user, "password" 값 저장 // 특정 문자를 치환 (인코딩 과정과 반대임) // 반복문이 20번 ..
Webhacking.kr 5번
·
Webhacking.kr
2가지 메뉴가 있는데 우선 소스부터 분석한다. "Login" 메뉴를 누르면 "mem/login.php" 페이지로 이동되지만, "Join" 버튼을 누르면 에러가 발생한다. 적당한 게싱을 통해 "mem/join.php" 페이지를 유추한다. 유추한 페이지로 가면 빈 화면만 보이는데, 소스를 분석해야 한다. 뭔가 겁나 복잡하다. 알파벳들을 이상한 문자에 대입하고 아래쪽에서 비교하는 듯 하다. 다행히 콘솔에서 자동으로 복호화가 되기 때문에 부분 부분 복호화를 진행하면서 분석한다. 위 사진에서 얻은 평문을 기반으로 하면 아래와 같은 결과를 얻을 수 있다. if(eval(document.cookie).indexOf(oldzombie)==-1) { bye; } if(eval(document.URL).indexOf(mo..
Webhacking.kr 4번
·
Webhacking.kr
base64로 인코딩 된 문자열을 볼 수 있다. 디코딩 하면 암호화 된 문자열이 나오는데, 길이를 보면 SHA 일 거 같은 느낌이 든다. 해쉬함수는 일방향 함수이기 때문에 이론적으로 복호화가 불가능하다. 따라서 레인보우 테이블 등을 이용하여 복호화를 진행해야 한다. 복호화 하면 또 다른 SHA1 값이 나온다. 이전 사진에서 얻은 SHA1 값을 또 다시 복호화하면 "test" 문자열이 나온다. 4번 문제 페이지에서 최종 결과 "test"를 입력한다.
Webhacking.kr 3번
·
Webhacking.kr
퍼즐이 나타난다. 풀고 gogo 버튼을 눌러야지 다음 단계로 넘어간다. 위 사진과 같이 풀면 된다. name 입력 창이 나타나는데 느낌이 SQL-Injections 문제이다. 일단 name 부분에 임의의 값을 입력한다. 입력하면 페이지 하단에 name, answer, ip 값들이 출력된다. 혹시 name에 따라 answer가 다르게 나오는지 확인하기 위해 다른 아이디를 입력해보아도 answer 값은 동일하게 나온다. name='bob'를 입력하고 'write' 버튼을 누르면 위 사진과 같이 패킷이 날라간다. answer, name 변수를 모두 조절할 수 있기 때문에 해당 변수를 이용해서 문제를 풀어야 한다. 여러 SQL-Injection 기법을 사용하다 보면 "no hack"이라는 메시지를 볼 수 있는데..
Webhacking.kr 2번
·
Webhacking.kr
2번 문제 페이지 소스를 보면 시간 값이 주석으로 나타난다. 쿠키를 보면 세션 값 이외 "time" 값이 추가되었다. "time" 값을 참으로 설정한다. 쿠키의 "time" 값이 참인 경우 시간값 끝부분이 '1' 로 변한다. "time" 값을 거짓으로 설정한다. 쿠키의 "time" 값이 거짓인 경우 시간값 끝부분이 '0' 으로 변한다. "time" 값이 인젝션 포인트 인것은 확실하니 인젝션에 자주 사용되는 함수가 필터링 되는지 확인한다. 함수가 필터링 되면 주석에서 시간값이 아예 사라진다. 2번 문제의 상단 메뉴 중 "Board"로 가면 글이 하나 있다. 그리고 "FreeB0aRd" 라는 문자열이 보이는데 웹 해킹은 게싱("Guessing") 또한 중요하기 때문에 해당 문자열을 데이터베이스의 테이블 값으..