- flag07 사용자는 웹 서버에서 호스트에 연결할 수 있는지 확인하기 위해 호스트를 ping할 수 있는 최초의 펄 프로그램
을 작성하고 있었다..
소스코드 분석
- 우선적으로 perl로 작성된 스크립트. 첫줄에 Content-Type 헤더가 보임.
- CGI를 사용한다고 선언했으며, ping함수의 첫번째 매개변수값을 $host변수에 담고있음
- 펄은 잘 모르지만, php에도 foreach라는 반복문이있기때문에, 호스트에 대한 3번의 Ping Test 결과값을 반복문으로
처리해 주는 것 같음. 또한, 2>&1 은 오류를 표준출력과 함께 해준다고 볼 수 있음.
- 마지막으로 ping(param("Host")) 에서 param("Host")값이 ping 테스트의 host가 되는것 같음.
# CGI는 서버와 웹애플리케이션 사이에 데이터를 동적으로 주고받기위한 기술임.
- Level07 로긴
- /home/flag07 에는 실행파일 index.cgi 파일과 딱봐도 웹서버 설정파일인 thttpd.conf 파일이 있음. 일반적으로
conf 확장자는 config파일로 설정파일이라 보면됨.
- index.cgi 파일은 실행파일인(perl)것을 확인할 수 있고, 파일내용은 최상단의 소스코드와 동일한 것을 확인.
- thttpd.conf 파일은 예상하던대로 웹 서버 설정파일.
- 설정파일 내용은 요약하면
1. 7007포트에서 listen하고 있음.
2. 시작될때 디렉터리위치가 /home/flag07에서 시작되고, flag07권한으로 실행됨.
3. 마지막으로 cgi-bin을 위한 파일을 찾기위해, 와일드카드(*)를 사용하여 .cgi로 끝나는 파일을 찾고있음.
즉, 여기서는 index.cgi가 되겠음.
이렇게 해석됨.
- 소스코드상에서 Host파라미터에 대한 값이, ping test의 목적지 호스트가 되기 때문에, GET방식으로 쿼리스트링을
만들어줄 수 있음.
- loopback 주소로 ping test 결과 잘 출력된 것을 확인할 수 있음.
- 하지만 여기서 그치지 않고, 세미콜론을 사용해서 Host=127.0.0.1 ; getflag로 일종의 Command Injectoin을 해줄 수 있
음. 스폐셜캐릭터이기 때문에 세미콜론(;)은 URL Encode ( ; = %3B )해서 작성해주면 됨.
- flag07 권한으로 getflag를 성공하여, 스테이지 클리어.
- 또한 그냥 Host=;getflag 로 getflag만 실행해 줄 수 있음.
'SystemHacking > Nebula' 카테고리의 다른 글
level09 (0) | 2023.01.30 |
---|---|
[Nebula] Level08 (0) | 2022.02.06 |
[Nebula] Level06 (0) | 2022.01.29 |
[Nebula] Level05 (0) | 2022.01.29 |
[Nebula] Level04 (0) | 2022.01.24 |