ssp_001

2026. 5. 19. 10:11·Write-up/DreamHack

프로그램은 i386, 즉 32비트 아키텍처를 사용중이다. 

문제는 카나리 값이 일치하는지 확인하는 SSP 방어 기법을 우회하여 익스플로잇 및 쉘 획득 후 flag값을 얻는 것이 목표이다.  

checksec으로 보안 적용 상태를 확인해보면 카나리 값이 적용되어있는 것을 확인할 수 있다. 

값을 입력받는 read와 scanf가 여러개 있지만, read는 정의한 문자열의 크기 만큼만 읽는다. 반면 scanf는 문자열 크기에 대해 제한이 없으므로 공백 문자만 피하면 되겠다. 즉, case P를 공략할 것이다. 
name_len을 입력받고 name_len만큼 name에 읽어들이니 case E를 사용할 수도 있을 것 같다.

 

get_shell() 함수가 존재하니 쉘코드는 만들지 않아도 될 것 같다. 해당 함수를 실행시키면 쉘을 얻을 수 있을 것이다. 

get_shell() 주소는 0x80486b9이다.

실행을 해서 어떻게 돌아가는지 확인을 해보자 

 

아래는 main의 어셈블리 변환 결과이다. 

box의 주소는 ebp-0x88 (0x40), name의 주소는 ebp-0x48 (0x40), 카나리 값은 ebp-0x8에 위치한다. 

아키텍처가 i386이므로 카나리값 4바이트, SFP, RET도 4바이트 이다. 

 

얻은 정보들을 토대로 구조는 다음과 같을 것이다.

case 'P'는 idx 값을 입력받아서 해당 idx 위치에 해당하는 값을 16진수 두자리로 출력해준다. 이 함수를 이용해서 4번 반복하여 한 자리씩 카나리값을 얻을 수 있을 것이다.

카나리값이 얻어지는 것을 확인했다.

이를 토대로 서버에 보낼 페이로드를 짠다. 

 

페이로드를 구성하여 서버에 연결했더니 카나리 값이 일치하지 않아서 자꾸 프로세스가 중지되는 현상이 있었다. 

p32 를 통해서 패딩을 진행했는데, 얻어낸 카나리값은 맞았지만 아키텍처가 리틀 엔디언을 사용하기 때문에 p32를 사용하면 해당 값을 리틀 엔디언 형식으로 패딩하는 깃이었다. 즉, \xnn\xnn\xnn\x00 형태가 되버린다.

 

하지만 for문을 통해서 순서대로 카나리값을 얻었기 때문에 이미 리틀 엔디언 순서라서 리틀 엔디언을 고려하지 않아도 된다. 

그래서 리스트에 담아서 bytes로 변환하는 방법을 택했다. bytes는 리스트에 들어있는 순서 그대로 바이트를 만들어준다.

 

int()는 맨앞/뒤의 공백/개행을 자동으로 제거하여 변환해준다.

두가지 방식 비교

 

최종 스크립트는 아래와 같다. 

 

저작자표시 비영리 변경금지 (새창열림)

'Write-up > DreamHack' 카테고리의 다른 글

Return to Shellcode  (0) 2026.05.18
basic_exploitation_001  (0) 2026.05.17
basic_exploitation_000  (0) 2026.05.17
Return Address Overwrite  (0) 2026.05.16
shell_basic  (0) 2026.05.13
'Write-up/DreamHack' 카테고리의 다른 글
  • Return to Shellcode
  • basic_exploitation_001
  • basic_exploitation_000
  • Return Address Overwrite
권 한
권 한
포렌식 같이 하실래요?
  • 권 한
    Kwon5an.log
    권 한
    • 분류 전체보기 (115) N
      • @Xpert (28)
        • 2025 (23)
        • 2026 (5)
      • Forensic (26)
        • Windows (7)
        • Linux (3)
        • Memory (4)
        • Network (0)
      • System Hacking (6)
      • Reversing (0)
      • STUDY (11)
        • 컴퓨터 구조 (2)
        • 운영체제 (0)
        • 알고리즘 자료구조 (0)
        • CS (7)
      • #컴공에서살아남기 (15) N
        • 201 C++ (3)
        • 201 보안기초 (12) N
        • 201 OSS (0)
      • Write-up (15)
        • H4CKING GAME (1)
        • DreamHack (12)
        • bandit (0)
      • PROGRAM (0)
        • K-shield.jr (0)
      • PROJECT (0)
      • 사담.생각.끄적끄적 (7)
  • 공지사항

    • Notice
  • 링크

    • DAILY BLOG
    • Velog
    • NOTION
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.6
권 한
ssp_001
상단으로

티스토리툴바