카테고리 없음

첫 수업을 마치며 :: Pen-Testing Advanced Course

hacking.ac 2025. 7. 18. 21:20

수업 준비 전

아랍에미리트에 와서 모의해킹으로 첫 수업을 맡았고 1주일간 진행했습니다. 

Basic - Intermediate - Advaced 레벨로 돼 있는데, Intermediate 는 제 순번이 없어서 넘어갔고 그 다음번 코스인 Advanced 를 맡게 됐습니다. 

 

여기서 교육하기 전에 들은 얘기로는 교육생들이 그렇게 잘 하지 않는다고 말 해서 아주 쉽게 만들라고 했습니다. 이전에는 subnet mask를 설명하는 데에 하루를 전부 다 썼으며, 리눅스 기본 명령어 조차도 모르고, 코딩을 짜라고 하면 있는 거 그대로 치는 거도 어려워 한다고 해서 어떻게 과목을 구성해야 하는 지가 감이 잘 안잡혔었습니다.

 

원래는 웹해킹에 조금 더 자신 있어서 웹해킹을 하고 싶었으나, 제가 합류 하기 전에 다른 분께서 웹해킹을 맡아버리는 바람에 제게 선택지가 그렇게 많지 않았고, 그나마 레드팀에서 근무했던 경력을 살려서 모의해킹으로 고르긴 했습니다. 하지만 위에서 언급했듯이 모의해킹을 어떻게 진행해야 할지는 잘 감이 안 와서 이전에 근무했던 분 거를 많이 참고를 했습니다. 

 

쉽게 만들라는 처음의 지시와는 다르게 Intermediate 를 듣고 Advanced 를 바로 수강하는 경우가 이번에 다수 생겼다고 들었고, 또한 입교시험에서 자르는 경우가 없었는데 이번에는 탈락자가 생겨서 '선별된 인원'만 수업을 듣는다는 내용을 듣고 매일 업데이트되는 현지 상황에 맞춰서 강의 준비를 하느라 많이 힘들었씁니다. 

 

수업 내용과 준비 과정

이전에 모의해킹 관련 만드셨던 분은 메타스플로잇만 가지고 실습하는 정도였습니다. 5개정도의 취약점을 가지고 메타스플로잇터블2에 실습하는데 아무리 생각해도 이걸로 일일 6시간 * 4일 교육을 다 채우기는 힘들어 보였습니다. 그리고 난이도를 좀 더 높여도 되겠다는 판단이 들만한 근거들이 위에서 언급한 것처럼 생겨서 최대한 많은 것들을 시도하려고 했습니다. 메타스플로잇과 서치스플로잇은 처음 이틀간 배우고, CTF위주로 수업을 진행으로 꾸렸습니다. 

 

CTF를 풀기 위해서는 VM이 필요했는데, Kioptrix 를 가져다가 사용했습니다. VulnOS, Basic Pentesting1/2, Tappo, DC Series 등이 있었는데 어떤 거는 정상 작동하고 어떤 거는 정상 작동하지 않았습니다. 

 

요즘은 HackTheBox, TryHackMe 등의 유료 플랫폼들이 나오면서 무료로 배포되는 VM이 최신것 중에 초보자들에게 던져줄만한 거를 찾기가 힘들었습니다. 그래서 오래된 것들을 골라야 했고 현재의 VM과는 잘 맞지 않아서 네트워크 셋팅하는 데에 애를 많이 썼습니다. 어떤 거는 Virtual Box에서는 되는데 VMWare 에서는 작동 안 하거나, 그냥 네트워크가 안 잡히거나 등등.. Host-Only 로 하면 된다는데 이거도 안 먹히고 원인 미상의 에러들이 많아서 고르기 힘들었습니다. 업무 시간 중 다수는 VM의 에러잡는 데에 쓴 거 같습니다. 이걸 통해서 VM을 다루는 방법이 많이 성숙해졌습니다. 

 

