profile
공부 내용 저장소

IO_validate_vtable 함수

함수 코드는 다음과 같다. 만약 vtable 값이 section을 벗어나지 않는다면 함수는 종료되고, 벗어난다면 함수가 실행된다. 함수까지 분석하기에는 너무 간 것 같아서 하지 않고 넘어간다. 대신, section 안에 존재하는 공격가능한 함수를 찾은 후,

어제
·
0개의 댓글
·
post-thumbnail

_IO_jump_t 멤버함수 호출 방식

앞서 지나갔던 내용인"실제로 수많은 매크로를 통해 vtable에서 함수가 호출되는 과정은 어떻게 될까?"에 대해서 알아보도록 하겠다.앞서 fread함수 분석 글에서 확인하려다가 실패(?) 한 매크로들이다.하나하나 천천히 따라가 보자.그림으로 나타내면 다음과 같다.확실히

2일 전
·
0개의 댓글
·

__typeof__ 연산자(?) 키워드(?)

\_\_typeof\_\_(x)예시로 보는 것이 제일 효과적일 것 같다.위에서 알 수 있듯이, 어떠한 객체 혹은 자료형을 인자로 받아 그 자료형에 해당하는 expression으로 치환해 주는 역할을 한다.어디에 쓸 수 있을까?매크로 함수에 적합한데, 예시를 보면 이해가

2일 전
·
0개의 댓글
·

fclose함수

뭔가 fclose니까 할당 해제, 초기화와 관련된 것들만 다 해주고 끝날 것 같다.자세히 알아보자.당연히 그냥 불러올 리가 없다. 매크로에 의해 \_IO_new_fclose를 호출하게 된다.\_IO_IS_FILEBUF가 설정되어 있다면 \_IO_un_link를 하게 된

3일 전
·
0개의 댓글
·

fwrite함수

이번에는 fwrite함수를 알아보자.\_IO_sputn인줄 알았지만 fread의 경우와 같이 엄청난 매크로를 거쳐서 \_IO_new_file_xsputn을 호출하게 된다.\_IO_new_file_xsputnfwrite의 경우는 fread와 다르게 버퍼가 가득 차면 fl

4일 전
·
0개의 댓글
·

fread함수

앞서서 FILE 구조체, fopen함수에 대해서 알아보았다.이번에는 이어서, 실제로 파일을 읽고 쓰는 함수인 fread, fwrite 중 fread에 대해서 알아보도록 하자.딱 한 번만 매크로를 쭉 따라가서 어느 함수가 호출되는지 확인해보자.굉장히 길 것 같은 느낌..

4일 전
·
0개의 댓글
·

fopen함수

fopen 함수의 소스코드를 보자.\_IO_new_fopen내부적으로 \_\_fopen_internal을 호출한다.\_\_fopen_internal사실상 여기부터 제대로 된 함수가 시작된다.우선, struct locked_FILE 구조체를 할당하는데,

4일 전
·
0개의 댓글
·
post-thumbnail

_IO_FILE 구조체

구조체 결국 은 의 typedef였다. 변수는 open된 상태를 저장하는 플래그이다. 앞 2바이트는 매직넘버 0xfbad로 고정되고, 뒤의 2바이트가 플래그의 의미로써 사용된다. 플래그의 값들은 다음과 같다. 변수를 보면 리스트 형태로 다른 구조체들과도 연결됨을 알

4일 전
·
0개의 댓글
·

__attribute__ 컴파일러 옵션

\_\_attribute\_\_((randomize_layout))struct에다가 쓸 경우 컴파일 타임에 struct의 멤버 변수들의 순서가 정해진다. -> 보안을 위함.\_\_attribute\_\_((unused))사용되지 않는 변수임을 컴파일러에 명시적으로 알려

6일 전
·
0개의 댓글
·
post-thumbnail

multithread의 메모리 변화

원래는 master_canary 문제를 풀면서 알게된 점을 올리려고 하였으나, 궁금한 것을 찾는 과정에서 방향이 이상해져버림..일단 설명 드가자스레드 2의 스택 주소스레드 2의 스택 주소vmmap한 결과스레드 2의 vmmap스레드 3의 스택 주소스레드 3의 스택 주소v

