background

    [CryptoHack] Greatest Common Divisor (GCD)

    최대 공약수(GCD)는 두 양의 정수(a,b)를 나누는 가장 큰 수이다. a = 12, b = 8인 경우 a의 약수: {1,2,3,4,6,12}와 b의 약수: {1,2,4,8}을 계산할 수 있다. 이 둘을 비교하면 gcd(a,b) = 4임을 알 수 있다. a = 11, b = 17의 경우를 보면, a와 b는 모두 소수이다. 소수는 자신과 1만 약수로 가지므로 gcd(a,b) = 1이다. 임의의 두 정수 a,b에 대해 gcd(a,b) = 1이면 a와 b는 서로소 정수라고 말한다. a와 b가 소수이면 서로소(coprime)이다. a가 소수이고 b a인 경우는 b가 a의 배수일 때 a를 공약수로 가지므로 서로소가 아니게 될 것이다) 두 정수의 GCD를 계산하는 많은 ..

    [how2heap] Tcache House of Spirit (glibc 2.35)

    [how2heap] Tcache House of Spirit (glibc 2.35)

    house of spirit은 free 함수의 인자를 조작해 임의의 주소를 해제하여 해당 주소에 쓰기가 가능해지는 공격이다.free 함수의 인자를 조작할 수 있어야 하며 오버라이트 하고자 하는 타겟의 주소를 알아야 한다.해당 영역에 값을 쓸 수 있다면 스택 내에 존재하는 다른 지역변수나 리턴 주소를 조작할 수 있다.가상의 익스플로잇 시나리오를 만들어 보면1. 먼저 버퍼 등에 fake chunk header를 작성한다.(청크 구조를 고려해 0x8 또는 0x10단위로 작성)2. 최초 malloc 호출을 통해 힙 영역을 세팅한 뒤 free 함수로 buffer + 0x10을 해제힌다.  (0x10을 더하는 이유는 fake chunk header를 작성한 부분을 헤더로 인식하도록 하기 위함)3. 다시 malloc..

    [how2heap] House of Force (glibc 2.27)

    [how2heap] House of Force (glibc 2.27)

    House of Force는 top chunk size를 조작해 임의의 주소에 힙 청크를 할당하는 공격 기법이다. 탑 청크의 사이즈를 조작할 수 있어야 하고 원하는 크기의 malloc 요청을 할 수 있어야 한다. 오버라이트 하고자 하는 임의의 주소인 target address와 top chunk address를 알아야 한다. house of force는 glibc 2.29 버전에서 패치 되었다. 익스플로잇을 할 때 먼저 탑 청크의 사이즈를 표현할 수 있는 최대 값으로 조작한다. 이후 첫 번째 malloc으로 target 주소 - header size – 탑 청크 주소 – header size 만큼 요청해 target 주소 – header size까지 힙 청크를 할당한다. 이제 두 번째 malloc으로 한..

    Frame Pointer Overwirte (One Byte Overflow)

    Frame Pointer Overwirte (One Byte Overflow)

    Frame Pointer Overwirte는 하위 함수의 SFP 값 1바이트를 변조했을 때 2번의 에필로그 과정으로 RIP 레지스터를 컨트롤 할 수 있는 공격 기법이다. 공격의 특징은 다음과 같다. 메인 함수에서 호출된 하위 함수에서 SFP 값 중 1바이트를 변조할 수 있어야 한다. 변조한 SFP 값이 쉘 코드가 저장된 스택의 주소 - 4가 되어야 한다. 변조되기 전 SFP 값과 스택의 주소를 비교했을 때 하위 1.5바이트 이상 다르면 공격이 불가능하다. 익스플로잇 흐름은 다음과 같다. 스택의 주소를 구한 뒤 하위 함수의 SFP 값을 쉘 코드가 저장된 주소 - 4로 변조한다. 이후 에필로그 과정을 2번 거치면서 쉘 코드가 저장된 주소가 RIP 레지스터로 들어가 쉘 코드가 실행된다. 함수의 에필로그 먼저 ..

    SQL Injection Tips

    워게임을 하면서 유용했던 팁들을 적어두는 글 SQL Injection은 사용자의 입력을 허락할 때 db의 중요 정보를 탈취하거나 로그인을 우회해 관리자의 권한으로 여러가지 조작이 가능한 공격이다. SQLI는 기본적으로 참과 거짓의 문제이다. 조건을 참으로 만들어줘야 한다. 방법은 여러 가지가 있는데 예를 들어 user 라는 테이블이 아래와 같다고 하자 id name pw 1 admin aaaaaaaaa 2 guest gggggggg select name from user where id = [사용자 입력 값] and pw = [사용자 입력 값]; 위 같은 문장이 주어지고 admin으로 로그인 하고자 할 때 id,pw을 알면 적어주면 되지만 모르는 경우엔 아래와 같이 해줄 수 있다. id 입력 란에 'ad..