수업은 바텀업 방식으로 준비했습니다. 처음에는 그냥 적당히 메타스플로잇 사용하는 방법만 가르쳐야겠다고 생각했었습니다. vsftpd, distcc, samba 와 같은 대표 취약점을 가지고 msfconsole 을 이용해서 payload 등을 셋팅하는 방법을 가르치려고 했습니다. 이렇게 제작했더니 수업 전 시범강의 때 '내용이 많이 부족할 거 같다. 얘네들 생각보다 시키는 거 따라하는 거는 잘 한다.' 라는 내용을 들었습니다. 같이 따라하기만 하면 시간 금방갈 거니까 혼자 생각하면서 풀 수 있는 내용을 넣으라고 권유받았습니다. 그래서 내용을 더 추가해야만 했습니다. 

 

하지만 위에 언급했듯이 VM 중에 정상 작동하는 거 1~2개를 고르고, 이것들만 풀 예정이었는데 생각했던 거보다 더 많이 준비해야 했습니다. 근데 수업 자료를 다 만들어 놨는데 다시 VM을 추가하는 거는 생각보다 쉽지 않았습니다. 제가 가르치는 내용만 가지고 완전히 풀 수 있는 VM이면서 동시에 네트워크가 에러없이 잘 작동해야 하는 것을 찾아야 했습니다. 

 

하지만 그런 거는 존재 하지 않았고, 새로 추가될 VM에 있는 내용을 다시 역으로 수업 자료에 끼워 넣었습니다. 그러다보니까 수업자료가 조금 중구난방이 됐습니다.

 

Hash Crack이나 File Transfer(python, nc이용) 같은 경우는 기존에 존재하지 않았지만 수업 자료로 사용하게 될 PC에서는 flag를 얻기 위하거나 혹은 root 계정을 가져가기 위해서는 해쉬를 깨고, searchsploit 을 이용해서 찾은 코드를 Kali에서 Victim 으로 파일을 옮겨서 Victim 에서 컴파일을 해야만 했습니다(FreeBSD의 경우 Kali에서 컴파일 되지 않는 라이브러리가 존재해서 파일을 옮겨야함).

 

그래서 중간 중간에 그냥 Tip! 이라는 거를 넣어서 '이런 경우에 이렇게 사용하면 된다' 라고 알려주기는 했으나 수업 구성이 그렇게 마음에 들지 않았습니다. 정상 작동하는 VM을 찾으면서 + 강의 교안을 수정하면서 이 두 개를 동시에 하다보니까 전체적인 강의의 틀이 만들어지지 않았습니다. 그래서 '내가 이 내용을 앞에서 언급했었나?' 싶어서 강의 교안을 정말 수백번은 다시 돌려보고 있었는지 없었는지 확인하는 과정들이 많았습니다. 

 

다시 돌아간다면 먼저 시험으로 볼 VM을 가장 먼저 선정하고 수업 내용에서 이것들 위주로 다루면서 강의를 풀어나가는 탑다운 방식을 사용할 것입니다. 이번에는 학생들의 수준을 생각보다 낮게 봤다가 수업 시작 2주 전에 시범강의 하고 다시 부랴부랴 수정하느라 애를 좀 먹었던 거 같습니다. 

 

Day 1

학생들이 잘 하지 못하거나, 집중 안 할거를 고려해서 퀴즈 점수가 100점 만점에 40점으로 구성했습니다. 그리고 PDF에 실습하고 나면 결과 중 일부를 노란 박스로 쳐놓고 CTFd를 이용해서 입력받게 만들었습니다. 그래서 수업만 잘 집중한다면 기본 점수 40점을 주려고 했습니다. 

 

학생들이 경쟁을 되게 좋아했습니다. 근데 학생들이 '보이는 거를 그대로 치면 답을 다 알 수 있는데 좀 더 어려웠으면 좋겠다' 라고 했습니다. 그래서 이 때부터 좀 난감했습니다. 얘네들의 니즈를 충족시키기 위해서 강의 내용을 수정해야 하나? 

 

수업도 조금 이상하게 흘러간 게, 수업을 안 듣고 먼저 실습을 자기들이 해버린 다음에 문제를 열어주면 서로 먼저 입력하려고 하는 문제풀이 경쟁이 아닌 피지컬 경쟁으로 변질됐습니다. 그래서 수정을 해야겠다고 다짐을 했습니다.

 

