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 변수에 뭔가 복잡한 계산식의 결과값이 저장된다. 크롬 콘솔에 해당 부분을 복붙하면 한방에 결과를 알려준다.
Webhacking.kr 16번
·
Webhacking.kr
16번 문제 소스를 보면 "cd" 변수 값을 기준으로 5 가지 기능이 실행된다. cd 값을 잘 보면 특정 정수 범위인것을 알 수 있는데 바로 문자의 ASCII 값이다. ( 각각 'd', 'a', 'w', 's' 문자를 의미 ) 즉, 키보드에서 'w'를 누르면 위로 50 만큼 이동한다. 따라서 클리어 조건은 정수 124가 의미하는 문자 입력하는 것이다. 콘솔에서 String.fromCharCode를 이용해서 124가 의미하는 문자 '|'를 알아낸다. '|' 문자를 클릭하면 위 사진의 URL로 페이지가 이동된다.
Webhacking.kr 15번
·
Webhacking.kr
15번 문제를 클릭하면 "Access_Denied" 창이 나타난다. "webhacking.kr" 문제 목록에서 소스를 보면 15번 문제는 "challenge/javascript/js2.html" 로 이동된다. 크롬 URL창에 "view-source:URL" 를 입력하면 해당 URL의 소스가 보여진다. 15번 소스를 보면 경고창이 나타나고, "history.go(-1)"가 실행되면서 이전 페이지로 돌아가게 된다.
Webhacking.kr 14번
·
Webhacking.kr
indexOf(x) 함수는 인자 값으로 들어온 x의 위치를 반환한다. 위 사진에서는 URL 내에서 ".kr" 위치를 반환하는데 주의할 점은 document.URL 값이다. 일반적으로 URL에는 http://webhacking.kr/challenge/javascript/js1.html" 로 나타난다. 그러나 실제 값은 앞쪽에 프로토콜이 명시된 "http://webhacking.kr/challenge/javascript/js1.html" 이다. 따라서 ".kr"의 위치 값은 17 이 된다. (제일 왼쪽 'h'의 값은 0) ul = 17 * 30 ul = 510
Webhacking.kr 13번
·
Webhacking.kr
빈 칸에 입력하면 "no" 파라미터로 전송 됨 삽질을 좀 해보면 "like", 공백, limit 등이 필터링 됨 like 필터링 우회는 "in", 공백 우회는 "%0a" 사용하면 됨 그리고 조건을 참으로 만들면 result 컬럼의 리턴 값이 '1' 조건을 거짓으로 만들면 result 컬럼의 리턴 값이 '0' 리턴 값을 기준으로 인젝션 쿼리의 참/거짓을 판별할 수 있음 서브 쿼리 사용 여부를 테스트 하기 위해 위 사진과 같이 입력하면 참을 의미하는 '1' 리턴 됨 힌트를 보면 flag 컬럼을 "prob13password"에서 가져오는데 해당 컬럼의 데이터가 몇개 인지 모름 따라서 개수를 알아보기 위해 "count" 함수를 이용하여 위 사진과 같이 개수가 '1'인지 확인 => 거짓을 의미하는 '0'이 리턴되..
Webhacking.kr 12번
·
Webhacking.kr
WorkTimeFun 변수가 뭔가 복잡하게(난독화) 되어있다. * String.fromCharCode(x) 함수는 인자 값으로 들어온 x 정수값을 ASCII 문자로 변경한다. * eval(x) 함수는 인자 값으로 들어온 x를 실행시킨다. WorkTimeFun 전체를 크롬 콘솔에 복붙하면 자동으로 난독화가 풀린다. alert(Password is ~~~) 문자열 윗 부분이 바로 Password 값을 난독화 하는 부분이다. 크롬 콘솔에 복붙하면 복호화 된다.