목록WebHacking/WarGame (65)
Iriton's log
Description: 사용자의 정보를 조회하는 API 서버입니다.Path Traversal 취약점을 이용해 /api/flag에 있는 플래그를 획득하세요!Path Traversal경로 탐색 공격(디렉터리 탐색)은 웹 루트 폴더 외부에 저장된 파일 및 디렉터리에 액세스 하는 것을 목표로 한다. "../" -> 시퀀스 및 그 변형으로 파일을 참조하는 변수를 조작하거나 절대 파일 경로를 사용하여 애플리케이션 소스 코드 또는 구성을 포함하여 파일 시스템에 저장된 임의의 파일 및 디렉터리에 액세스하는 것이다. 취약점 분석입력 받은 userid에 대한 정보를 출력한다.근데 api/flag를 보면 되는데 경로가 api/user/{userid}이기에 userid에 ../flag를 넣으면api/flag를 볼 수 있게 되..
서버에 접속하면 문자들이 빠른 속도로 날라다닌다.별도 소스파일을 제공하지 않아서 개발자모드로 코드를 파악해 보자. 코드를 보니까 img file 배열이 있다. 1부터 순서대로 저장되어 있는 게 아니라서 해당 img 파일을 순서대로 조합하면 flag가 나올 거 같았다. 개발자모드에 source 탭이 있어서 여기에 이미지 파일이 있으려나 하고 봤는데역시나 있었다.img file 배열에 저장된 순서대로 조합을 해보자.Too_H4rd_to_sEe_th3_Ch4rs_x.x 드림핵 flag format에 맞게 제출하면 정답이 뜬다.
서버에 접속해 보면 input1과 input2를 제출하도록 구성되어 있다. 아무거나 입력해서 확인해 보니까 check.php로 넘어가면서 Try again 문자열이 뜬다.이것만 봐서는 뭔지 모르겠으니까 소스코드를 분석해 보자. 입력 후 이동한 URL을 보면 check.php 이다. 입력을 처리하는 소스코드가 check.php 파일에 있을 것 같으니문제 파일에서 check.php를 봐야 한다.웹 디자인을 위한 코드를 제외하고 본격적으로 살펴봐야 할 소스코드는 위와 같다.22: require_once 함수는 다른 php 파일의 클래스를 읽어오는 것이다. 따라서 flag.php를 읽어오는 코드이다.25~28: POST 메서드로 클라이언트가 입력한 값 input1과 input2를 서버로 보낸다.30번째 줄부터는..
해당 웹 페이지는 http가 포함된 url의 데이터를 불러와서 출력한다. 소스코드를 살펴 보면 11번째 줄에서 http가 포함되었는지 확인을 한다. 포함되지 않았다면 문자를 띄우며 실행되지 않지만, 포함되었다면 shell_exec 함수를 이용하여 curl 명령어를 실행한다. escapeshellcmd()란? 임의의 명령을 실행하기 위해 쉘 명령을 속일 때 쓰이는 문자열의 모든 문자를 escape 시킨다. &#;`|*?~^()[]{}$\, \x0A 및 \xFF. 해당 문자 앞에 백슬래시를 넣어서 실행되지 않게 하는 것이다. curl란? URL 요청에 대한 응답을 출력하는 게 기본값. Option -o : 응답을 임의의 파일에 저장 등등 escape 함수에서는 하이픈(-)을 필터링하지 않을 뿐더러, curl..
name을 입력 후 제출하면 인사를 해준다. 여기에 어떤 명령어를 넣어야 할 거 같다. view-source로 소스코드를 살펴보자 대놓고 system 함수를 이용하여 ls를 실행하라고 한다. system 함수는 한 줄에 여러 명령어를 사용할 수 있다. 따라서 주어진 echo hello 뒤에 세미콜론으로 구분을 해 주고 ls를 넣으면 echo hello 명령 실행 후 ls 실행이 된다. 하지만 해당 코드에서는 싱글 쿼츠 안에 아까 name에서 입력 받은 값을 넣어준다. name에서 임의로 싱글 쿼츠를 닫아주면 그 이후로는 내가 마음대로 명령어를 사용할 수 있다. '; ls '를 입력하면 첫 번째 싱글쿼츠로 소스코드에 있는 싱글쿼츠를 닫을 수 있다. 세미콜론으로 구분 후 ls를 입력하면 되는데, 소스코드에 ..
소스코드를 확인하면 입력받은 값을 별다른 필터링 없이 cmd 명령어 ping으로 넣는다. 개발자가 원한 건 저기에 IP 주소를 넣는 것이겠지만 이를 우회해야 한다. 명령어를 한 줄에 두 번 사용하려면 세미콜론(:)으로 구분해주면 된다. ls . 으로 현재 디렉토리에 있는 파일을 확인해 보자. flag.py가 있다. 이 파일의 데이터를 읽어들이는 cat 명령어를 사용하면 볼 수 있을 것이다. 8.8.8.8; cat flag.py
/admin/notice_flag에서 userid 값이 admin이 아니면 Access Denied 2를 띄우며 리턴되지만 admin이라면 memo_text에 플래그 값을 추가한다. 이 memo_text는 어디에 쓰일까? 전역 변수 memo_text는 메모 페이지에 들어갈 때 파라미터값을 전달 받아서 html에 작성하고 그 값을 띄운다. 즉, /admin/notice_flag 에 admin으로 접근하면 된다. flag 페이지에서 값을 입력 받고 check_csrf 함수를 호출한다. 해당 함수에서는 csrf 인지 판별하기 위해 /vuln를 거쳐서 온다. /vuln에서는 (사진에선 안보이지만) frame, script, on을 필터링 한다. sscript 와 같이 문자 사이에 문자열을 넣어도 되는데 이번엔 ..