이후 강의들에는 빠른 속도로 진도를 나가고 경쟁할 수 있는 CTF를 마련하려고 했습니다. 이 날에는 사이버 보안에 대한 기본 마인드와 nmap 을 사용하는 방법, dirb로 attack surface를 탐색하고 메타스플로잇/서치스플로잇으로 취약점을 찾고 어떤 공격을 할지 해킹을 단계적으로 설명을 진행했습니다. 

Day 2

기존의 퀴즈는 사용하지 않고 수업만 주구장창 나갔습니다. 본격적으로 메타스플로잇터블2 에 대해 실습을 진행했습니다. vsftpd, samba 등의 취약점 실습을 진행했고, 시스템 하드닝을 진행했습니다. 또한 msfvenom 으로 악성코드를 만들고 윈도우를 감염시켰으며, 간단하게 패킹하는 방법까지 진행했습니다. 

 

사실 이날은 조금 쫄렸던 게, 어제까지 분명 CTFd를 이용해서 '경쟁'을 재밌게 했었던 거 같은데, 경쟁이 사라지고 일방적으로 배우기만 하는 것이 과연 재밌어할까 눈치를 봤습니다. 

 

그래도 이 날은 준비한 수업을 꽉 채워서 했던 거 같습니다. DVWA 설치돼 있었기 때문에 이걸 이용해서 파일 업로드를 배웠고 웹쉘을 어떻게 만드는지, 그리고 msfvenom으로 역시나 웹쉘을 만들어서 올리는 거까지 배웠습니다. 모의해킹의 꽃은 파일 업로드고 웹쉘을 이용해서 쉘을 따고, 쉘을 딴 이후에 LPE를 해야한다고 진행했습니다. 

 

사실 이 때부터 조금은 삐그덕 거렸던 점이 누구는 다 해서 쉬고 있는데, 누구는 있는 거도 못 따라쳐서 손들고 있는 사람들이 있었습니다. 그래서 잘하는 사람들이 못하는 다른 사람들 도와주기는 하는데, 책가져와서 읽거나 딴짓하는 인원들이 있어서 어떻게 조율을 해야할지가 고민입니다.  사실 모든 사람이 실력이 비슷한 게 아니기 때문에 모두가 따라가는 수업은 만들기가 참 힘들겠구나 생각했습니다.

 

Day 3

이 날은 메타스플로잇터블2를 이용해서 좀 더 심화된 내용을 다뤘습니다. Twiki, mutilladae, tomcat 서비스에 대해서 취약점을 배웠습니다. 근데 확실히 경쟁을 좋아한다고 느낀 점이 ppt에 내용은 없이 'tomcat 서비스에 대한 취약점을 찾아라' 라고 던져만 놨습니다.

 

tomcat 서비스는 8180 포트에서 서비스 중이었습니다. 이걸 찾기위해서는 먼저 nmap을 통해서 해당 포트를 찾고, dirb를 통해 /manager/html/ 을 찾아서 접근하는데, 여기서 id/pw를 모르기 때문에 이걸 찾기위해 msfconsole 에서 서치를 해야 했고, 그렇게 brute force를 진행해서 id/pw를 알아낸 이후 file upload 기능이 있지만 여기서는 .war 파일만 업로드 되는 환경을 맞이합니다. 그래서 다시 mgr_upload 에 대한 취약점을 메타스플로잇에서 찾아냅니다. 여기서 트릭은 HttpUserName 과 HttpUserPass에 대해서 값을 입력해야 한다는 점입니다. 이렇게 두 개의 취약점을 연계시켜서 쉘을 확보하는 실습을 진행했습니다.

 

기존에는 1시간 정도만 진행하려고 했는데 애들이 승부욕이 붙었는지 추가로 더 진행하게 됐습니다. 사실 별거 없는 내용이라서 빠르게 진행하고 넘어가려고 했었던 건데, 생각보다 그렇게 실력이 많이 올라오지 않은 거 같아서 추후 일정을 많이 고민했습니다.

 

