목록WebHacking/WarGame (59)
Iriton's log
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2L3Ye/btsHGhsqT3M/RtSkmxbHxAOqmLk2yYnVh1/img.png)
문제를 클릭하니 까만 화면과 함꼐 debug me 라는 경고창이 떴다. 페이지 소스를 보려고 하니 전혀 읽을 수 없게 되어 있었다.구글링 해 보니 코드를 예쁘게 정리해 주는 좋은 사이트가 있어서 활용해 봤다.링크: Online JavaScript beautifier Online JavaScript beautifierBeautify JavaScript, JSON, React.js, HTML, CSS, SCSS, and SASSbeautifier.io 진짜 예쁘게 정리해 준다.아까 debug me라고 뜬 경고창이 생각나서 [Ctrl + F]로 alert를 쳐 봤다. 그랬더니 조건문을 볼 수 있었다.else문을 콘솔창에 넣고 실행시켜 보았다. 그랬더니 아까 본 경고창이 떴다.그럼 if문이 성립하지 않을 때 경..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bggSKj/btsHFmVwFDl/cJ7TPv8GwfOqS61jAI6Xfk/img.png)
https://webhacking.kr/challenge/web-12/ Challenge 27 webhacking.kr 웹에 들어가, 소스 코드를 확인해 보았다.여기서 ?view_source=1 를 클릭하여 상세 코드를 볼 수 있었다.잘은 모르겠지만 대충 아이디가 guest면 guest를 반환하고admin이면 문제가 해결되는 거 같다. 구글링해 본 결과if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");=> preg_match 함수를 통해 select, limit 등 문자열을 필터링하고 no hack을 출력. $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 wh..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cQ4SZK/btsHvYHnsmY/uEQZ4iXlT08RF0SXpn2430/img.png)
Description: 사용자의 정보를 조회하는 API 서버입니다.Path Traversal 취약점을 이용해 /api/flag에 있는 플래그를 획득하세요!Path Traversal경로 탐색 공격(디렉터리 탐색)은 웹 루트 폴더 외부에 저장된 파일 및 디렉터리에 액세스 하는 것을 목표로 한다. "../" -> 시퀀스 및 그 변형으로 파일을 참조하는 변수를 조작하거나 절대 파일 경로를 사용하여 애플리케이션 소스 코드 또는 구성을 포함하여 파일 시스템에 저장된 임의의 파일 및 디렉터리에 액세스하는 것이다. 취약점 분석입력 받은 userid에 대한 정보를 출력한다.근데 api/flag를 보면 되는데 경로가 api/user/{userid}이기에 userid에 ../flag를 넣으면api/flag를 볼 수 있게 되..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/4a7p7/btsG4AGl8GZ/dl3GGBHKG4Ed1Ybd1HXxc0/img.png)
서버에 접속하면 문자들이 빠른 속도로 날라다닌다.별도 소스파일을 제공하지 않아서 개발자모드로 코드를 파악해 보자. 코드를 보니까 img file 배열이 있다. 1부터 순서대로 저장되어 있는 게 아니라서 해당 img 파일을 순서대로 조합하면 flag가 나올 거 같았다. 개발자모드에 source 탭이 있어서 여기에 이미지 파일이 있으려나 하고 봤는데역시나 있었다.img file 배열에 저장된 순서대로 조합을 해보자.Too_H4rd_to_sEe_th3_Ch4rs_x.x 드림핵 flag format에 맞게 제출하면 정답이 뜬다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/4xjXP/btsG59Oe3Np/KZCMjbcMiCyhRcTuoPlPeK/img.png)
서버에 접속해 보면 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://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6avhG/btsAJB4rSPI/A5Efgk0ur6kIZfUqHKO180/img.png)
해당 웹 페이지는 http가 포함된 url의 데이터를 불러와서 출력한다. 소스코드를 살펴 보면 11번째 줄에서 http가 포함되었는지 확인을 한다. 포함되지 않았다면 문자를 띄우며 실행되지 않지만, 포함되었다면 shell_exec 함수를 이용하여 curl 명령어를 실행한다. escapeshellcmd()란? 임의의 명령을 실행하기 위해 쉘 명령을 속일 때 쓰이는 문자열의 모든 문자를 escape 시킨다. &#;`|*?~^()[]{}$\, \x0A 및 \xFF. 해당 문자 앞에 백슬래시를 넣어서 실행되지 않게 하는 것이다. curl란? URL 요청에 대한 응답을 출력하는 게 기본값. Option -o : 응답을 임의의 파일에 저장 등등 escape 함수에서는 하이픈(-)을 필터링하지 않을 뿐더러, curl..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HQ6qY/btsAGQnIoBM/vwyHB5RWWFqA7ivQiCwEy1/img.png)
name을 입력 후 제출하면 인사를 해준다. 여기에 어떤 명령어를 넣어야 할 거 같다. view-source로 소스코드를 살펴보자 대놓고 system 함수를 이용하여 ls를 실행하라고 한다. system 함수는 한 줄에 여러 명령어를 사용할 수 있다. 따라서 주어진 echo hello 뒤에 세미콜론으로 구분을 해 주고 ls를 넣으면 echo hello 명령 실행 후 ls 실행이 된다. 하지만 해당 코드에서는 싱글 쿼츠 안에 아까 name에서 입력 받은 값을 넣어준다. name에서 임의로 싱글 쿼츠를 닫아주면 그 이후로는 내가 마음대로 명령어를 사용할 수 있다. '; ls '를 입력하면 첫 번째 싱글쿼츠로 소스코드에 있는 싱글쿼츠를 닫을 수 있다. 세미콜론으로 구분 후 ls를 입력하면 되는데, 소스코드에 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dqNmtQ/btsAmY1lTI6/RD8Pf7mJKizrN3NYSRgLEK/img.png)
소스코드를 확인하면 입력받은 값을 별다른 필터링 없이 cmd 명령어 ping으로 넣는다. 개발자가 원한 건 저기에 IP 주소를 넣는 것이겠지만 이를 우회해야 한다. 명령어를 한 줄에 두 번 사용하려면 세미콜론(:)으로 구분해주면 된다. ls . 으로 현재 디렉토리에 있는 파일을 확인해 보자. flag.py가 있다. 이 파일의 데이터를 읽어들이는 cat 명령어를 사용하면 볼 수 있을 것이다. 8.8.8.8; cat flag.py