[취약점분석] Integer Overflow, Uninitialized(시스템 해킹 실습 2일차)

2024. 7. 18. 09:05·K-Shield.Jr

memory corruption

발생하면 컴퓨터가 종료될 수 있는

 

논리 커럽션

컴퓨터 입장에서는 할 일 하는데 사람이 확인 안 해서? 발생하는 것

 

개발을 진행할 때 int형 변수는 사이즈, 범위, 크기 등을 넣을 때 자주 사용한다.

이 범위가 달라지거나 변조되면 큰일이 나겠죠? ->> 메모리 커렵션

integer.c

unsigned int 값은 음수를 제외하고 0~4,294,967,295까지 가능

max에서 +1을 하면?

0x100000000(16진수) = 4,294,967,295

1을 더하는 순간 4바이트를 넘어가게 됨. 5바이트가 됨.

근데 int 형이라고 선언을 했기 때문에 integer overflow가 발생??

 

max에 +1을 하면 5바이트가 되는데 컴퓨터는 4바이트까지만 넣어 주게 됨. 그럼 이 경우에는 0x100000000에서 0x10000000을 제외하고 0x0을 출력하게 됨.

 

-1은 0xFFFFFFFF 인데 이게 unsigned int로 읽게?되면 가자

위에 이해x

 

위는 오버플로우, 아래는 언더플로우


integer overflow

dir = Integer

integer.c = 저장소 코드

최대 사이즈 64

 

integer overflow로 buffer overflow로 연계가 된다.

 

    • malloc(40) : 힙이라는 영역에 40만큼 데이터 할당 후, 힙 주소를 나한테 알려준다.
    • free : 힙 공간을 사용 후, 아무나 사용할 수 있게 해 주는 거?

 

입력값이 저장될 때 =, 기호 두 개도 같이 포함돼서 저장되기 때문에 -2를 한다.

 

62 -63 = -1인데 integer overflow는 표현할 수 있는 가장 낮은 값은 0임. 이렇게 되면 가장 큰 자료형이 나옴. 0xFFFFFFFF요게 나옴. 그래서 이 검사가 제대로 동작하지 않는 것임. -1 이든. -2든 maxSize가 가장 큰 값인 0xFFFFFFFF가 되는 것임.

 

 

ax15를 입력하면 [stdin]에는 a문자 15개와 \n이 들어가게 된다. 이때 MAX_KEY_LEN을 디버깅했을 때, ax15개와 \n까지 가지고 오는 것으로 예상하고 코드를 작성했는데, 실제 MAX_KEY_LEN은 [stdin]에서 가지고 올 때, 개행문자를 제외하고 사용자 입력만 가지고 와서 개행만 남게 되어 1이 되고 -1 를 해서 0 이 돼서 invalid input

 

 

uninitialized

초기회 하지 않은 상태에서 데이터의 읽기 및 쓰기 수행 시 나타난다.

컴파일 이렇게

컴파일 이렇게 하기

힌트?)

크래시가 나면 = segmentation fault 가 난 것= 잘못된 주소를 참조해서 나는 에러

목표)

segmentation fault가 나서 강제종료 시키는 것이 목표

 

하나 알고 해야 한다. => Heap 특성 이용

 

설명)

0x30이라는 것을 할당해요. 그래서 free해서 그 주소를 해제해요. 0x30이라고 하면 그 앞뒤에 메타데이터를 해 놓는다. 요청을 하면 사용 중인 메모리 상태. 해제된 메모리 상태=폐쇄가 된 곳은 따로 관리를 해요. 그래서 30했던 곳을 free하는 거예요. 만약, 또 malloc을 하면 새로운 메모리 공간을 만드는 것이 아니라 앞에서 30만큼 할당하고 해제되어서 free가 되었으니까 이 부분에 할당을 한다. 굳이 새로 만들지 않고 놀고 있는 거에 들어가는 느낌?

 

a = malloc(0x20); // 0x1000
b = malloc(0x30); // 0x1020
c = malloc(0x40); // 0x1050

free(a);

d = malloc(0x20); // 이때 d는 0x1000을 할당 받게 됨.
// a에서 할당 한 곳이 이제 free 상태가 되어서 다음 malloc을 할 때 자유로운 a공간에 할당 된다.

 

