Webhacking.kr 46번
·
Webhacking.kr
GET 메소드로 전송되는 lv 파마리터 값에서 공백,'/', '*', '%' 문자가 들어오면 삭제해 버린다. 그리고 "union, select, from, challenge, 0x, limit, cash" 문자열이 들어오면 아예 오류가 발생된다. 그리고 $q 변수에 lv 파라미터 값과 함께 실행되는 쿼리의 값이 저장되는데, 쿼리 결과 내 id 값이 "admin" 일 때만 문제가 클리어 된다. 공백 우회는 %0a를 사용하면 된다. 위에서 보이는 0b0110000101100100011011010110100101101110 정수값은 "admin" 문자열을 2진수로 나타나낸 것이다. (이상하게 admin 을 입력하면 클리어가 안됨, 필터링 하는듯) 위 쿼리에서는 lv 값이 1로 세팅되어 "zzibong" id ..
Webhacking.kr 45번
·
Webhacking.kr
"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 와 같은 문자는 한 개의 문자로 인식 - %..
Webhacking.kr 44번
·
Webhacking.kr
우선 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" 문자열을 필터..
Webhacking.kr 43번
·
Webhacking.kr
webshell 파일을 올리란다. 우선 "bob.txt" 파일을 올려본다. 업로드가 되지 않는다. 확장자 필터링을 염두해두고 "bob.exe" 파일을 올려본다. 올라간다. 필터링에 걸리는 "bob.txt" 파일을 업로드 할 때 전송되는 패킷을 보면 "Content-Type" 항목에 "text/plain" 값이 들어간다. 파일 업로드 할 때 필터링 여부를 검사하는 방법 중 하나는 "Content-Type"을 검사하는 것이다. "webshell.php" 파일을 업로드 하면 컨텐트 타입이 "application/octet-stream" 으로 전송된다. 필터링에 걸리기 때문에 컨텐트 타입을 바꿔야 한다. "txt" 파일이 아까 걸렸으니 일반적으로 필터링에 걸리지 않는 이미지(png) 파일로 속여서 올린다.
Webhacking.kr 42번
·
Webhacking.kr
"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" 파일 내용을 볼 수 있다.
Webhacking.kr 41번
·
Webhacking.kr
웹 페이지 소스를 보면 위와 같은데 핵심은 "copy" 함수임 해당 함수는 파일명을 입력 받아 올리는데, 문제는 파일명이 공백이면 오류가 나게 되어 $hidden_dir 변수에 저장된 히든 폴더가 오류 메시지에 나타남 (물론 오류 처리를 제대로 하면 사용자에게 안 보여짐) 프록시를 이용하여 위와 같이 파일명을 ">" 변경하면 웹 페이지 소스의 필터링에 의해 공백으로 치환됨 파일명이 빈 파일을 업로드 하면 위와 같이 히든 폴더가 출려됨 원래 저 폴더를(dkaneh~~~gggg) http://webhacking.kr/challenge/web/web-19/dkaneh~~~gggg 이렇게 요청하면 풀렸는데 최근에 서버가 다운되면서 복구 되는 과정에 뭔 오류가 생겼는지 안 풀려지게 됨...
Webhacking.kr 40번
·
Webhacking.kr
위 사진처럼 기본 값으로 로그인을 시도 URL 부분에 입력한 값이 나타남 URL 값 입력이면 인젝션 문제일 확률이 높으니 테스트를 위해 위 사진처럼 조건을 참으로 만들면 "Success - guest" 나타남 조건을 거짓으로 만들면 "Failure" 나타남 "no" 값을 2로 주면 "admin" 모드가 나타남 블라인드 인젝션을 위해 pw 컬럼의 길이를 우선 알아내기 위해 한땀 한땀 진행하다보면 "10" 입력 시 "admin"이 나타남(참 조건) 이를 이용하여 첨부된 스크립트 파일을 실행하면 위 사진처럼 길이와, 비밀번호가 나타남
Webhacking.kr 39번
·
Webhacking.kr
(\) 문자를 지운다. (') 문자를 ('') 으로 치환한다. substr 함수를 통해 15번째 글자까지 자른다. 문제가 발생하는 부분은 쿼리 부분이다. 잘 보면 ("select ~~~ id='$_POST[id]") 로 작성되어 있다. 끝 부분에 싱글 쿼테이션이 하나 빠져 있어서 무조건 오류가 난다. 오류가 난다고 입력 부분에 (')을 입력해 버리면 str_replace 함수 때문에 ('') 로 변경되서 똑같이 오류가 난다. 핵심은 바로 substr 함수를 통해 15번째 글자까지 자른다는 것이다. " admin(공백 9개)' " 를 입력한다. 입력값 입력값 길이 치환값 치환값 길이 admin(공백 8개)' 14글자 admin(공백 8개)'' 15글자 admin(공백 9개)' 15글자 admin(공백 9개..
Webhacking.kr 38번
·
Webhacking.kr
bob 를 입력 후 로그인을 한다. 로그인이 누르면 로그가 보여지는데 "IP:입력값" 형식으로 저장된다. 주어진 힌트 "admin" 을 입력하고 로그인을 한다. 로그인이 실패한다. 추론을 해보자, 'bob'를 입력하면 "58.xxx.xx.xxx:bob" 라고 로그에 기록이 된다. 그러면 로그에 '58.xxx.xxx.xx:admin'
Webhacking.kr 37번
·
Webhacking.kr
"tmp-xxxxxxxx" 형태의 문자열이 꽤 많이 보이고, 아래쪽에는 "127.0.0.1:777" 문자열과 파일 업로드 기능을 볼 수 있다. time() 함수는 1970년 1월 1월 00시 00분 00초를 기준으로 현재 초까지의 시간을 초로 나타낸다. 해당 초가 $time 변수에 저장된다. 그리고 $f 변수에는 tmp/tmp-$time 이라는 파일명을 쓰기 모드로 연다. 파일을 열고 "127.0.0.1" 문자열을 작선하고 닫는다. $fck 변수는 크게 중요하지 않은 부분이니 넘어간다. 사용자가 업로드한 파일명에 '', '.', ' ' 문자가 포함되면 해당 문자를 삭제한다. tmp 디렉토리 이하에서 업로드 된 파일명을 쓰기 모드로 열고 클라이언트의 공인 IP를 작성하고 닫는다. $ck 변수에 파일 객체를..