| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- Blue Dragon
- c# 로컬포트
- Red Dragon
- stdout flag
- MICROSOFT365
- Los
- TcpClient
- sputn
- 스냅드래곤PC
- lord of sql injection
- 홀펀칭
- puts분석
- copilot
- c# localport
- copilot+pc
- fclose leak
- fclose
- xsputn
- 스냅드래곤노트북
- libhostpolicy.so
- puts
- DotNet
- puts함수
- OSI
- 우분투 C#
- TCP
- get local
- hole punching
- stdout
- dotnet publish
- Today
- Total
목록전체 글 (102)
Osori Development Studio
드디어 malloc의 분석을 시작해본다. tcache 2 가 적용된 최신 버전의 libc로 분석을 한다. 기본적으로 설명은 어느정도 malloc의 동작 원리에 대해 알고있다는 가정하에 설명할 생각이다. Arena 먼저 간단하게 집고 넘어가야 할 것이 있다. 바로 Arena에 관해서이다. Arena는 스레드당 할당된 heap 부분을 관리하는 곳 이라고 할 수 있다. 그래서 메인스레드에서 할당되었으면 main arena라고 부르는 것이다. 아마도 이는 속도 때문이라고 생각한다. 분석하면서도 atomic 계산의 정확도에 대한 말이 나오는 것 보면 동기화 관련한 문제 때문인 것 같다. 그러나 스레드가 많아지게 되면 공간적인 낭비가 이루어지게 때문에 최대로 할당받는 아레나의 수는 64bit에서는 8*core 개수..
환경은 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..
하.. 진짜 단순한 바이너리라도 분석을 제대로 안하면 어떤 꼴이 나는지 볼 수 있었던 문제인데.. 일단 바이너리를 보자. void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) { __int64 v3; // rax unsigned int v4; // [rsp+Ch] [rbp-4h] initialize(); printf("Name:", a2); read_Str((__int64)&name, 0x20u); v4 = 0; while ( 1 ) { while ( 1 ) { menu(); v3 = read_int(); if ( v3 != 2 ) break; if ( v4 2 ) { if ( v3 == 3 ) { print_name(); } else { ..
환경은 libc 2.29이기 때문에 ubuntu 20.04 에서 실습하였다. heap 문제가 partial relro 이다. 이건 귀하군요... 그리고 푼사람도 점수에 비해 매우 적다. 이 문제를 풀기에 앞서 2.29 이상에서 tcache의 변경점을 간단하게 정리할 필요가 있다. 변경점이라고 해봤자 double free가 안된다는 것이다. size검사 안하는건 똑같다. 2.27에선 아주 좋은 놈이였지만 2.29 이상에서는 해당사이즈의 tcache 전체를 돌면서 검사를 하기 때문에 fastbin 과 같은 double free도 안된다. 그러나 우회 방법이 있다. 1. free 된 청크의 bk를 변조하기 2. 사이즈를 변조하기이다. 3. fastbin 쓰기 4. tcache와 fastbin에 동시에 free..
이 단계에서 라업을 쓸거라고는 별로 생각을 못했는데... 좀 많이 막힌 문제여서 라업작성을 한다. 사실 이런류의 취약점을 처음풀어본다. 그리고 점수에 안맞게 매우매우 어려웠다. 그리고 평소에 라업을 너무 대강쓰는 것 같아서 앞으로 쓰는 틀을 좀 정형화 시켜보려고 노력중이다. 보호기법은 위와 같다. got overwrite이 가능하다! 바이너리를 살펴보자면 크게 add, delete, cart, checkout 으로 나눌 수 있다. Add unsigned int add() { char **cart; // [esp+1Ch] [ebp-2Ch] char nptr; // [esp+26h] [ebp-22h] unsigned int v3; // [esp+3Ch] [ebp-Ch] v3 = __readgsdword(0x..
예기치 못한 종료로 파티션이 손상된 경우가 있는데 , 이경우 이렇게 되는 것 같다. BusyBox v1.18.5 (Ubuntu 1:1.18.5-1ubuntu4) built-in shell (ash) Enter 'help' for a list of built-in commands. (initramfs)이렇게 되는데 fsck /dev/sda1 를 입력해주고 y를 계속 눌러준후 reboot을 몇번 해주면 고쳐진다. 또는 fsck /dev/sda1 -y 를 해주면 y를 눌려줄 필요가 없어진다
이 문제는 stdin과 stdout의 flag가 로컬과 다르기 때문에 이를 미리 세팅해놓고 푸는게 좋다. 서버의 환경은 stdin 0xfb2887 stdout 0xfbad208b 이다. largin bin attack을 이용해서 풀었다. 취약점은 다들 쉽게 찾을 수 있다. house of orange로 많이들 푸는듯.
요즘은 16.04를 안쓰지만 공부를 하는 입장에서 16.04에서 썼던 잡 테크닉들을 정리 해보려고 한다. (힙이나 스택관련 기법이 아님) 16.04는 오래되서 잘 쓰이지 않지만 시스템 해킹을 입문할 때 많이 사용하고 아직도 많은 CTF 사이트에서 사용하고 있는 운영체제이다. 다른 버전들과 비교했을 때 크게 다른점은 tcache가 없다는 점이다. 또한 vtable 검사도 없다. 주로 이용하는 가젯들은 다음과 같다. 1. 원가젯 너무나도 당연하지만 그냥 넣었다. 2. setcontext+53 rdi만 컨트롤 가능하면 rsp 컨트롤이 가능해 ROP를 할 수 있는 유용한 가젯이다. 문제에서 활용은 __free_hook에 가젯을 넣거나 fake vtable에 이녀석들을 채워서 컨트롤 했던 것 같다. __free_..