소스코드 보고 파악하는 시간을 갖겠습니다.

간단한 데이터 저장 프로그램임.

 

프로그램 사용법을 간단히 알려주자면

allocate를 먼저 실행

0번에 넣겠다

 

힌트)

free함수.

rdi - 첫 번째 레지스터.

처음에 어디서 함수를 실행하는지 보고 bp를 건다. free를 실행하기 전 rdi와 하고 나서의 rdi 값을 비교해 보기

rdi의 내용을 봐야 돼. ni로 free 함수가 끝났을 때의 rdi를 보고 비교해보기

 

힌트)

segment fault 

내가 처리하지 못한 instruction에 멈춰 있음. 이 인자가 뭔지 모른다. 근데 잘 보면 [rdi]는 주소를 참조해서 뭐 할 때 괄호를 사용한다.

주소가 아닌 값에 가서 읽으려고 하니까 죽어버린다. seg fault.

그럼 왜 rdi에 왜 주소가 아닌 값이 들어가 있는가를 생각해야 됨.

bt를 사용해보면 

pd readData - 5660 / printf는 잘 못 된 게 아님. 이게 이상한 거면 내가 잘못된 인자를 준거임. 그럼 나는 여기 printf를 bp로 잡아서 인자를 확인해 보는 거야. rax는 인자로 전달하는 게 아니다? 어제 수업

 

해제되기 전에 데이터 상태랑 해제 직후 데이터 상태를 보면 도움이 된다.

디얼록에서 free함수가 호출돼서 여기에 bp를 잡고

b *deallocate+195

하고 free함수를 실행을 하고

실행 전과 실행 후 비교

 

readData에 data->ptrdl wkf ahtehla.

allocate의 배열에서 가지고 옴

이 친구는 struct data로 이뤄짐

 

이전에 쓴 공간에 뭐가 있는지 알고 사용해? 사용하기 전에는 초기화를 해야 돼.


해당 게시글은 복습을 위한 실습 내용 필기이므로 올바르지 않은 정보가 포함되어 있습니다.

'K-Shield.Jr' 카테고리의 다른 글

[공통과정] 시스템 해킹/OOB, Format String 실습 및 메모리 보호기법  (2) 2024.07.18
[취약점분석] Command Injection(시스템 해킹 실습 1일차)  (0) 2024.07.18
[공통과정] 웹 해킹  (1) 2024.07.15
[공통과정] 웹 해킹/HTTP의 이해  (2) 2024.07.14
[공통과정] 네트워크 해킹/스니핑(Sniffing)(feat. Spoofing)  (1) 2024.07.14
'K-Shield.Jr' 카테고리의 다른 글
  • [공통과정] 시스템 해킹/OOB, Format String 실습 및 메모리 보호기법
  • [취약점분석] Command Injection(시스템 해킹 실습 1일차)
  • [공통과정] 웹 해킹
  • [공통과정] 웹 해킹/HTTP의 이해
min8282
min8282
  • min8282
    min8282
    min8282
  • 전체
    오늘
    어제
    • 분류 전체보기 (110)
      • Security (33)
        • System & Network (2)
        • Application (5)
        • Cloud (20)
      • Dev (18)
        • Node.js (12)
        • Hadoop (3)
        • BOJ (2)
      • Web3 & Blockchain (2)
        • Web3 (2)
      • K-Shield.Jr (15)
      • Web Security Academy (3)
      • Wargame (13)
        • Dreamhack (3)
        • Bandit (10)
      • NS (16)
        • CTF (6)
  • 블로그 메뉴

    • 홈
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    ELB
    스마트컨트랙트
    systems manager
    web security academy
    splunk db connect
    web3 보안
    Path Traversal
    티스토리챌린지
    AWS SSM
    AWS CLI
    메타코드M
    보안 그룹
    metacodem
    prepared statement
    정보처리기사
    amazon s3 트리거
    aws lambda
    탈중앙화
    정처기필기
    ESC1
    정처기 필기
    메타코드
    metacode
    File Upload
    스마트 컨트랙트
    Session Manager
    aws 트리거
    정처기
    오블완
    web3
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
min8282
[취약점분석] Integer Overflow, Uninitialized(시스템 해킹 실습 2일차)
상단으로

티스토리툴바