Webhacking.kr 26번
·
Webhacking.kr
GET 파라미터로 전송되는 id 파라미터 값이 "admin" 이면 필터링에 걸려 "no"가 출력된다. 그런데 클리어 조건이 id 값이 "admin" 이여야 한다. 힌트는 바로 urldecode 부분에 있다. URL에서는 한글이나 특수문자 등을 처리하기 위해 입력한 문자를 인코딩 하게 된다. => ' '(공백) = %20 => # = %23 그러나 알파벳의 경우에는 평문이 그대로 들어가기 때문에 이럴 때는 HTML 인코딩을 사용해야 한다. 알파벳 'a'를 HTML 인코딩 하면 %61이 된다. 위 사진에서 보이는 문자열 모두 "admin"을 의미한다. 그러나, "%61dmi"n 을 입력할 시에는 필터링에 걸리면서 "no"가 출력되는데 그 이유는 인코딩된 문자열을 입력하는 순간 브라우저에서 자체적으로 한번 디..
Webhacking.kr 25번
·
Webhacking.kr
25번 문제 기본 페이지로 가면 GET 메소드로 file 파라미터 값에 "hello" 문자열이 대입되어 있다. "hello"가 대입되어 있으니 아래쪽에 "hello world"가 출려된다. 보아 하니 해당 페이지(index.php) 경로에 "hello.txt", "password.php" 가 있고 문제를 풀기 위해서는 "password.php" 파일 내용을 보면 될거 같다. (Local File Include 관련 취약점 인듯) hello.txt 를 보아하니 "index.php?file=hello" URL 결과와 동일하다. 클리어를 위해 "password.php" 파일을 보면 아무 내용도 출력되지 않는다. 제일 처음 사진을 보면 file 파라미터에 "hello" 만 입력되어도 "hello world"가 ..
Webhacking.kr 24번
·
Webhacking.kr
클라이언트의 공인 IP와 User-Agent 를 보여주는데 잘못된 IP라고 한다. "index.phps" 페이지에서 소스를 보면 str_replace 함수를 통해 문자열을 치환하고 있다. 치환된 문자열이 "127.0.0.1" 일 때만 문제가 클리어 된다. str_replace 치환을 역으로 하면 위와 같이 이상한 문자열이 나오게 된다.
Webhacking.kr 23번
·
Webhacking.kr
가 실행되야 문제가 클리어 된다. "script" 문자열 자체를 판별하는지 보기 위해 대소문자를 섞어 ""를 입력해보았으나 필터링에 걸린다. alert(1); 만 입력하면 별 반응이 없는 것으로 보아 필터링만 우회하면 될 것이다. script 문자열 사이 사이에 %00(널 문자)를 입력하면 필터링이 우회 된다.
Webhacking.kr 22번
·
Webhacking.kr
join 버튼을 눌러 "test/test" 계정을 생성한 후 로그인 시도 로그인을 하면 위와 같이 user key가 주어짐 md5 크랙을 해보면 "testzomibe" 문자열이 원본임을 알 수 있음 => 아마도 계정 "비밀번호+zombie"의 md5 해쉬 값 인듯.. 로그인 페이지에 인젝션 테스트를 위해 조건을 참으로 만들고 로그인 조건이 참인 경우 "Wrong password!" 리턴 조건을 거짓으로 만들고 로그인 조건이 거짓인 경우 "Wrong!" 리턴 위와 같이 인젝션 포인트와 참/거짓을 판별할 기준을 알아냈으면 첨부한 스크립트 파일을 실행하여 비밀번호 획득 획득한 비밀번호의 md5 값 md5 크랙해보면 "rainbowzombie"가 나타남. => 이전의 예상이라면 admin 계정의 비밀번호는 "r..
Webhacking.kr 21번
·
Webhacking.kr
'1' 를 입력하면 참이 반한된다. 2 역시 참이 반환된다. 그러나 3은 거짓이 반한된다. 입력값은 GET 메소드로 전송되는 "no" 파라미터로 대입된다. 1 and length(id)
Webhacking.kr 20번
·
Webhacking.kr
모든 값을 입력하고, code 값은 우측 박스 내의 문자열과 동일해야 한다. 사진에는 잘렸지만 2초 내에 값 입력을 하고 "submit" 버튼을 눌러야 한다. (사실상 code 부분 땜에 수동으로는 불가능) 프로그래밍은 금지이지만 자바스크립트는 사용할 수 있다고 한다. 페이지 소스를 확인하면 각 부분마다 고유한 id 값이 보유되어 있다. 콘솔에서 lv5frm(form name).id.value = "test" 를 입력하면 nickname 값이 "test"로 변한다. 이를 이용해서 스크립트를 만들고 2초 내에 모든 조건을 충족시킨 후 submit 버튼을 눌리게 할 수 있다. 위 사진과 동일한 스크립트를 크롬 콘솔에 입력한다.
Webhacking.kr 19번
·
Webhacking.kr
admin 입력 admin 아니라고 한다. bob 입력 bob 로그인이 된다. "bob"로 로그인이 된 상태에서 쿠키를 확인하면 "userid" 값을 볼 수 있다. userid 값을 "base64" 디코딩 하면 위 사진과 같은 문자열이 나온다. 그런데 잘보면 제일 앞쪽에 "92eb5ffee~~~" 문자열이 있고, 약 32글자 뒤에 또 "92eb5ffee~~~" 문자열이 존재한다. 32 글자를 기준으로 앞/중앙/뒤 로 나뉘고, 앞/뒤는 같다. 일단 글자수가 32글자 기준으로 나뉘니깐 "md5" 해쉬로 추정할 수 있고, 앞 뒤가 똑같은것으로 보아 'b' 로 추정할 수 있다. md5('b') 결과값 md5('o') 결과값 "admin"에 해당하는 userid 쿠키값을 만들기 위해 "admin" 문자열을 한 글..
Webhacking.kr 18번
·
Webhacking.kr
18번 페이지를 보면 어떤 값을 입력하고 제출하는 버튼이 있다. 우선 "index.phps" 페이지에서 소스 분석을 한ㄷ. eregi 함수로 GET 메소드로 받은 no 파라미터 값을 필터링하여, 필터링 문자가 걸리면 "no hack"을 출력하고 종료된다. 필터링에 걸리지 않으면 쿼리에 no 파라미터 값이 들어가고 결과가 $q 변수에 저장된다. $q 변수 값이 "admin" 이면 클리어 되는데, 이미 쿼리에서 "guest" 문자열이 고정되어 있다. 몇 가지 삽질(?)을 하다 보면 다음과 같은 사실을 알아 낼 수 있다. - no 값을 '1'로 입력하면 "guest" 출력 (즉, "guest" id 컬럼의 no 컬럼 값은 '1') - no 값을 '2'로 입력하면 아무것도 출력되지 않음 - 공백을 입력하면 필터..
Webhacking.kr 17번
·
Webhacking.kr
unlock 변수에 뭔가 복잡한 계산식의 결과값이 저장된다. 크롬 콘솔에 해당 부분을 복붙하면 한방에 결과를 알려준다.