mountainhiker

mountainhiker

  • 분류 전체보기
    • Hardware
    • AI
    • Layer7
      • Layer7_Hardware
      • Layer7_Reverse Engineering
      • Layer7_System Hacking
      • Layer7_Network
      • Layer7_Web Hacking
    • Projects
    • Review
    • About
    RSS 피드
    로그인
    로그아웃 글쓰기 관리

    mountainhiker

    컨텐츠 검색

    태그

    flip-flop System Hacking 포너블 Reverse Engineering 하드웨어 HackCTF web hacking PLT&GOT 시스템 해킹 네트워크 리버싱 Network Lord of SQLI SQLi Layer7 BOF C언어 dreamhack 웹 해킹 Buffer Overflow

    최근글

    댓글

    공지사항

    • 새단장 했슴당~!~!

    아카이브

    System Hacking(7)

    • Buffer Overflow (Stack Canary, FSB)

      Leak Stack Canary through Format String Bug Format String Bug를 이용하여 Stack Canary와 __libc_start_main을 leak 한 후 libc_base를 구하고 Stack Canary를 우회하여 RTL로 익스플로잇을 한다. Stack Canary란, 버퍼 오버플로우 공격을 막기 위해서 Buf와 RET 사이에 랜덤한 값을 심은 뒤 프로그램 실행 전과 실행 후의 상태를 비교한다. 만약 버퍼 오버플로우가 발생했을 경우 Buf부터 RET까지 모두 더미 값으로 채워지게 되어 카나리 값도 변하게 되는데, 이때 카나리 값이 실행 전과 비교해서 달라졌으면 프로그램을 강제 종료시키는 보호 기법이다. Stack smashing detected와 같이 뜨고 프로..

      2021.08.02
    • Format String Bug

      Exploit through Format String Bug Format String Bug를 이용하여 __libc_start_main의 주소를 leak 한 후, 이를 이용하여 libc_base를 구하고 RTL로 익스플로잇을 한다. ret addr에 있는 값을 leak 하려면 레지스터 rsi, rdx, rcx, r8, r9(5) + sfp 직전까지(0x10/8) + sfp(1) + ret(1) : %9$p 즉, %p를 했을 때 9번째 자리에 있는 것이 ret이다. (8로 나누는 이유는 스택에서 단위가 8바이트이기 때문) 실제로 %9$p를 입력했을 때 ret가 출력되는 것을 볼 수 있다. 이때 ret는 __libc_start_main이기 때문에 libc_base를 얻으려면 ret에서 __libc_start..

      2021.08.01
    • Buffer Overflow (ROP)

      Buffer Overflow 공격 문제 풀이 이 글은 Buffer Overflow 공격 문제를 풀이한다. 이 취약점의 원리에 관해서 Buffer Overflow 취약점 글을 참고하기 바란다. Dreamhack basic_rop_x86 system은 프로그램 실행 중에 사용되지 않은 함수이므로 PLT를 이용한 호출은 불가능하다. 따라서 이미 호출한 read함수의 주소가 GOT에 들어가 있어 write를 호출할 때 인자로 read@got를 주어 read의 주소를 leak 한다. read의 실제 주소를 얻으면 libc에서의 read의 offset만큼 빼주면 libc base를 얻을 수 있고, libc base에 system의 offset만큼 더해주면 system의 실제 주소를 얻을 수 있다. RET에 writ..

      2021.07.31
    • Buffer Overflow (RTL, PLT&GOT)

      Buffer Overflow 공격 문제 풀이 이 글은 Buffer Overflow 공격 문제를 풀이한다. 이 취약점의 원리에 관해서 Buffer Overflow 취약점 글을 참고하기 바란다. PLT & GOT 바이너리를 Dynamic Linking, 즉 동적 링킹을 사용한다면 함수를 실행시키기 위해 PLT와 GOT이 사용된다. 함수를 호출하게 되면 그 함수의 PLT와 GOT가 생기지만, 이 둘의 주소는 고정되어 있다. PLT는 Procedure Linking Table의 약자이며, 라이브러리에 속해 있는 함수를 호출할 때 GOT에 점프해서 함수의 실제 주소를 구한 뒤 RIP를 그 주소로 바꾸어 함수를 실행시키는 역할을 한다. PLT는 바이너리와 함수를 연결해 주는 역할을 하며 이때 GOT를 참조한다. G..

      2021.07.14
    • Buffer Overflow (PIE)

      Buffer Overflow 공격 문제 풀이 이 글은 Buffer Overflow 공격 문제를 풀이한다. 이 취약점의 원리에 관해서 Buffer Overflow 취약점 글을 참고하기 바란다. PIE 보호 기법 PIE 보호 기법이란, Code, Data 영역을 비롯한 모든 영역의 메모리 주소를 랜덤화한다. ASLR은 Heap과 Stack, Library만 랜덤화 했지만 PIE에서는 모든 영역을 랜덤화하여 고정된 주소를 이용한 공격을 모두 방어한다. PIE에서는 PIE Base라는 게 있으며, 이 PIE Base를 기준으로 모든 함수는 특정 오프셋만큼 떨어져 있다. 즉, 완벽히 랜덤화 된 것은 아니고 오프셋만 알고 있으면 이를 PIE Base에 더하여 함수의 주소를 알 수 있게 된다. 따라서 오프셋은 항상 ..

      2021.07.11
    • Buffer Overflow (Shellcode)

      Buffer Overflow 공격 문제 풀이 이 글은 Buffer Overflow 공격 문제를 풀이한다. 이 취약점의 원리에 관해서 Buffer Overflow 취약점 글을 참고하기 바란다. Dreamhack - basic_exploitation_000 더보기 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main(int argc, char *argv[]..

      2021.07.10
    • Buffer Overflow 공격

      Buffer Overflow(BOF)란 메모리 공간에 저장되는 모든 데이터가 특정한 길이를 가지고 있고, 그 크기를 기준으로 운영체제가 데이터를 판별한다. 데이터들은 계속 이어져 있으므로 입력값의 크기를 제한하지 않는 취약점을 가지고 있는 함수(scanf, gets, sprintf, strcpy 등)를 통해 우리가 입력한 데이터를 원래 저장되어야 하는 데이터보다 더 많이 입력할 수 있다. 이로써 우리가 입력한 내용은 원래 데이터가 저장되어야 하는 메모리 공간뿐만 아니라 해당 메모리 공간을 넘어서 그 이후의 영역까지도 우리의 입력이 들어가게 된다. 즉, 입력의 크기를 제한하지 않음으로써 우리의 입력으로 뒤에 오는 데이터들을 조작할 수 있게 되고, 프로그램의 실행 결과에 영향을 미칠 수 있는 요소들까지 모두..

      2021.06.14
    이전
    1
    다음
    mountainhiker
    © 2023 mountainhiker. All rights reserved.

    티스토리툴바