그래서 그냥 내일 내용을 임의로 앞당겨서 진행을 했습니다. 1개정도 VM을 추가로 푸는데 이 때 Kioptrix #1을 진행했습니다. 물론 예상대로 역시나 잘 풀지 못했고 그렇게 수업이 끝났습니다.

 

Day 4

수업 시작하고 전날 Kioptrix #1에 대해 해설을 진행했습니다. 그리고 바로 DC-1 에 대해서 2시간동안 중간평가를 한번 보려고 했습니다. 이 때가 20point 를 얻을 수 있는 기회였습니다. 

 

학생들이 1시간 45분 즈음에 쉘을 얻기 시작했습니다. 그래서 그런가 2시간에 끝내려고 했는데 30분만 더 달라고 해서 30분을 더 주게 됐습니다. 완전히 다 푼 학생은 없었으나, 거의 최고점에 근접한 학생들은 있었습니다.

 

8시부터 9시까지 전날 리뷰 및 문제에 대한 해설. 9시부터 11시 30분까지 미니Ctf를 진행하고 30분 쉬었다가 12시부터 12시 30분까지 ctf에 대한 해설, 13시부터 14시까지 자습시간을 가졌습니다. 미니 CTF는 DC-1 을 가지고 진행했습니다. 

 

원래는 다음날 있을 시험에서 VM 5개를 주고 각각 루트쉘을 깨라고 하는 게 기존의 목표였습니다. 하지만 하다보니까.. VM 한 개만 주고 flag를 그냥 곳곳에 많이 숨겨놓으면 되겠다고 생각하게 된 계기였습니다. 만약 5개를 다 줬더라면 곳곳에서 헤메고 있었을 거를 생각하니까..

 

저같은 경우에는 어떤 서비스나 플랫폼을 보면 당연히 msfconsole이나 searcsploit 에 검색하면서 동시에 ffuf 같은 거를 돌리면서 한꺼번에 진행하면서 웹도 적당히 서치하면서 자료 수집하면서 모든게 병행으로 일어나는데, 학생들은 아직 그거에 대해 체계적으로 익숙하지 않아서 우왕자왕 하는 모습을 이날 봤습니다.

 

그래도 좀 쉽게 풀라고 웹에다가 flag 몇개 넣어놨는데(그 마저도 쌩뚱맞은 데도 아니고 관리자 페이지, 관리자로 로그인하면 회원 리스트 보는 곳 등) 이 때 몇개 찾은 기억 떄문인지 정작 취약점 찾을 생각은 하지도 않고 웹만 뒤적거리면서 시간을 버리고 있었습니다. 자기가 눈앞에 보고 있는 

 

그래서 다음 날 있을 시험도 어떤 방식으로 진행해야 할 지를 미리 가늠할 수 있는 척도가 됐습니다. 

miniCTF

 

Day 5

시험 당일이었습니다. 가장 쫄리는 게 네트워크 이슈였는데, 그나마 문제 없이 시험을 진행할 수 있었습니다. 시험은 Kioptrix 2014 로 진행했습니다. 그동안 메타스플로잇과 searchsploit 을 많이 연습시켜서 잘 찾을 수 있을 거라 생각했습니다.

 

특히나 학생들이 가장 많이 했던 질문은 '이 많은 취약점 중에서 뭐를 골라야 하냐' 라는 질문이었습니다. 그래서 저는 그냥 '스캐닝을 잘 하고 정확한 버전명을 입력하면 그렇게  취약점이 많지 않고, 또한 당신이 필요한 취약점을 골랐으면 그거로 모든걸 시도해봐야 한다' 라고 원론적인 답변만 했습니다.

 

시험에서도 마찬가지로 많은 취약점을 제한 시간 내에 일일이 다 테스트 해볼 수 없으니 각 단계별로 searchsploit 이나 메타스플로잇에 검색되는 취약점이 몇 개 없는 VM이라서 그나마 괜찮을 거라고 생각했습니다.

 

