虚拟部署
virtualenv是python环境配置和切换工具,进入该虚拟环境后,pip安装的软件不影响当前主环境,这样就能很好的安装几个python版本了,解决了库之间的依赖关系。
安装virtualenv和pipsudo apt-get install python-virtualenv python-pip
创建虚拟部署环境
|
|
再接着在浏览器访问127.0.0.1:8000,如果正常说明mezzanine的搭建第一步ok。
采用uwsgi + nginx 方案部署
前期准备
首先是安装nginx,uwsgi,再接着集中模板和静态文件,这样好配置静态路径
请求的发送过程大概如下,如果在最后的测试中报错的话就得按照数据的走向来排查问题:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /home/gongfangbisai/app/myproject/; #网站的root目录
index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location /static { #静态配置文件
autoindex on;
alias /home/gongfangbisai/app/myproject/static;
access_log off;
log_not_found off;
}
location / { #非静态请求,通过本地的8630端口来通信,这就是uwsgi后续要启动的端口
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
uwsgi_pass 127.0.0.1:8630;
include /home/gongfangbisai/app/myproject/uwsgi_params;
}
|
|
下面是配置wsgi:
在网站根目录新建wsgi.xml,具体如下:
(app)gongfangbisai@ubuntu:~/app/myproject$ cat wsgi.xml
socket 是和nginx通信接口,pythonpath 为..,这样才能包含djaong的setting,chdir为网站根目录。
启动起来之后访问首页ok,但是到一些具体的功能页的时候就报404,查看输出日志,uwsgi出现404的时候没动,nginx有日志,也就是说请求到了nginx就没发到uwsgi了,按道理应该是nginx的配置有问题,就查nginx的日志实在找不出问题,而且关键是想不到搜索的关键字,总报404于是就将nginx的配置文件的try_files $uri $uri/ =404;注释掉,这回uwsgi有输出了,显示如下:
– unavailable modifier requested: 0 –
搜索该关键字,很多人遇到这个问题,好吧,再把相应的库给装上吧
|
|
找了一下,说是python的路径问题,直接在该环境下python,再找sys.path没问题,后来再一看是自己手贱多加了个sudo,导致python环境不对,去掉sudo 运行uwsgi OK。
XXE漏洞的构造
前期调研未做好,装了ubuntu13.04,装它的原因就是因为他最近没有报本地提权漏洞,有点因小失大。好吧,总不能从头安装mezzine吧,于是拿libxml下手,选用的python的lxml作为问题程序,其etree.so依赖libxml2和libxslt.
于是安装存在xxe漏洞的libxml和libxlst,低于2.9.0,到http://xmlsoft.org/sources/ 下载相应的软件包,这里libxml选择2.8,libxlst选择1.2.27
|
|
安装完这两个软件后,通过strace python test.py > test.log 2>&1发现其还是依赖原先libxml,第一步想到的是update-alternatives,
怎么都不提示有两个版本的的libxml,那怎么办呢,强制修改软链接:
这样libxslt.so的依赖关系搞定了,通过同样的方式搞定libxml2,搞定这两个库之后,还是会提示etree.so依赖2.9的接口,怎么办呢,直接pip install -v lxml==3.0 这个xml版本就不存在依赖2.9接口的问题。在这里也引入了后面会遇到的一个问题,xx测试在python命令行中没有问题,但是在django环境中就有问题,总报库的依赖有问题,猛一回头发现是python虚拟环境搞得鬼,这个虚拟环境会引入libxml和libxslt这种系统lib下的库,但是像python的环境就不会引入,比如/usr/local/lib/python2.7/site-packages/下的,没办法只能在虚拟环境下重新安装了一遍lxml,这样就不会有库依赖的问题了。
gongfangbisai@ubuntu:~/app/myproject/static/media/uploads$ xmllint –noent a.xml //命令行测试比python更容易跟踪
解决了依赖问题,下面就是编码问题了:
django的登录认证:
./django/contrib/auth/views.py 在这里去掉修改密码的功能,注释掉password_change函数
去掉重置密码链接:直接注释用注释url链接
编辑grappelli_safe/templates/registration/ 相关页面
修改上传页面的逻辑处理,对于xml加上对entity的解释功能,这样就能导入一个xxe漏洞,修改filebrowser_safe/views.py