'Vulnerablity(Exploit)'에 해당되는 글 12건
- 2016.10.29 [Tip] Format String Bug 팁
- 2016.04.03 [Tip] Linux에서 프로그램 실행시키기(with python os module)
- 2016.03.03 Linux 프로그램에 python으로 값 넣기
- 2015.12.30 [Tip] 프로그램 인자를 python으로 넣기
- 2014.02.07 0x08 Buffer Overflow 공격(2)
- 2014.02.07 0x07 Buffer Overflow 공격(1)
- 2014.01.08 0x06 Buffer Overflow 기초(3)
- 2014.01.07 0x05 Buffer Overflow 기초(2)
- 2014.01.06 0x04 Buffer Overflow 기초(1)
- 2014.01.03 0x03 기본 지식(3)
## Format String Bug 팁들
1. 스택 내 멀리 있는 주소의 값을 printf("%x%x...%x")로 찍어내지 않고 한 번에 출력하는 방법
=> printf("%길이$08x") -> ex) printf("%1337$08x")
=> 위와 같이 fsb를 터뜨리면 스택에 1337번째의 값을 HEX값으로 출력해줌(info leak할때 사용)
2. 스택 내 멀리 있는 주소의 값에 printf("%x%x...%x%n")로 주소 값 변조를 하지 않고 한 번에 변조를 하는 방법
=> printf("%길이$n") -> ex) printf("%12$n")
=> 위와 같이 fsb를 터뜨리면 스택의 12번째의 값에 저장되어 있는 주소에 앞에 출력된 바이트 수만큼 덮어씌울 수 있음.
3. 64bit Format String Bug에서의 특별한 점
=> 메모리 릭을 할때는 %x대신 %lx를 하여 8바이트 릭을 할 수 있음. 당연히 %12$lx도 사용 가능
=> 32비트에서는 바로 스택 $esp + 4부터 릭이 가능하지만, 64bit에서는 바로 스택이 안나옴.
=> 64비트 환경에선 %rdi, %rsi, %rdx, %rcx, %r8, %r9 순서로 릭이 된 다음 스택이 릭 된다.
=> 이런 이유는 64비트 환경에서는 함수 호출 시 레지스터로 인자 값을 활용하기 때문
=> memory write 할 때, 32비트에서는 %12$n으로 해도 되지만, 64비트에서는 "%12ln" 이런 식으로
하면 된다.(0xffff이상의 값을 덮어씌울 수 있다.)
'Vulnerablity(Exploit) > Linux System' 카테고리의 다른 글
[Tip] Linux에서 프로그램 실행시키기(with python os module) (0) | 2016.04.03 |
---|---|
Linux 프로그램에 python으로 값 넣기 (0) | 2016.03.03 |
[Tip] 프로그램 인자를 python으로 넣기 (0) | 2015.12.30 |
0x08 Buffer Overflow 공격(2) (0) | 2014.02.07 |
0x07 Buffer Overflow 공격(1) (0) | 2014.02.07 |
## Python 으로 프로그램 실행시키기
1 2 3 4 5 6 7 8 9 10 | import os TARGET = os.getcwd() + "/a.out" argv0 = "AAAA" argv1 = "BBBB" argv2 = "CCCC" os.execv(TARGET, (argv0,argv1,argv2)) | cs |
위 소스코드와 같이 python의 os 모듈을 이용하여 리눅스에서 프로그램의 인자 값을 지정하여 실행할 수 있다.
이 때 특이한 점은 보통 argv[0]에는 프로그램 실행 경로가 들어가지만 위와 같은 경우 원하는 대로
argv[0] 조작을 할 수 있다.
'Vulnerablity(Exploit) > Linux System' 카테고리의 다른 글
[Tip] Format String Bug 팁 (0) | 2016.10.29 |
---|---|
Linux 프로그램에 python으로 값 넣기 (0) | 2016.03.03 |
[Tip] 프로그램 인자를 python으로 넣기 (0) | 2015.12.30 |
0x08 Buffer Overflow 공격(2) (0) | 2014.02.07 |
0x07 Buffer Overflow 공격(1) (0) | 2014.02.07 |
## Linux Program에 python으로 값 넣기
1. (python -c 'print "name\n1\n" + "A"*44';cat) | echo1
2. gdb에서 python으로 프로그램에 값 넣기
-> r < <(python -c 'print "name\n1\n" + "A"*44')
3. 인자 값 넣기
-> ./program `python -c 'print "A"*44'` `python -c 'print "B"*44'`
'Vulnerablity(Exploit) > Linux System' 카테고리의 다른 글
[Tip] Format String Bug 팁 (0) | 2016.10.29 |
---|---|
[Tip] Linux에서 프로그램 실행시키기(with python os module) (0) | 2016.04.03 |
[Tip] 프로그램 인자를 python으로 넣기 (0) | 2015.12.30 |
0x08 Buffer Overflow 공격(2) (0) | 2014.02.07 |
0x07 Buffer Overflow 공격(1) (0) | 2014.02.07 |
## 리눅스에서 프로그램 인자를 python으로 넣기
리눅스에 다음 [그림 1]과 같이 문자열을 입력받는 간단한 프로그램이 있다.
이 경우 프로그램의 취약점(bof)을 발견하기 위해 문자를 많이 집어넣어야 할 때가 있는데 손으로 일일이 집어넣기에는 너무 양이 많다.
[그림 1] a
이 때 python을 이용하여 인자의 길이를 길게 집어넣을 수 있다. 하는 방법은 다음과 같다.
root@kali:~# (python -c 'print "A"*4 + "B"*4') | ./a
그럼 [그림 2]와 같은 결과가 나타난다.
'Vulnerablity(Exploit) > Linux System' 카테고리의 다른 글
[Tip] Linux에서 프로그램 실행시키기(with python os module) (0) | 2016.04.03 |
---|---|
Linux 프로그램에 python으로 값 넣기 (0) | 2016.03.03 |
0x08 Buffer Overflow 공격(2) (0) | 2014.02.07 |
0x07 Buffer Overflow 공격(1) (0) | 2014.02.07 |
0x06 Buffer Overflow 기초(3) (0) | 2014.01.08 |