System Hacking 37

32bit에서 FSB (Format String Bug) 이해하기 -(2)

참고자료 : JSec님 블로그(blog.naver.com/yjw_sz/221889244689) 저번 (1)편에 이어서 32bit에서 FSB(Format String Bug)를 이해해보자. 시스템 해킹의 주된 목적은 shell을 획득하여 임의의 명령을 실행하는 것이다. 흔히 system함수에 인자를 /bin/sh로 주어서 쉘을 획득한다. system("bin/sh") 저 함수를 어떻게 이용하여 쉘을 획득할까? GOT를 overwrite하여 획득한다. 이를 위해 먼저 PLT와 GOT를 이해하여야 한다. 간단하게 설명하면 PLT는 코드고, GOT는 주소 값이 저장된 공간이다. 함수를 호출하면 PLT 코드가 실행되고 PLT 코드에서 GOT에 적힌 주소로 이동을 하는 것이다. 특정 함수의 GOT를 변경하면 해당 ..

32bit에서 FSB (Format String Bug) 이해하기 -(1)

업데이트 : 2020.10.10 - 틀린 내용 수정 참고자료 : JSec님 블로그(blog.naver.com/yjw_sz/221889244689) FSB 저번 8월 말인가에 봤던 건데 오랜만에 보니까 까먹어서.. 정리해보려고 한다. printf(buf) 에서 흔히 FSB(포맷 스트링 버그) 취약점이 발견된다. printf의 인자 개수는 포맷 문자 개수로 결정된다. buf의 값을 우리가 마음대로 정할 수 있다면 포맷문자를 넣어버리면 우리가 원하는 값을 출력이 가능하다는 뜻이다. 예를 들어 인자로 %d만 넣었을 경우 main함수의 영역이 출력될 수도 있다. 사진 상 우측이 FSB 취약점이 발생한 경우이다. 이를 이용하여 main 함수 스택 내용을 모두 노출 시킬 수 있다. %p를 통해 메모리를 유출할 수 있..

PLT와 GOT

참고 : dreamhack.io 환경 : ubuntu 16.04.7 PLT와 GOT를 처음 접한 곳은 아래 문제이다. jiravvit.tistory.com/entry/dreamhack-pwnable-basicexploitation002-%ED%92%80%EC%9D%B4 [dreamhack : pwnable] basic_exploitation_002 풀이 jiravvit.tistory.com 이때 PLT와 GOT를 아래와 같이 설명하였었다. PLT는 코드이고 GOT는 주소값이 저장된 공간이다. 함수를 호출하면 PLT 코드가 실행이 되고 PLT 코드는 GOT에 적힌 주소로 이동한다. 실습과 함께 더 자세히 알아보자. PLT(Procedure Linkage Table) 외부 라이브러리 함수를 사용할 수 있도록..

System Hacking 2020.09.22

함수 프롤로그(prolog) / 함수 에필로그(eplilog)

jiravvit.tistory.com/entry/dreamhack-pwnable-offbyone000-%ED%92%80%EC%9D%B4 [dreamhack : pwnable] off_by_one_000 풀이 jiravvit.tistory.com 이 문제 풀이를 작성하다가 한가지 의문이 들었다. EBP의 마지막 한 바이트를 건드리는데 왜 EIP control이 가능한걸까?? 이것의 해답을 찾기 위해 함수 에필로그를 찾아보았고, 덤으로 프롤로그도 찾아보았다. 아 참, 함수 에필로그와 프롤로그의 개념을 알기 전에 스택프레임이란 것을 알아야 한다. jiravvit.tistory.com/entry/%EC%8A%A4%ED%83%9D-%ED%94%84%EB%A0%88%EC%9E%84-Stack-Frame 스택 프레임..

System Hacking 2020.09.17

[Buffer Overflow] Return Address Overwrite 실습 - (2)

참고 : dreamhack.io 환경 : ubuntu 16.04.7 [Buffer Overflow] Return Address Overwrite 실습 - (1-2) jiravvit.tistory.com/entry/Buffer-Overflow-Return-Address-Overwrite-%EC%8B%A4%EC%8A%B5-1-2 [Buffer Overflow] Return Address Overwrite 실습 - (1-2) 참고 : dreamhack.io 환경 : ubuntu 16.04.7 jiravvit.tistory.com/entry/Buffer-Overflow-Return-Address-Overwrite-%EC%8B%A4%EC%8A%B5-1 [Buffer Overflow] Return Address O..

[Buffer Overflow] Return Address Overwrite 실습 - (1-2)

