McSkidy 는 지난해 12월 Elf McElferson, Elf McSkidy 가 피해통제 모드에 있었던 이후 다시는 그런 일이 일어나지 않도록 하겠다고 다짐했다. 이전의 크리스마스 기간은 크리스마스 몬스터가 크리스마스가 일어나는 것을 막기 위해 산타의 회사 인프라 내의 모든 시스템을 위태롭게 하는 것으로 인해 극도로 스트레스를 받았다.
올해 크리스마스는 여전히 위험할까?
McSkidy 는 이전 사건에 대해 큰 가능성을 보였고 산타의 회사 - *The Best Festival Company* 내에서 보안 팀을 만드는 임무를 맡았다. 경영진의 반발, 예산 책정, 관료주의 문제 등으로 인해 McSkidy 는 11월 8일부터 팀을 구성할 수 있었다. 그 이후로 그녀는 보안 전문가 Elf McHacker와 인턴 Elf McEager 두 명만 고용했다.
11월 30일 저녁이다.
McSkidy 팀은 Best Festival Company의 전체 네트워크 및 애플리케이션 스택 내에서 다운타임 및 보안 사고를 방지하기 위해 열심히 노력하고 있다. McHacker는 VPN을 설치하고 VPN을 통해서만 인프라에 접근할 수 있도록 할 것을 제안했다. 8시간의 긴 설치 및 배포 후 McSkidy는 모니터링 대시보드를 열고 어떤 애플리케이션으로도 트래픽이 전송되지 않음을 확인한다(VPN에 액세스할 수 있는 사람이 아무도 없을 것으로 예상됨).
"신이시여,"
그녀가 말했다.
"다시 해킹당하는 것은 선택사항이 아니군요."
"RING, RING, RING"
그녀의 엘프 핫라인이 울리기 시작했고 그녀는 뛰어내렸다.
"산타의 스케줄이 안 맞아 - 아무것도 안 보여, "
Elf McAssistant가 소리친다. 몇 초 안에, 수백 통의 전화가 걸려오고 McSkidy는 그녀의 속이 가라앉는 듯한 느낌을 받았다. 그녀는 VPN 로그를 분석하기 위해 신속하게 McHacker를 파견했다. 그는 VPN 인증 우회 경로와 유사한 페이로드를 발견하여 VPN을 우회할 수 있었다. 누군가가 잘못된 버전을 설치했다. 전체 네트워크의 보안 상태가 좋지 않은 상황에서 이 알려지지 않은 액터는 모든 애플리케이션과 기본 서버에 액세스할 수 있었다!
이번 사건은 지난번과 달리 아무도 책임을 묻지 않고 있다.
"다시 시작이야"
그녀는 한숨을 쉰다. 크리스마스를 구하는 것은 당신(Elf McEager)과 나머지에 달려있다.
1 일차
계정을 등록한 다음 로그인을 해보자
쿠키 값은 16진수로 인코딩되어있었다.
username을 수정해서 산타계정으로 인증우회를 시도해보자.
Storage 탭에서 수정하고 새로고침하면 산타계정으로 접속 성공. 설정을 활성화 시키고 플래그도 얻을 수 있었다.
2 일차
어제 당신의 영웅적인 행동이 통제 센터의 통제권을 되찾은 후, Elf McSkidy는 당신에게 중요한 일을 맡기기로 결정했다.
"저희는 해킹을 당했다는 것을 알고 있으므로 스스로를 보호할 방법이 필요합니다! 개발 팀은 엘프들이 공장 주변에 어슬렁거리는 수상한 사람들의 사진을 업로드할 수 있도록 웹사이트를 설정했지만, 안전한지 확인해야 합니다. 우리는 그것을 공용 네트워크에 추가합니다. 새 서버에 대한 보안 감사를 수행하고 해킹되지 않는지 확인하십시오!"
File Upload
현대 인터넷에는 프로필 사진, 학교/대학 제출서, 다이어그램, 강아지 사진 등 파일 업로드를 위한 수많은 용도가 있다. 파일 업로드가 매우 일반적이지만 안전하지 않은 방식으로 구현하기도 매우 쉽다. 이러한 이유로 공격 벡터의 중력을 이해하는 것이 중요하다.
서버에 파일을 업로드할 수 있는 기능이 있으면 RCE(원격 명령 실행)로 바로 이동할 수 있다. 제한 없는 업로드 양식은 실행 시 공격 시스템에 다시 연결하여 원하는 명령을 실행할 수 있는 스크립트를 업로드할 수 있음을 의미한다. 필터링이 없는 파일 업로드를 찾는 것은 매우 드문 일이지만 악성 스크립트를 업로드하기 위해 우회할 수 있는 결함이 있는 필터링 기술을 사용하는 파일 업로드를 찾는 것은 훨씬 덜 드문 일이다. 스크립트는 서버가 실행할 수 있는 언어로 작성되어야 한다. 대부분의 웹사이트는 여전히 PHP 백엔드로 작성되기 때문에 PHP는 일반적으로 이를 위한 좋은 선택이다.
가장 일반적인 필터 유형 중 하나와 바이패스만 살펴보겠다.
- 파일 확장명 필터링: 이름이 암시하듯이 확장명 필터링은 업로드된 파일의 확장명을 확인한다. 이 작업은 허용된 확장자 목록을 지정한 다음 업로드된 파일을 목록과 비교하여 확인하는 방식으로 수행된다. 확장이 허용 목록에 없으면 업로드가 거부된다.
- Bypass(우회): 우회는 필터가 어떻게 구현되느냐에 전적으로 달려 있다. 많은 확장 필터들은 점(.)에서 파일 이름을 분할하고 목록과 비교하여 뒤에 오는 것을 검사한다. 이렇게 하면 double-barrelled extension(예: .jpg.php)을 업로드하여 우회하기가 매우 쉬워진다. 필터는 점(들)에서 분할된 다음 목록에 대해 확장자로 생각하는 항목을 확인합니다. jpg가 허용된 확장이면 업로드가 성공하고 악의적인 PHP 스크립트가 서버에 업로드된다.
업로드 시스템을 구현할 때는 원격으로 액세스할 수 없는 디렉터리에 파일을 업로드하는 것이 좋다. 불행하게도, 이것은 종종 그렇지 않으며 스크립트는 웹 서버의 하위 디렉토리(대개 /uploads, /images, /media 또는 /resources와 같은 것)에 업로드된다.
리버스 셸
우리가 악성 스크립트를 업로드할 수 있는 곳을 찾았다고 가정해자. 그리고 필터를 우회했다고 가정해자. 그 다음엔? 우리가 택할 수 있는 몇 가지 방법이 있는데, 그 중 가장 일반적인 방법은 리버스 셸을 업로드하는 것이다. 이것은 서버와 공격 머신 사이의 네트워크 연결을 만드는 스크립트이다. 대부분의 웹서버는 PHP 백엔드로 작성되는데, 이는 PHP 리버스 셸 스크립트가 필요하다는 것을 의미한다. Kali/AttackBox에는 이미 /usr/share/webshells/php/php-reverse-shell.php(참고: 만약 당신이 Kali를 사용하지 않거나 제공된 AttackBox를 사용하지 않는다면)가 있다.
- 리버스 셸을 현재 디렉토리(cp /usr/share/webshells/php/php-reverse-shell.php )에 복사한 다음 원하는 텍스트 편집기로 연다.
- $ip 및 $port가 있는 위치까지 아래로 스크롤한다(둘 다 // CHANGE THIS로 표시됨). IP를 TryHackMe IP 주소로 설정한다(탐색 막대의 녹색 버블에서 찾을 수 있음, AttackBox를 사용할 경우 또는 OpenVPN 연결 팩과 함께 사용자 고유의 Linux VM을 사용할 경우 IP show tun0을 실행하여). 즉, 이중 인용 부호를 유지해야 한다. 포트를 큰따옴표 없이 443으로 설정한 다음 파일을 저장하고 종료한다. 이제 완전히 구성된 PHP 리버스 셸 스크립트가 생겼다!
PHP 리버스 셸은 접근 가능한 위치에 저장되어 있을 때 매우 쉽게 활성화될 수 있다. 브라우저에서 파일을 탐색하여 스크립트를 실행하기만 하면 된다(그리고 리버스 셸을 보낸다).
다이어그램에서 먼저 쉘을 업로드한다. 그런 다음 브라우저에서 해당 항목으로 이동하여 서버가 대기 중인 수신기에 리버스 셸을 다시 보내도록 한다.
'네트워크 보안 > CTF' 카테고리의 다른 글
📖 CTF 정보보안 콘테스트 챌린지북 (네트워크/패킷분석) (0) | 2022.03.02 |
---|---|
📖 실전 바이너리 분석 (lvl2) (0) | 2022.03.02 |
🥤OWASP 주스가게 (0) | 2022.01.02 |
picklerick 🥒🥒 (0) | 2022.01.01 |
🕵🏼 스테가노그래피 🕵🏼 (0) | 2021.12.27 |