반응형

CTF 81

[webhacking.kr] 42번 문제

200점인 42번 문제를 풀어보자. test.txt파일은 다운로드가 가능하지만, flag.docx파일은 'Access Denied' alert창이 뜨게 된다. 해당 문제는 flag.docx 파일을 다운 받아 그 안에 있는 flag값을 제출하면 되는 것 같다. 다운로드가 진행될 때는 ?down= 파라미터를 이용한다. test.txt를 다운받았을 때 down 파라미터에 담겨있던 값을 Base64 decoding을 해보게 되면 test.txt문자열이 나오게 된다. 그럼 flag.docx를 Base64 encoding 하여 down 파라미터에 담아 request하게 되면 문제를 해결할 수 있을 것이다. 문서 안에 있는 flag 값은 다음과 같다. 이제 해당 flag를 Auth 페이지에 제출하자.

[webhacking.kr] 41번 문제

250점인 41번 문제를 풀어보자. error_reporting(E_ALL) -> php 에러 메시지 출력하기 41번 문제에서는 에러 메시지를 힌트로 이용한다. flag값이 우리가 올린 파일에 쓰여진다는 것을 확인할 수 있다. 그러나 우리는 $upload_dir의 값을 모르니 때문에 파일을 업로드 한 후 디렉터리에 접근할 수가 없다. 리눅스 파일 시스템에서는 최대 255자의 파일명을 지원한다. 그럼 프록시를 이용해 filename을 최대치 넘게 입력하여 request 해보도록 하자. 에러 메시지가 반환되며 메시지 안에는 해당 디렉터리 경로 정보가 들어있다. 디렉터리 경로 : /4b0e87fef7b5e8ba83894970c9806042e5d6ec9a/ 빈파일을 생성한 후 업로드 시켜 해당 경로로 접근해보자..

[webhacking.kr] 40번 문제

500점인 40번 문제를 풀어보자. 첫 화면에는 입력값에 guest가 들어있었다. 로그인 시도했을 때 guest계정으로 로그인이 정상적으로 이루어진 것을 볼 수 있다. id값을 admin으로 바꾼 후 로그인을 시도했지만 Failure가 반환된다. no=0으로 했을 때에는 성공/실패가 뜨지 않았다. 그러나 no=0||1=1 과 1=2 or조건을 붙였을 때는 성공/실패가 뜬다. 해당 no 파라미터에 injection이 가능한 것으로 확인된다. ?no=0||id=admin&id=guest&pw=guest -> access denied or 조건에 id가 admin인 조건을 넣었을 때는 access denied이 반환된다. 해결방법을 찾아보니 admin을 hex값으로 변환시켜 넣으면 된다. ?no=0||id=0..

[webhacking.kr] 39번 문제

100점인 39번 문제를 풀어보자. 쿼리문의 where 절을 참으로 만들면 1이 반환되어 문제를 풀 수 있게 된다. 소스코드를 자세히 보면 id부분에서 싱글쿼터를 여는 부분은 있는데 닫는 부분이 없다. id='{$_POST['id']} id 값의 '은 ''로 치환되고, \\은 공백으로 치환된다. 그리고 substr()함수에 의해 15자리까지 잘라낸 후 반환된다. 이제 문제를 풀기 위해 싱글쿼터를 닫을 수 있는 방법을 생각해보자. test+공백 10자리 + ' -> test+공백 10자리 + ''로 치환되지만 15자리에서 끊기기 때문에 test+공백 10자리 + '' 빨간 글씨 부분만 반환된다. 그리고 MySQL에서는 'test' = 'test '가 true로 반환된다. 그 이유는 char(6)일 경우 '..

[webhacking.kr] 38번 문제

100점인 38번 문제를 풀어보자. 소스코드에 주석처리되어 있는 admin.php페이지로 이동해보자. admin으로 로그인해야 된다고 쓰여 있는데, admin으로 시도해보았을 때 'you are not admin'을 반환한다. 로그가 위에서 아래로 출력한 순서대로 log viewer에 출력되는 것을 보니 CRLF Injection이 가능할 것이다. - CRLF Injection? CRLF라는 용어는 캐리지 리턴 (ASCII 13, \r) 줄 바꿈 (ASCII 10, \n)을 나타낸다. 그러나 오늘날 인기있는 운영 체제에서는 라인의 종료를 언급하는 데 사용된다. 예를 들어, Windows에서는 CR과 LF가 줄의 끝을 기록해야하지만 Linux / UNIX에서는 LF 만 필요하다. HTTP 프로토콜에서 CR..