2023년 5월 24일
·
0개의 댓글
·

flexible array member

구조체의 멤버 변수를 가변 배열로 설정하고 싶을 때 사용한다.배열은 struct의 제일 마지막 멤버로 존재해야 한다.배열 이외의 다른 멤버 변수가 적어도 하나 존재해야 한다.사실 예제코드로 보는 게 제일 편하다.이런 식으로 쓸 수 있다.name배열은 sizeof의 크기

2023년 5월 23일
·
0개의 댓글
·

C언어 전처리 기호

glibc 소스를 읽다가 이해가 안 되는 전처리문을 발견함.참고자료https://ddnemo.tistory.com/24https://norux.me/22

2023년 5월 23일
·
0개의 댓글
·

SECCOMP 우회를 위한 시스템 콜

open 시스템 콜이 SECCOMP에 의해 막혀있다면 openat 시스템 콜을 고려해 볼 수 있다.openat 시스템 콜open 시스템 콜과 완전히 같게 동작하는데, 다음 부분이 다르다 :dirfd 인자는 directory의 fd값으로, pathname이 상대경로라면

2023년 5월 23일
·
0개의 댓글
·

SECCOMP(2)

앞서 SECCOMP가 무엇이고, 어떤 식으로 동작하는지에 대해서 간단히 알아보았다.그러면 이 SECCOMP가 실제로 어떻게 적용되어 있고, 이를 우회하는 방법에 대해서 알아보자.seccomp-tools를 사용해서 확인한다. 다음은 그 예시이다 :struct sock_f

2023년 5월 22일
·
0개의 댓글
·

SECCOMP(1)

Sandbox?취약점 자체를 보호한다기 보단, 공격받을 수 있는 표면적 자체를 줄이는 기법Allow list, Deny list가 존재하여 꼭 필요한 시스템 콜, 파일 접근등을 허용한다.SECCOMP?SECure COMPuting mode의 약자.Sandbox 매커니즘

2023년 5월 22일
·
0개의 댓글
·

syscall call table이 만들어지는 과정

system call의 동작 내부구조에 대해서 알아보자.. 일단 기본적인 시스템 콜 동작은 다음과 같다. user mode에서 software interrupt 발생 kernel mode로 넘어가서 system call 실행 실행 완료 후 다시 user

2023년 5월 22일
·
0개의 댓글
·

꿀팁?

pwndbg에서 ASLR 켜기set disable-randomization off도커 내부에서 gdb 돌릴 수 있게 하기docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined파이썬 string to int명

2023년 5월 19일
·
0개의 댓글
·

pwnable 풀 때 유의할 점..

사용되는 라이브러리가 무엇인가?도커파일이 주어졌을 때, 도커파일을 빌드 후 실행해서 pwndbg를 통해 실행되는 라이브러리가 무엇인지 확인한다.메모리 상태는?아 그냥 주어진 도커파일에다가 이것저것 설치 후에 그냥 거기서 익스를 짜자. 그게 마음 편함.중간에 복붙합시다.

2023년 5월 19일
·
0개의 댓글
·
post-thumbnail

stdout <-> _IO_2_1_stdout_

그런데 찾아보면 stdout이라는 전역 변수 자체가 존재한다는 것을 알 수 있다.일단 확실한 건 stdout이라는 녀석은 FILE \*에 해당하고, \_IO_2_1_stdout\_은 실제 FILE \*을 가지고 있다.stdout은 이 \_IO_2_1_stdout\_을

2023년 5월 12일
·
0개의 댓글
·
post-thumbnail

ptmalloc2에 관한 정보..

chunk의 크기에 대한 정보..할당할 수 있는 메모리 사이즈는 16바이트의 배수로 정렬된다고 한다. 즉, 필요 바이트 수가 32라면 32바이트가 할당되고, 33이 되는 순간 48바이트가 할당되는 식이다. 그런데 malloc에는 헤더가 존재하고, 이 헤더가 가지는 크기

2023년 5월 10일
·
0개의 댓글
·