Python渗透
text::Python
一、渗透流程
二、Python基础补充 1 命令行操作 1.1 sys
sys.argv:[0]是本身,[1]是第一个参数,等等。列表存储。
1.2 getopt
自定义带参输入。
opts,args = getopt.getopt( sys.argv[1 :] , "u:p:" , ["file=" ])
1.3 optparse
自动生成帮助文档。
帮助
parser = optparse.OptionParser(usage) parser.add_option('-u' ,'--user' ,dest='User' ,type ='string' ,help ='target user' ,default='root' ) options,args = parser.parse_args() import optparseusage = "python %prog -u/--user -p/--password " parser = optparse.OptionParser(usage) parser.add_option('-u' ,'--user' ,dest='User' ,type ='string' ,help ='target user' ,default='root' ) parser.add_option('-p' ,'--password' ,dest='Pad' ,type ='string' ,help ='target password' ) options,args = parser.parse_args() print ("options:" ,options)print ("user:" ,options.User)print ("password:" ,options.Pad)print ("args" ,args)
1.4 argparse
同理 optparse 但比 optparse 更简单快捷。
帮助
import argparseparser = argparse.ArgumentParser() parser.add_argument('-u' ,'--user' ,dest='User' ,type =str ,default='root' ,help ='target User' ) parser.add_argument('-s' ,'--sex' ,dest='Sex' ,type =str ,choices={'男' ,'女' },default='男' ,help ='target Sex' ) parser.add_argument('-n' ,'--number' ,dest='Num' ,nargs=2 ,required=True ,type =int ,help ='Target Two Numbers' ) arg = parser.parse_args()
2 网络编程
socket与socketserver
2.1 IP地址查询
GeoLiteCity.Dat
ip查询:【1】 【2】 【3】 【4】
import pygeoipgeo = pygeoip.GeoIP( 'GeoLiteCity\GeoLiteCity.dat' ) geo.record_by_name( 'ip' )
2.2 基础函数 from socket import *s = socket( AF_INET , SOCK , IPPROTO ) s.bind(tup) s.connect(tup) s.listen(backlog) conn , addr = s.accept() s.send(buf, [,flags]) s.recv(buflen, [,flags]) s.sendto(str , addr) data,addr = s.recvfrom(buflen, [,flags]) s.sendall(buf) buf.encode() / decode()
2.3 其他函数 import uuiddef get_Mac_Address (): mac = uuid.UUID(int = uuid.getnode()).hex [-12 :] return ":" .join([mac[e:e+2 ] for e in range (0 ,11 ,2 )]) ip = gethostbyname(gethostname()) gethostbyaddr(ip) getservbyport(3389 ,"tcp" ) getservbyname("http" )
2.4 文件传输实例
my::案例
结构体
服务器
提示界面(cmd)——创建线程类(类中实现发送文件,不需要再 listen 等操作)——发送数据
socketserver.ThreadingTCPServer(addr,MyServer) class MyServer (socketserver.BaseRequestHandler): def handle (self ): self.request self.request.close() struct.pack('i' ,int ).encode('utf-8' ) json.dumps(dir )
客户端
提示界面(cmd)——connect——接收数据
struct.unpack('i' ,int ) json.loads(info.decode('utf-8' ))
2.5 可执行文件转化
pyinstaller打包只可再编译同一操作系统下运行。(不同易报错)
3 setting
三、Pocsuite3 1 安装
Pocsuite3安装:
pip install pocsuite
git clone https://github.com/knownsec/pocsuite3.git
wget https://github.com/knownsec/pocsuite3/archive/master.zip
必要库安装(在pocsuite3库下使用):
cd /usr/lib/python3/dist-packages/pocsuite3
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
使用:
在pocsuite3路径下,python3 cli.py <-para>
2 cli.py使用
Shodan的Key验证:https://api.shodan.io/account/profile?key=xxx
Fofa的key验证:https://fofa.info/api/v1/info/my?email=xxx&key=xxx
命令
作用
-u URL [URL…] , —url URL [URL…]
直接指定URL,可以指定多个
-f URL_FILE , —file URL_FILE
加载指定文件中的目标
-r POC [POC…]
加载POC脚本
-c CONFIGFILE Load options from a configuration INI file
调用配置文件。通过配置文件中的配置信息对目标进行POC验证
—verify
验证目标
—attack
攻击目标
—shell
交互模式
—command [command]
执行命令
python3 cli.py -r pocs/poc-flask.py -u http://ip -- verify python3 cli.py -r pocs/all -flask.py -f /root/url.txt --attack --command id python3 cli.py -r pocs/all -flask.py -f /root/url.txt --shell python3 cli.py -c ../pocsuite.ini python3 cli.py -r pocs/redis_unauthorized_access.py --dork "product:redis" python3 cli.py -r pocs/redis_unauthorized_access.py --dork-shodan "product:redis" --shodan-token "xxx" python3 cli.py -r pocs/redis_unauthorized_access.py --dork-fofa "service:redis" --fofa-user "xxx" --fofa-token "xxx"
3 console.py使用 python3 console.py help list use [path] use pocs/poc-flask show options set [Name] [value]set target http://ip run exploit
4 Flask模板注入漏洞
Jinja2
from flask import Flask, requestfrom jinja2 import Templateapp = Flask(__name__) @app.route("/" ) def index (): name = request.args.get('name' , 'guest' ) t = Template("Hello" + name) return t.render() if __name__ == "__main__" : app.run() http://127.0 .0 .1 :5000 ?name={{2 *2 }}