웹쉘 탐지 솔루션이 기존의 윈도우 서버 기반의 ASP 웹쉘을 탐지하려면 확장자, 메타 데이터만 체크하면 됐다. 하지만, GitHub에 공유된 웹쉘을 보면 윈도우 서버에서 인식하지 않는 파일이 존재하여 실질적으로 인식하지 않는지 테스트해봤다.


윈도우 서버에 구축된 웹 서버는 기본적으로 ASP, MSSQL 환경인 경우가 대부분이다.


윈도우 서버에서 인식할 수 있는 간단한 ASP 웹쉘(<? eval($_GET[cmd]) ?>)을 생성하고, 파일 이름을 con.asp 이름으로 변경하려고 시도하면 윈도우 시스템에서 예약되어 있으므로 생성할 수 없다고 출력된다.

 

con 이름의 파일은 도스 시절에 사용한 장치이름으로 하위 버전의 호환성으로 생성할 수 없다. 윈도우에서 생성할 수 없는 파일은 aux, con, com0 ~ 9, nul, prn, lpt0 ~ 9이며, 해당 파일은 이미 예약되어 있는 파일이다.



ASP 웹쉘을 test.asp로 저장하고, cmd 창에서 생성한 웹쉘 파일을 con.asp로 리다이렉트 시킨다. dir 명령어로 생성한 con.asp 파일을 조회해보면 파일 이름이 보이지 않는다.



more 명령어를 입력하여 con.asp 파일의 내용을 출력해보면 접근 거부 메시지가 출력된다. 이는 존재하지 않는 파일의 내용을 보는 것이 불가능한 일이다.



test.asp 파일의 내용을 con.asp 파일로 리다이렉트를 시키는데, con.asp 파일의 절대 경로 앞에 \\.\를 지정한다. dir 명령어로 현재 디렉토리 목록을 조회해보면 con.asp 파일 이름이 보인다.



type con.asp 명령어를 입력하면 파일 내용이 출력되지 않는다. 하지만, 절대 경로 앞에 \\.\를 지정하면 con.asp 파일의 내용이 출력된다.


디렉토리는 맨 뒤에 .(점)을 붙이면 생성되지 않는데, 강제로 .(점)을 붙여 생성하고, 생성된 디렉토리 내의 파일도 생성할 수 있다.



▶ WebShell Decode (UnPHP)

▶ SQL Injection INTO OUTFILE - WebShell, Backdoor Upload

▶ Metasploit meterpreter 기능 및 사용법

▶ XSS htmlspecialchars 함수 우회

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유