추가로, 웹 페이지도 별 거 없었습니다. 그래서 학생들이 엄한 페이지를 자꾸 뒤져보면서 시간을 낭비하지 않길 바라는 저의 니즈에 딱 맞는 거 같았습니다. 

 

그리고 CTFd 기능 중에 힌트 기능을 적극 활용했습니다. 전날 miniCTF 에서는 자꾸 힌트를 달라해서 전체 공지로 했어야 하는데, 이 힌트가 누군가한테는 쓸모가 있을 수 있지만, 누구한테는 아직 그 단계를 통과하지 못해서 쓸모없을 수도 있고 오랜시간 고민해서 간신히 통과했는데 내가 힌트를 임의로 줘버리는 거 같아서 신경이 쓰였습니다.

 

그래서 모든 문제에 대해 힌트를 작성했고, 자신의 점수를 희생해서 힌트를 볼 수 있는 기능을 추가했습니다. 맞춘다고 덜 받는 게 아니라 이미 따놓은 점수에서 힌트를 받는 방식입니다. 좀 박하긴 한듯.. 힌트 쓰고 못 맞추면 점수만 깎이고 끝입니다. (눈물)

 

여튼 시험은 2시간동안 정확하게 진행했으며 특이사항 없이 마쳤습니다. 

 

Final Score

 

마치며

흔히 강의같은 거를 듣다 보면 강의자가 '이걸 준비하면서 나도 많이 배웠다' 라는 말을 종종 들었습니다. 근데 이게 딱 제 케이스인 거 같습니다. OSCP 를 준비할 예정이었는데 이거 덕분에 좀 더 탄력을 받았습니다. 근래에는 알고리즘 공부만 했고 CTF 문제같은 거는 대학생 때나 마지막으로 풀었던 거 같은데 옛날 생각도 많이 났습니다. 

 

그리고 VM을 좀 더 잘 다룰 수 있게 됐습니다. 위에 적지는 않았지만 어떤 컴퓨터는 버전 이슈가 있었습니다. 근데 본능적으로 vmx 파일을 열고 적혀있는 버전을 해당 VMware 버전에 맞게 즉석에서 수정하는 기지를 발휘했습니다. 네트워크 작동 안 한다고 Virtual Box 깔아서도 해보고, 브릿지 모드가 VMware 에서 갑자기 안 되는 경험도 겪어서 다시 Virtual Box를 삭제하니까 정상작동하는 경험도 했습니다. 

 

그리고 메타스플로잇, searchsploit 을 계속 쓰면서 반복하고 생각하다 보니 좀 더 유연하게(?) 사용하게 됐으며, 이걸 계기로 알고리즘 공부와 병행해서 HackTheBox 나 VulnHub에 잇는 것들을 풀어볼 예정입니다. 

 

사실은 이 블로그, 그리고 hacking.ac 도 강의를 준비하다가 마련하게 된 것입니다. 강의 자료를 만들다가 이걸 일회성으로 사용하면 너무 아깝다고 생각이 들어서 그냥 public으로 개방하면 좋겠다는 생각을 했습니다. 그래서 VM들을 꾸준히 풀고 hacking.ac 에다가 walkthrough 를 올릴 예정입니다. 이미 수업을 준비하면서 Kioptrix 에 대한 내용은 다 올려 놓았습니다. 

 

단순히 수업을 준비하면서 기술적으로 성장한 것도 물론 있지만, 동기부여를 확실하게 만들어 줬습니다. 분명 살다보면 준비해야 하거나, 그냥 해보고 싶거나 한 것들이 있는데, 이걸 통해서 그래도 그 물길을 트여준 거 같은 기분이 듭니다. 

 

그리고 남을 가르친다는 것이, 솔직히 말하면 저도 흔히 아는 취약점이나 CTF 푸는 방식에 대해서 이해가 안 되지만 그냥저냥 넘어갔던 경험이 있는데, 학생들이 어떤 질문을 할지 모르니 강의 자료를 만들면서 스스로 모르는 것들에 대해서 꼼꼼하게 찾아봤습니다. 그러다보니 좀 더 디테일한 것들을 많이 알게된 계기가 된 거 같습니다.