Return to Shellcode

2026. 5. 18. 19:48·Write-up/DreamHack

보호 기법 확인은 checksec
RELRO, Canary, NX, PIE 등의 보호 기법 적용 여부 확인이 가능하다.

여기서는 카나리 값이 설정되어있다. 

주어진 프로그램의 코드를 확인해보자. 입력이 2번이다. 

첫번째 입력을 0x100만큼 read하고, 입력받은 값을 바로 뒤에서 출력한다.

첫번째 입력애서 RET까지 조작할 수 있으면 좋겠지만, 카나리 조작되면 값이 조작되면 __stack_chk_fail 함수가 프로세스를 강제 종료 시킨다. 

그렇다면 카나리 값을 알아내야 할텐데, 0x100만큼 출력을 하니 여기서 카나리 값을 릭 시킬 수 있지 않을까?

두번째 입력은 널문자가 나오기 전까지 계속 입력받으므로 이 입력을 통해  반환 주소를 덮을 수 있겠다.

 

첫번째 printf 입력에서 카나리 구하고
쉘 코드 주입해서 -> 실행 흐름 조작하기
buf에 셀코드 주입 (주소 아니까) 및 알아낸 카나리 값, buf의 주소 를 이용해서 페이로드를 작성하면 되겠다.

프로그램을 실행시켜보면 buf와 $rbp 거리가 96이라고 나오는데, %ld 로 출력했으므로 10진수. 변환하면 0x60이다. (96바이트)

 

컴파일러가 최적화를 위해 buf 뒤에 8바이트 패딩을 추가한다. 

그럼 구조가 다음과 같이 된다. 

따라서 버퍼와 카나리 사이의 거리는 96 - 8(SFP길이) = 88 바이트

위의 코드로 버퍼 주소를 파싱해본다. 

파싱이 잘 되는 것을 확인했으니 카나리값을 얻어보자. 다음의 코드로 카나리 릭을 시도한다. 

 

이것 저것 수정해서 했는데 자꾸 프로세스가 중지되는 현상이 있었다... 저녁에 두시간 정도 하다가 그래도 이 현상에서 벗어나지를 못해서 과제하러 갔었다.

다음 날에 다시 시도하려고 이것 저것 코드를 수정해보았는데, 해결이 안되길래 풀이와 다른 코드가 있나 하여 구글링하여 풀이에 성공한 코드를 사용해 보려고 새로 파일을 만들려고 했다. 

새 파일을 만들다가 이전에 풀었던 문제가 있는 폴더에서 파일이 생성되는 것에 이상함을 느껴서,,  경로를 확인해보니 같은 파일을 잘못하고 두개를 저장했었는데 수정을 다른 폴더에 있던 파일에 한 것이었다... 심지어 파일명도 달랐다... r2s인데 r2c로 저장...

꺼진 경로도 다시보자

 

우분투와 VSC를 연결해서 사용중인데 파일을 저번에 생성할 때도 경로를 잘못 지정해서 우분투에서 옮겼었는데, 다시 열지 않고 아래 상태에서 ctrl+s를 하니까 저 경로에 새로 생성이 된다.

 

 

카나리 값을 얻었다!

 

페이로드는 

asm()와 shellcraft.sh()로 쉘코드를 생성한다. 이 쉘코드는 buf에 위치할거다. 

ljust() 함수는 왼쪽으로 정렬된 문자열을 반환한다. width로 폭을 설정하고, 빈 공간은 fillchar로 채운다. fillchar에 인자를 전달하지 않으면 공백으로 채워진다. res = str.ljust(width, fillchar) 형태로 사용한다.
비슷하게 rjust()는 오른쪽으로 정렬된 문자열을 반환한다.

생성한 쉘코드를 ljust로 buf2canary의 폭으로 정렬하고, 빈공간은 'A'로 채운다. 
얻은 카나리값은 8바이트로 패딩해준다.
SFP는 8바이트만큼 'B'로 채웢고, RET위치에는 buf의 주소를 8바이트만큼 패딩하여 넣어준다. 

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

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

ssp_001  (0) 2026.05.19
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' 카테고리의 다른 글
  • ssp_001
  • 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
권 한
Return to Shellcode
상단으로

티스토리툴바