[webhacking.kr] 37번 문제

250점인 37번 문제를 풀어보자. view-source ./tmp/tmp-{$time} 파일에 127.0.0.1을 write한다. 업로드 된 파일 이름의 특수문자를 치환한 후, ./tmp/tmp-{$time} 파일에 접속한 우리의 IP를 덮어쓴다. file_get_contents 함수를 이용해서 ./tmp/tmp-{$time} 파일 내의 데이터를 가져와 host변수에 담는다. 그리고 host:7777로 flag값을 전달하게 된다. 이제 문제를 풀어보자. 순서는 다음과 같다. 1. netcat을 이용한 7777번 포트 listening 상태 만들기 및 포트 포워딩 및 방화벽 규칙설정 2. 37번 문제 페이지에 파일 업로드 time값으로 파일업로드 소스코드이다. f.write()함수에는 내 ip주소를 입력..

[webhacking.kr] 36번 문제

200점인 36번 문제를 풀어보자. 문제에 들어가면 해당 문구만 보이게 된다. 현재 디렉터리에서 vi 에디터를 이용하여 index.php파일을 편집하던 도중, 정전으로 인해 소스코드가 유실됬음으로 복구를 요청하는 메시지이다. 힌트를 찾기 위해 자료를 찾는 중, 리눅스 에디터 vi/vim에서 편집 중 비정상적으로 종료해버린 경우나 다른 사용자가 먼저 해당 파일을 실행하고 있는 경우에 접근을 시도할 시 스왑파일(.swp)파일이 생성된다. 이때 원본 파일이 스왑파일로 변경된 것이 아니라 원본 파일은 그대로 있고 스왑파일이 생성되는 것이다. 스왑파일은 .원본파일명.swp형식으로 생성된다. 즉, 숨김파일이며 .swp 확장자를 가진다. 그럼 해당 문제에서의 스왑파일은 .index.php.swp가 될 것이다. 이제 ..

[webhacking.kr] 34번 문제

400점인 34번 문제를 풀어보자. 첫 화면에 들어가면 'debug me'라는 alert창이 뜨게 된다. 소스코드를 확인해보면 보기가 어렵게 쓰여있다. 우선 코드를 보기 쉽게 변환시켜주기 위해 해당 사이트를 이용했다. https://wepplication.github.io/tools/beautifyCode/ 웹 소스코드 정렬 사이트 온라인 코드 정렬 사이트 js, css 등의 소스를 깔끔하게 정렬해주는 사이트 wepplication.github.io 'debug me' alert창이 난 곳을 찾기 위해 debug me 로 검색했지만 나오지 않고, alert으로 검색했을 때에는 1개의 alert만 존재했다. 해당 소스코드의 의미를 확인하기 위해 콘솔 기능을 이용하였다. 우선 alert 부분부터 확인해보면 ..

[webhacking.kr] 33번 문제

200점인 33번 문제를 풀어보자. 첫 화면에서 Wrong이라는 메시지와 소스코드를 확인할 수 있다. get변수에 "hehe"가 담겨있으면 다음 페이지로 이동하게 된다. 두번째는 post 방식으로 post=hehe&post2=hehe2 값이 request되면 된다. 프록시를 이용하여 request를 변조해보자. 세번째는 myip에 내 ip주소를 담아 전송하면 된다. 네번째에는 힌트와 함께 현재 시간을 md5형식으로 변환하여 password 변수에 담아 전송하면 된다. 다섯 번째 페이지는 md555.php가 된다. url을 통해 imget을 보내고 post방식으로 데이터 impost를 보내고 cookie값으로 imcookie를 보내면 다음 페이지로 넘어갈 수 있다. 이제 gpcc.php로 넘어가보자. 이제..

[webhacking.kr] 32번 문제

150점인 32번 문제를 풀어보자. 문제에 들어가면 순위표가 뜨게 된다. 해당 이름을 클릭하면 투표를 할 수 있는데 이미 투표를 했다는 alert창이 뜨게 된다. 쿠키 값을 살펴보니 vote_check 쿠키값이 들어있다. 해당 쿠키를 삭제한 후 투표를 다시해보면 정상적으로 숫자가 카운트되는 것을 볼 수 있다. 이제 문제를 풀기 위해 ctrl+f를 이용해 내 아이디를 찾고 카운트를 100으로 만들어보자.

반응형