목록Webhacking.kr (62)
뉴비에욤
GET 메소드로 전송되는 id 파라미터 값이 없을경우(사용자가 입력하지 않을 경우) 자동으로 "guest"로 세팅한다. 그리고 함수 필터링과 길이를 제한한다. $q 변수에는 id 변수를 포함하는 쿼리의 실행 결과가 저장되는데, 실행 결과에서 리턴되는 id 값이 "admin" 일때만 문제가 풀린다. "id=id" 입력 시 실행되는 쿼리는 다음과 같다. - SELECT id FROM c_61 order by id desc limit 1 - c-61 테이블에서 id 컬럼을 기준으로 첫 번째 데이터를(zombie) 출력한다 id="admin" as id 입력 시 실행되는 쿼리는 다음과 같다. - SELECT "admin" as id FROM c_61 order by id desc limit 1 - 위 쿼리에서 ..
페이지 소스는 위 사진과 같다. 1. 일단 쿠키 값에 숫자가 들어가면 안된다. 2. GET 메소드로 전송되는 "mode" 파라미터 값이 "auth"여야 한다. 3. readme 디렉토리에서 자신의 "id.txt" 파일을 불러 f 변수에 저장한다. 4. f 변수에 저장된 파일 내용을 result 변수에 저장한다. 5. result 변수에 자신의 id가 포함되면 성공이다. 6. readme 디레곹리에 자신의 "id.txt" 파일을 생성한다. 7. 생성한 파일에 자신의 id를 입력한다. 9. 접속 ip가 "127.0.0.1"이 아니면 생성한 자신의 "id.txt" 파일을 삭제한다. 파일이 있어야 하는데 삭제된다... 즉 레이스 컨디션 공격이다. 따라서 2개의 서로 다른 세션으로 로그인하여 1. "index.p..
(LOGIN Form 제출 클릭 시) POST 메소드로 전송되는 id, lv 파라미터 값을 쿼리문에 포함하여 c59 테이블에서 id,lv 컬럼 값을 조회한다. 조회한 id가 존재하는 경우 id,lv 컬럼 값을 출력한다. 그리고 lv 컬럼 값이 "admin" 인 경우 문제가 풀린다. (JOIN Form 제출 클릭 시) phone 파라미터 값의 길이가 20글자 이상이면 오류가 발생한다. id 파라미터의 값이 "admin"인 경우 오류가 발생한다. phone 파라미터 값 내에 "admin, 0x, #, hex" 등 magic_quotes_gpc 우회해 사용되는 함수가 존재하는 경우 오류가 발생한다. 인젝션 포인트는 바로 INSERT 쿼리에서 사용되는 $phone 변수이다. 특히 $phone 변수 앞, 뒤쪽에 ..
플래시 파일이 보여진다. 페이지 소스를 보면 해당 플래시 파일은 메인 페이지와 동일한 디렉토리에 존재하는 "hackme.swf"를 의미한다. 플래시 파일은 디컴파일이 되긴 하지만 간단하게 "strings" 명령을 이용해서 해당 플래시 파일 안에 존재하는 모든 문자열을 추출한다.
문제 페이지 초기 화면이다. "index.phps" 페이지로 이동하여 소스를 분석하면 아래와 같다. 1. 문제 페이지에서 올바른 키를 입력하면 문제 클리어 2. "from,union,select" 등 함수 필터링 3. 사용자의 ID, 입력한 msg 값, 비밀번호, 입력한 se 값을 "challenge57msg" 테이블의 각 "id,msg,pw,op" 컬럼에 저장한다. * insert 문으로 데이터 삽입 시 se 변수에서 취약점 발생 * 저장된 값을 출력해주는 구문이 없기 때문에 time based blind injection을 해야 함
56번 문제 초기 화면으로, "readme" 글을 읽으려고 하면 "Access Denied"가 뜨면서 읽어지지 않고,"hi~" 글은 읽을 수 있다. 삽질하다가 위와 같이 "_" 글자를 3번 입력하여 검색하면 모든 글이 보여진다. "_" 글자를 4번 입력하면 "hi~" 글이 사라진다. * 이번 문제는 SQL 인젝션에서 "LIKE"와 함께 사용되는 정규식을 이용하는 것으로써, "_" 글자는 한 글자를 의미한다. * 즉 "hi~" 게시물의 내용은 제목과 동일한 ("hi~") 3글자 이기 때문에 "____" 4번 입력하면 검색 되지 않는다. "_" 글자를 6번 입력하여 검색하면 보여지고, 7번 입력하면 보여지지 않는다. 즉, 해당 게시물의 내용은 총 6글자이다.
랭크 페이지 확인 랭크 페이지는 위 사진과 같이 이루어 짐 랭크 페이지 소스를 확인해 보면 위와 같이 힌트가 존재 참 조건 입력 = "localhost / 0" 리턴 거짓 조건 입력 = "//" 리턴 * scroe 파라미터가 인젝션 포인터 * 출력 값을 통해 참/거짓 구분 가능 * information_schema 필터링 * procedure analyse() 사용 * LIMIT 사용하여 테이블 / 컬럼명 확인 가능 * procedure analyse() => 테이블명, 첫 번째 컬럼 리턴 * limit 1,1 procedure analyse() => 두 번째 컬럼 리턴 * limit 2,1 procedure analyse() => 세 번째 컬럼 리턴 패스워드 컬럼명을 알아내고 블라인드 인젝션 스크립트를..
Password is 문자열이 나타나고 한 글자씩 빠르게 나타났다가 사라진다. - Password is b - Password is 8 . . . . . . 엄청 좋은 눈썰미로 전부 받아 적어도 문제가 풀리긴 한다. 크롬 네트워크 메뉴를 보면 ?m=0 ~ ?m=31 부터 한글자씩 전달되는 것을 볼 수 있다. ?m=0 일 때의 값이 'b' 인것을 보아 아마 Password를 의미하는 듯 하다.
히든 테이블이 존재하고, val 파라미터가 인젝션 포인트다. union, select문이 필터링 된 상황에서는 프로시져 analyse 함수를 통해 현재 실행중인 쿼리문의 정보를 조회할 수 있다.