목록Webhacking.kr (62)
뉴비에욤
$port 변수에 10000 ~ 10100 사이의 임의의 정수값이 대입된다. $socket 변수에는 fsockopen 함수를 통해 GET 메소드로 입력받은 server 파라미터의 IP 주소와, port 변수 값에 소켓 연결을 시도하고, 연결되지 않으면 오류가 발생한다. 우선 공유기해서 DMZ/Twin IP 기능을 이용해서 모든 통신에 대해 넘겨 받는다. 포트 변수에 랜덤하게 100개 정수 중 하나가 대입되니, 컴퓨터에서는 100개의 포트를 열어여 한다. nc와 배치파일(.bat)을 이용하여 100 개의 포트를 연다. 100개의 포트를 열고, 문제 페이지를 다시 요청하면 랜덤한 포트 번호로 연결이 들어온다. 위 사진의 경우 10014 포트 번호로 연결이 들어오고 GET 메소드로 password를 출력했다.
어떤 파일을 올려서 푸는 문제인듯 하다. mysql_connect() 함수의 인자값이 없는 경우에는 웹 서버 설정값에서 DB 연결 대상 정보를 가져온다. 28번 문제와 동일하게 ".htaccess" 파일을 통해 웹 서버 설정 값을 변경할 수 있다. 즉, ".htaccess" 파일을 통해 db 연결 대상 정보를 변경해서 개인 서버에 접속하면 된다. 우선 개인 서버에 데이터베이스, 테이블을 만들고 해당 테이블에 'bob' 문자열을 넣는다. ".htaccess" 파일 내용을 위과 같이 설정한다. "host=외부 IP", "user=로그인_유저", "password="유저_비밀번호"
파일을 몇개 올려보면 위 사진처럼 "시간 | ip | 파일이름+확장자" 형식으로 나타남 아마도 db에 insert -> select 과정을 거치는 듯 한데 예상되는 insert 쿼리는 다음과 같음 "insert into upload(time,ip,fname) valkues ('$time', '$ip', '$fname'); 일단 사용자가 변조할 수 있는 값은 파일명이기 때문에, 파일명에 해당하는 컬럼이 몇 번째 삽입되는지 확인해야 함 => 웹 프록시를 이용하여 파일명을 변경하면서 테스트 에러 발생 에러 발생 에러 발생하지 않음 그런데 insert -> select 쿼리가 실행되면 우측의 결과쪽에 파일명을 변조한 것에 대한 값이 나타나야 하는데 나타나지 않음 => 아마도 클라이언트의 ip에서 올려진 파일만 ..
어떤 파일을 올려서 pw 값을 알아내야 하는 듯한 문제이다. 힌트는 ".htaccess" 파일이라고 한다. index.php 파일을 읽으면 "read me"가 출력된다. 얼핏 보면 읽은거 같지만 실제로는 Apache 데몬에서 php 소스 파일을 해석하고 브라우저에 출력하라고 해석된 부분만 출력하는 것이다. 아마 "index.php" 파일 주석이나 실행되지 않는 곳에 비밀번호가 있을 것이다. 이제 힌트로 제공되었던 ".htaccess" 파일에 대해 알아보자. 이 파일은 APACHE 웹 서버의 분산 설정 파일로, 디렉토리 별로 웹 서버 설정을 변경할 수 있다. - PHP_VALUE [옵션] [값] - 해당 웹 서버 옵션의 값을 변경 - php_value magic_quotes_gpc off - PHP_FLA..
GET 메소드로 전송되는 "no" 파라미터 값에 필터링이 걸려있다. 필터링에 통과되면 쿼리에 대입되고 해당 쿼리가 실행된 결과가 $q 변수에 저장된다. 클리어 조건은 id 값이 "admin" 이면 된다. "no" 값을 '1'로 입력하면 guest 가 입력된다. "no" 값을 -1로 입력하면 아무런 결과도 반환되지 않을 것이다. 다음에는 or 를 이용하여 뒤에 조건을 주는데, 이전 사진을 보면 "guest"의 "no" 값이 '1' 인것을 알아냈다. 그렇다면 최소 "admin"의 "no" 값은 1 보다 클것이다. 그리고 주석을 입력하면 뒤의 괄호 ')'를 무시하여야 하는데 주의할 점은 주석 뒤에 공백이 있어야 한다.
GET 파라미터로 전송되는 id 파라미터 값이 "admin" 이면 필터링에 걸려 "no"가 출력된다. 그런데 클리어 조건이 id 값이 "admin" 이여야 한다. 힌트는 바로 urldecode 부분에 있다. URL에서는 한글이나 특수문자 등을 처리하기 위해 입력한 문자를 인코딩 하게 된다. => ' '(공백) = %20 => # = %23 그러나 알파벳의 경우에는 평문이 그대로 들어가기 때문에 이럴 때는 HTML 인코딩을 사용해야 한다. 알파벳 'a'를 HTML 인코딩 하면 %61이 된다. 위 사진에서 보이는 문자열 모두 "admin"을 의미한다. 그러나, "%61dmi"n 을 입력할 시에는 필터링에 걸리면서 "no"가 출력되는데 그 이유는 인코딩된 문자열을 입력하는 순간 브라우저에서 자체적으로 한번 디..
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"가 ..
클라이언트의 공인 IP와 User-Agent 를 보여주는데 잘못된 IP라고 한다. "index.phps" 페이지에서 소스를 보면 str_replace 함수를 통해 문자열을 치환하고 있다. 치환된 문자열이 "127.0.0.1" 일 때만 문제가 클리어 된다. str_replace 치환을 역으로 하면 위와 같이 이상한 문자열이 나오게 된다.
가 실행되야 문제가 클리어 된다. "script" 문자열 자체를 판별하는지 보기 위해 대소문자를 섞어 ""를 입력해보았으나 필터링에 걸린다. alert(1); 만 입력하면 별 반응이 없는 것으로 보아 필터링만 우회하면 될 것이다. script 문자열 사이 사이에 %00(널 문자)를 입력하면 필터링이 우회 된다.
join 버튼을 눌러 "test/test" 계정을 생성한 후 로그인 시도 로그인을 하면 위와 같이 user key가 주어짐 md5 크랙을 해보면 "testzomibe" 문자열이 원본임을 알 수 있음 => 아마도 계정 "비밀번호+zombie"의 md5 해쉬 값 인듯.. 로그인 페이지에 인젝션 테스트를 위해 조건을 참으로 만들고 로그인 조건이 참인 경우 "Wrong password!" 리턴 조건을 거짓으로 만들고 로그인 조건이 거짓인 경우 "Wrong!" 리턴 위와 같이 인젝션 포인트와 참/거짓을 판별할 기준을 알아냈으면 첨부한 스크립트 파일을 실행하여 비밀번호 획득 획득한 비밀번호의 md5 값 md5 크랙해보면 "rainbowzombie"가 나타남. => 이전의 예상이라면 admin 계정의 비밀번호는 "r..