참고 : dreamhack.io 환경 : ubuntu 16.04.7 jiravvit.tistory.com/entry/Buffer-Overflow-Return-Address-Overwrite-%EC%8B%A4%EC%8A%B5-1 [Buffer Overflow] Return Address Overwrite 실습 - (1) 참고 : dreamhack.io 환경 : ubuntu 16.04.7 Buffer Overflow란 프로그래머가 할당한 크기의 버퍼보다 더 큰 데이터를 입력받아 메모리의 다른 영역을 오염시키는 것이다. 이를 악용한다면 어딘가에 기계어 �� jiravvit.tistory.com 저번 시간에 이어서 실습을 해보도록 하겠당 저번 시간에 SFP랑 RET의 위치를 찾았다. 하지만 버퍼 오버플로우가 발..

[Buffer Overflow] Return Address Overwrite 실습 - (1)

참고 : dreamhack.io 환경 : ubuntu 16.04.7 Buffer Overflow란 프로그래머가 할당한 크기의 버퍼보다 더 큰 데이터를 입력받아 메모리의 다른 영역을 오염시키는 것이다. 이를 악용한다면 어딘가에 기계어 코드를 삽입한 후 Return Address의 함수 포인터를 공격자의 코드의 주소로 덮어 코드를 실행하는 것을 생각해볼 수 있다. 이 포스팅에서는 이것을 실습해보도록 하겠다. 버퍼 오버플로우를 실습할 example.c 이다. main 함수에서 프로그램의 argv[1]을 vuln 함수의 인자로 전달하는 것을 확인할 수 있다. vuln 함수에서는 함수의 인자인 src 버퍼를 buf 버퍼에 strcpy 함수를 이용해 복사한다. 여기서 버퍼 오버플로우 취약점이 발견된다. strcpy..

pwndbg를 이용한 ELF 동적 분석 방법

참고 : dreamhack.io 환경 : ubuntu 16.04.7 바이너리를 분석할 때, 바이너리가 실행되며 변화하는 상태를 관찰하기 위해 동적 디버깅이 필요한 경우가 있다. 리눅스의 실행파일인 ELF 파일을 동적으로 디버깅하는 방법에 대해 알아보자. 이 포스팅에서 사용할 ELF 디버거는 gdb를 기반으로 만들어진 pwndbg이다. 디버깅할 파일의 소스코드이다. 해당 소스코드를 사진에 제시된 방법으로 컴파일 해보자.. 그럼 ELF 실행파일이 생겼을 것이다. (꿀팁을 주자면 실행파일은 녹색으로 이름이 되어있다 ㅎㅎ) 진짜 ELF 파일이다 ㅇㅇ 이제 디버깅을 해보자. dbg 기반으로 만들어진 pwndbg을 사용하였다. 솔직히 dbg는 가독성이 떨어지는데 그에 비해 pwndbg는 알록달록해서 가독성이 높다...

System Hacking 2020.08.29

[pwntools] 사용법 정리 -(최초 작성 : 20.08.28)

20.08.28 최초 작성 * 목차 [dreamhack : pwnable] basic_exploitation_001 [dreamhack : pwnable] basic_exploitation_002 포너블 문제를 풀면서 내가 작성한 페이로드를 통해 pwntools 사용법을 정리해보도록 하겠다. [dreamhack : pwnable] basic_exploitation_001 풀이 jiravvit.tistory.com/entry/dreamhack-pwnable-basicexploitation001-%ED%92%80%EC%9D%B4 [dreamhack : pwnable] basic_exploitation_001 풀이 JiR4Vvit의 블로그 [dreamhack : pwnable] basic_exploitatio..

System Hacking 2020.08.28

[assembly] 어셈블리어로 별피라미드 출력하기-(2)

환경 : 칼리리눅스 2019.2 * 어셈블리코드에서 outer를 outter로 오타가 났다.. 블로그 포스팅 중에는 이를 무시하고 outer라는 네이밍으로 설명하겠다.. jiravvit.tistory.com/entry/assembly-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96%B4%EB%A1%9C-%EB%B3%84%ED%94%BC%EB%9D%BC%EB%AF%B8%EB%93%9C-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0-1 [assembly] 어셈블리어로 별피라미드 출력하기-(1) 환경 : 칼리리눅스 2019.2 칼리 리눅스에서 어셈블리어를 이용하여 별 피라미드를 출력해보도록 하자. 아래와 같은 피라미드를 옆으로 눕힌 모양(?)을 찍어보도록 하겠다..