목록Webhacking.kr (62)
뉴비에욤
웹 페이지 소스를 보면 위와 같은데 핵심은 "copy" 함수임 해당 함수는 파일명을 입력 받아 올리는데, 문제는 파일명이 공백이면 오류가 나게 되어 $hidden_dir 변수에 저장된 히든 폴더가 오류 메시지에 나타남 (물론 오류 처리를 제대로 하면 사용자에게 안 보여짐) 프록시를 이용하여 위와 같이 파일명을 ">" 변경하면 웹 페이지 소스의 필터링에 의해 공백으로 치환됨 파일명이 빈 파일을 업로드 하면 위와 같이 히든 폴더가 출려됨 원래 저 폴더를(dkaneh~~~gggg) http://webhacking.kr/challenge/web/web-19/dkaneh~~~gggg 이렇게 요청하면 풀렸는데 최근에 서버가 다운되면서 복구 되는 과정에 뭔 오류가 생겼는지 안 풀려지게 됨...
위 사진처럼 기본 값으로 로그인을 시도 URL 부분에 입력한 값이 나타남 URL 값 입력이면 인젝션 문제일 확률이 높으니 테스트를 위해 위 사진처럼 조건을 참으로 만들면 "Success - guest" 나타남 조건을 거짓으로 만들면 "Failure" 나타남 "no" 값을 2로 주면 "admin" 모드가 나타남 블라인드 인젝션을 위해 pw 컬럼의 길이를 우선 알아내기 위해 한땀 한땀 진행하다보면 "10" 입력 시 "admin"이 나타남(참 조건) 이를 이용하여 첨부된 스크립트 파일을 실행하면 위 사진처럼 길이와, 비밀번호가 나타남
(\) 문자를 지운다. (') 문자를 ('') 으로 치환한다. substr 함수를 통해 15번째 글자까지 자른다. 문제가 발생하는 부분은 쿼리 부분이다. 잘 보면 ("select ~~~ id='$_POST[id]") 로 작성되어 있다. 끝 부분에 싱글 쿼테이션이 하나 빠져 있어서 무조건 오류가 난다. 오류가 난다고 입력 부분에 (')을 입력해 버리면 str_replace 함수 때문에 ('') 로 변경되서 똑같이 오류가 난다. 핵심은 바로 substr 함수를 통해 15번째 글자까지 자른다는 것이다. " admin(공백 9개)' " 를 입력한다. 입력값 입력값 길이 치환값 치환값 길이 admin(공백 8개)' 14글자 admin(공백 8개)'' 15글자 admin(공백 9개)' 15글자 admin(공백 9개..
bob 를 입력 후 로그인을 한다. 로그인이 누르면 로그가 보여지는데 "IP:입력값" 형식으로 저장된다. 주어진 힌트 "admin" 을 입력하고 로그인을 한다. 로그인이 실패한다. 추론을 해보자, 'bob'를 입력하면 "58.xxx.xx.xxx:bob" 라고 로그에 기록이 된다. 그러면 로그에 '58.xxx.xxx.xx:admin'
"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 변수에 파일 객체를..
힌트로 vi와 blackout이 주어진다. 해석해보면 "vi를 사용하던 중 정전이 일어나서 프로그램이 꺼졌다" 뭐 그런 소린로 추정할 수 있다. vi 에디터를 사용해본 사람은 알겠지만 예기치 못한 이유로 프로그램이 종료되면 vi 에디터는 현재 경로에 ".파일명.swp" 파일을 생성시킨다. - "index.php" => ".index.php.swp" 비밀번호는 "공인IP + dlseprtmvpdl~~~~" 문자열의 md5 해쉬 결과이다. 파이썬에서 str 변수에 공인IP + dlse~~ 값을 저장하고 md5 해쉬를 뽑아낸다.
GET 메소드로 전송되는 "phone" 파라미터 값에 필터링이 적용되어 있다. 그 다음에는 쿼리가 실행되는데, 각 변수의 의미는 아래와 같다. - SESSION[id] = id 값 - SERVER[REMOTE_ADDR] = 클라이언트 공인 IP 값 - GET[phone] = 사용자가 입력한 값 내 환경상 아마 "VALUES ('wraith', '58.xx.xx.xx', 정수_입력값)" 쿼리가 실행될 것이다. 그리고 id 값이 "admin" 이면서 ip 값이 내 공인 IP와 동일한 컬럼이 존재하면 해당 결과에서 id 를 보여줄 것이다. 공인 IP는 바뀌지 않으니 쉽게 말하면 (SESSION[id]) 값이 "admin" 일 때만 클리어 된다는 소리다. 문제는 해당 값은 가입할 때 세팅되고 변경할 수 없다는 ..
34번 문제 들어가면 경고창이 나타난다. 딱 봐도 javascript 관련 문제이다. 소스를 보면 뭔가 복잡한데, 아마 난독화가 적용되어 있는 듯하다. 난독화 순서는 다음과 같다. - 원본 코드를 알아 보기 힘들게 변수명을 바꿈 - substring 등을 이용해 문자열을 잘르고 스크립트 실행을 위해 다시 합침 - 스크립트 실행 후 원본 소스에 접근하지 못하게 원본 코드를 초기화 - 초기화 -> 변수명 = '' 초기화 부분을 찾기 위해 검색 기능을 이용하여 ='' 를 찾는다. O00O 변수를 초기화 하고 있다. 크롬 콘솔에 변수명을 입력하면 원본 코드가 나온다.
33번은 문제가 꽤 많다. 풀다가 힘들어 죽는줄... GET 메소드로 전송되는 "get" 파라미터의 값이 "hehe"면 다음으로 넘어갈 수 있다. 33-1 클리어 ============================================================================================= 33-1과 비슷하지만 이번에는 POST 메소드로 전송 되는 "post, post2" 파라미터의 값들이 각각 "hehe, hehe2" 일때만 다음으로 넘어갈 수 있다. (사진 안 보이면 클릭) 33-2 문제 페이지에는 POST로 전송하는 별 다른 form이 없으니 크롬 콘솔에서 위와 같이 입력해서 입력 form을 만들어야 한다. 생성된 form 입력 부분에 문제에서 요구하는 값들을..
32번 문제 페이지 하단에 "Join" 버튼을 클릭한다. "Join" 버튼을 클릭하면 자신의 id 값이 생성되면서 초기 스코어는 "0/100" 으로 초기화 된다. 그리고 id를 클릭하면 스코어가 +1 된다. 짐작컨데 클리어 조건은 스코어가 100/100 이 되야 하는거 같다. 100점으로 올리기 위해 다시 한번 id를 클릭하면 오류가 나타난다. 아마 투표 중복 체크 여부를 판단하는 듯 한데 이런 경우 다음과 같은 정보를 사용한다. - User-Agent - Public IP - Cookie - Database Data 32번 문제의 경우 "vote_check" 쿠키를 통해 중복 투표 여부를 체크하고 있었다. 투표를 하고 나면 "vote_check" 값이 "ok"가 된다. 수동으로 투표하고, 쿠키 값를 통..