목록Webhacking.kr (62)
뉴비에욤
입력받은 pw를 md5 함수를 이용하여 $input_pw 변수에 저장 (md5 함수 2번째 인자는 'true') * php에서 md5 함수를 사용할 때, 두번째 인자를 'true'로 설정하면 md5 해쉬 결과를 바이너리 형태로 반환함 이 때 반환된 바이너리는 magic_quotes_gpc 옵션에 영향을 받지 않음 따라서 조건을 참으로 만들어주는 바이너리를 얻으면 문제 클리어 * 그러나 'or 1=1 # 과 같은 인젝션 쿼리가 반환되는 바이너리는 찾기 힘듬 따라서 mysql 문자열 처리 방식을 이용하여 간단한 쿼리를 사용 * 두 개의 다른 문자 비교시 거짓 반환 'a' = 'b' => 거짓, 0 반환 * 세 개의 다른 문자 비교시 참 반환 'a' = 'b' = 'c' => 참, 1 반환 'a' = 'b' ..
GET id 변수에서 "mb_convert_encodin" 함수를 사용함 (인젝션 포인터) 'from', 괄호, 비교구문,공백 등 필터링 id 변수에 "union" 포함 시 종료 사용자가 입력한 id,pw를 기반으로 해당 유저 정보를 조회 함 조회된 값이 '3'일 경우 문제풀이 성공 * mb_convert_encoding 이용하여 문제 클리어 * 참고로 테이블에는 lv3 유저가 존재하지 않음 * LIKE 구문으로 테스트 가능 (%bf%27||lv%0alike%0a3) * 기타 문자열 함수는 괄호 필터링으로 인해 사용 불가 * 따라서 '3' 이라는 데이터를 생성하기 위해 union 사용 * 사용자가 입력한 패스워드는 md5 함수 인자로 사용 * 값 변조 불가 ( 모든 입력 값이 32바이트 16진수로 변환 ..
"union, from, select, or, and, (), limit, (,), /, by, desc, asc, cash, 공백, %, %09" 문자열이 필터링 된다. 그리고 $q 변수에 GET 메소드로 전송되는 lv 파라미터 값을 포함하는 쿼리의 실행 결과가 나타난다. "or" 필터링을 " || " 로 우회할 수 있다. (소스에는 안 보이는데 admin 문자열도 필터링 하는듯) 위와 같이 입력하면 lv 값이 '1'인 "zzibong" id 값이 리턴된다. 뒤의 0x61646d696e hex 값은 "admin"을 의미한다. 따라서 lv 값을 조절하여 값이 리턴되지 않게 하고 (| |) 연산자를 이용해서 id like admin 결과와 함친다.
"webhackingkr.hwp" 파일을 업로드 하려고 하면 파일명 길이 제한이 걸린다. 파일명을 "123" 으로 만들고 업로드를 하면 성공적으로 업로드 되고, 업로드 된 파일의 경로와 삭제 버튼을 볼 수 있다. 내용이 없기 때문에 당연히 "null"이 나타난다. "Delete" 버튼을 눌러서 파일을 지운 뒤, 다시 한번 해당 파일 경로 (http://webhacking.kr~~~~/upload/123) 를 누르면 404 not found가 나타난다. 아마 "r m 파일명" 명령어를 이용해서 파일을 지우는 듯 하다. 즉, 공격 포인트는 바로 "Delete" 버튼을 눌렀을 때 발생되는 명령어 부분이다. 바로 명령어 인젝션! 파일명을 ";ls"로 만들고 업로드 한다. 당연히 파일 내용은 없다. 지우는 순간 ..
소스를 보면 POST 메소드로 전송하는 email 파라미터 부분이 이메일 내 "FROM" 에 들어간다. "test"를 입력한다 email=test 패킷이 날라가게 된다. 그렇게 되면 test 라는 메일이 admin@webhacking.kr 메일에 flag가 포함된 이메일이 전송되게 된다. 하지만 flag 이메일이 본인 이메일에 전송되야 문제가 풀리게 된다. 문제 클리어를 위해 이메일에서 사용되는 태그를 이용한다. "cc" 태그는 이메일에서 "참조"를 의미한다. 위 사진처럼 "email=test \n cc:bob@gmail.com" 처럼 입력하면 메일 헤더 내에 "cc:bob@gmail.com" 주소가 포함되어 "bob@gmail.com" 주소로 flag가 담긴 이메일이 전송 될 것이다.
GET 메소드로 전송되는 lv 파마리터 값에서 공백,'/', '*', '%' 문자가 들어오면 삭제해 버린다. 그리고 "union, select, from, challenge, 0x, limit, cash" 문자열이 들어오면 아예 오류가 발생된다. 그리고 $q 변수에 lv 파라미터 값과 함께 실행되는 쿼리의 값이 저장되는데, 쿼리 결과 내 id 값이 "admin" 일 때만 문제가 클리어 된다. 공백 우회는 %0a를 사용하면 된다. 위에서 보이는 0b0110000101100100011011010110100101101110 정수값은 "admin" 문자열을 2진수로 나타나낸 것이다. (이상하게 admin 을 입력하면 클리어가 안됨, 필터링 하는듯) 위 쿼리에서는 lv 값이 1로 세팅되어 "zzibong" id ..
"mb_convert_encoding" 함수를 통해 GET[id] 값을 입력 받음 사용자가 입력한 id, pw 값을 이용하여 쿼리를 실행하고 결과가 'admin'인 경우에만 클리어 됨 * mb_convert_encoding - 문자열의 인코딩 방식을 변경하는 PHP 함수 - 인코딩 과정에서 "magic_quotes_gpc" 옵션을 우회할 수 있는 취약점 존재 * magic_quotes_gpc - 싱글 쿼터('), 더블쿼터("), 백슬래시(\)와 같은 문자가 입력되면 앞쪽에 슬래시(/)을 이스케이프(연결)하여 문자열로 인식 시킴 - ' => \' ( %27 => %5c%27 ) * mb_convert_encoding 함수로 문자 인코딩 방식 변경 - %al%5c 와 같은 문자는 한 개의 문자로 인식 - %..
우선 44번 문제는 "Command Injection" 문제인 것을 기억하자. name 입력창에 "wraith" 입력하면 끝에 'h'가 잘린다. (5글자까지 입력 가능) 그리고 "Make" 버튼을 누르면 "hello wrait" 가 나타난다. 아마 입력받은 값과 "echo" 명령어를 합쳐서 다시 출력해주는 것으로 추정된다. root@shell:# echo "test" 일반적으로 리눅스에서 어떤 명령어 뒤에 ';' 를 입력하고 또 다른 명령어를 입력하면 명령어가 2번 실행된다. root@shell:# ls;ls - 이렇게 "ls;ls"를 입력하면 "ls" 명령어가 2번 실행됨 ";ls"를 입력하면 아무것도 출력되지 않는다. ";test"를 입력하면 test가 출력된다. 아마 ';', "ls" 문자열을 필터..
webshell 파일을 올리란다. 우선 "bob.txt" 파일을 올려본다. 업로드가 되지 않는다. 확장자 필터링을 염두해두고 "bob.exe" 파일을 올려본다. 올라간다. 필터링에 걸리는 "bob.txt" 파일을 업로드 할 때 전송되는 패킷을 보면 "Content-Type" 항목에 "text/plain" 값이 들어간다. 파일 업로드 할 때 필터링 여부를 검사하는 방법 중 하나는 "Content-Type"을 검사하는 것이다. "webshell.php" 파일을 업로드 하면 컨텐트 타입이 "application/octet-stream" 으로 전송된다. 필터링에 걸리기 때문에 컨텐트 타입을 바꿔야 한다. "txt" 파일이 아까 걸렸으니 일반적으로 필터링에 걸리지 않는 이미지(png) 파일로 속여서 올린다.
"test.txt", "test.zip" 파일을 다운받을 수 있는 링크가 주어진다. 소스를 보면 txt 파일은 다운로드가 될거 같은데, zip 파일은 오류가 발생한다. txt 파일 다운로드 경로를 보면 base64 임을 알 수 있다. base64(test.txt) 결과 base64(test.zip) 결과 test.zip 다운로드 링크를 base64 결과로 수정한다. "test.zip"을 다운로드 받고 압축을 해제하려고 하면 암호가 걸려있다. Brute Force 프로그램을 이용하여 비밀번호를 알아낸다. "test.zip" 압축을 해제하면 "readme.txt" 파일 내용을 볼 수 있다.