要运行此 Python 版本的 Webshell,需要应用服务器以 CGI 方式支持 python 文件。
先配置 Apache 的配置文件 httpd.conf 使其支持 CGI,因为我使用的是 phpstudy,所以如下设置:
DocumentRoot "D:\phpStudy\PHPTutorial\WWW"
<Directory />
Options +Indexes +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
让 Apache 识别 .py 文件为 CGI 程序:
AddHandler cgi-script .cgi .pl .py
只允许在特别目录下执行cgi程序:
ScriptAlias /cgi-bin/ "D:/phpStudy/PHPTutorial/Apache/cgi-bin/"
以上就完成了 Apache 对于 CGI 的支持的配置。测试一下:
使用 Python 创建第一个 CGI 程序,文件名为 test.py
,文件位于 D:\phpStudy\PHPTutorial\Apache\cgi-bin
目录中,内容如下:
#!C:\Python27\python2.exe
# -*- coding: UTF-8 -*-
print "Content-type:text/html"
print # 空行,告诉服务器结束头部
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '<title>Hello World - CGI 测试!</title>'
print '</head>'
print '<body>'
print '<h2>Hello World! 输出这句话说明测试成功</h2>'
print '</b
时间的车轮滚滚而过,我终于学到代码审计了。
在 Python3 里面,主要有:
eval()
exec()
compile()
注:
python3 删去了execfile()
函数,代替方法如下:
with open('test1.py','r') as f:
exec(f.read())
在 Python2 里面,主要有:
eval()
execfile()
compile()
注:
需要说明的是在 Python2 中exec
不是函数,而是一个内置语句(statement),但是 Python 2 中有一个execfile()
函数。可以理解为 Python 3 把exec
这个 statement 和execfile()
函数的功能够整合到一个新的exec()
函数中去了。
功能: 将字符串当成有效的表达式来求值并返回计算结果。
语法:
eval(expression, globals= None, locals= None)
官方文档中的解释:
将字符串 str 当成有效的表达式来求值并返回计算结果。
globals(全局)和 locals(局部)参数是可选的,如果提供了globals参数,那么它必须是 dictionary 类型;
如果提供了 locals 参数,那么它可以是任意的 map 对象。
eval() 函数三个参数的用法可以参考此两篇博客,写的很清楚了:
总结来说,eval() 函数的第二、三个参数,也就是 globals
和 locals
是可以省略的,如果传入了,它们的作用是定义作用域的。globals
代表作用域为全局、locals
代表作用域为局部。如有冲突,以 locals
的作用域为准 。
第二三个参数分别指定能够在 eval 中使用的函数等,如果不指定,默认为 globals(