Security

환경은 ubuntu 16.04 libc-2.23이다. pwnable.tw의 seethefile이라는 문제를 풀다가 좀 궁금해져서 연구하게 됬다. fclose(fp) 를 할 때 파일 포인터가 가르키는 곳을 수정이 가능하다면 leak이 가능하다. 그리고 한가지 신기한점이 flag 조작을 잘하면 fclose가 작동안하게 만들 수 도 있다는점. 실습프로그램이다. stdout으로 진행했다. 일단 미리 magic flag들을 다 적어두었다. #define _IO_MAGIC 0xFBAD0000 /* Magic number */ #define _IO_MAGIC_MASK 0xFFFF0000 #define _IO_USER_BUF 0x0001 /* Don't deallocate buffer on close. */ #defi..
요즘은 16.04를 안쓰지만 공부를 하는 입장에서 16.04에서 썼던 잡 테크닉들을 정리 해보려고 한다. (힙이나 스택관련 기법이 아님) 16.04는 오래되서 잘 쓰이지 않지만 시스템 해킹을 입문할 때 많이 사용하고 아직도 많은 CTF 사이트에서 사용하고 있는 운영체제이다. 다른 버전들과 비교했을 때 크게 다른점은 tcache가 없다는 점이다. 또한 vtable 검사도 없다. 주로 이용하는 가젯들은 다음과 같다. 1. 원가젯 너무나도 당연하지만 그냥 넣었다. 2. setcontext+53 rdi만 컨트롤 가능하면 rsp 컨트롤이 가능해 ROP를 할 수 있는 유용한 가젯이다. 문제에서 활용은 __free_hook에 가젯을 넣거나 fake vtable에 이녀석들을 채워서 컨트롤 했던 것 같다. __free_..
바이너리는 이곳에서 받을 수 있습니다. 환경은 Ubuntu 20.04 glibc 2.31이다. 보호기법은 (당연히) 전부 걸려있다. 그렇게 기능이 많지 않은 바이너리인데 그리고 seccomp black list 또한 걸려있다. execve의 호출은 불가능하다. 1. Take a card 단순하게 사이즈를 입력받고 bss영역에 있는 cardSizeTable에 사이즈를 저장하고 malloc으로 입력한 사이즈 만큼 할당을 받는다. ReadInt는 8바이트만큼 문자열을 읽어서 atoi 로 변환해 반환하는 함수이다. (atoll이 아니다!) 2. Edit 취약점이 생기는 부분으로 edit 할 내용을 전역변수에 저장하고, 다시 그 전역변수의 내용을 strcpy로 복사한다. 그러나 전역변수 내용 전체를 memset ..
이건 정리를 해두어야 할 것 같아서 글을 쓴다. 요약하자면 FS 세그먼트 부분과 , libc 메모리 쪽 컨트롤이 가능할 때 원하는 함수 실행이 가능하다 exit 함수에서는 필수적으로 _call_tls_dtors가 호출이 되는데, ida에 문제가 생겨서 좀 이상해졌지만 저 memory 부분은 free함수이다. 따라서 0x3f0b18과 fs 쪽 메모리를 건드려 줄 수 있다면 원하는 함수를 호출 시킬 수 있다. 이때 free hook 까지 이용하기 위해서는 메모리 세팅을 rdi=[rbx+8]=0 rax=[rbx+0x10]=아무 주소(실제 존재하는) rdx=[rbx+0x18] 으로 맞춰줘야 한다. rdi가 0인이유는 xor연산을 무시하기 위함이다. 저 rax에 주소를 넣어주는 이유는 lock을 하기 때문이다.
ptrace함수로만 뻘짓을 하고 있었는데, /proc/pid/mems 이 녀석이 그냥 프로세스의 메모리였다.. 파일열어서 fseek로 탐색해서 원하는곳에 쓰거나 읽을 수 있다. 단 바뀐 데이터 반영을 위해서는 계속 열고 닫았다가 반복해야함.. heap tracer는 파이썬으로 만들어야겠다. 이런 것이 있다니...
OSOR2
'Security' 카테고리의 글 목록 (2 Page)