让人耳目一新的Python库

本文精选了Python社区中设计简洁且实用的库,包括docopt、requests、sh、purl、path.py、Peewee、PonyORM、Spyne、schema、fn.py、when.py、clize等,覆盖命令行参数解析、HTTP请求、URL处理、文件系统操作、ORM、RPC服务、数据格式检查、函数式编程、时间日期处理等多个方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

1、摘要

2、docopt

3、requests

4、sh

5、purl

6、path.py

7、Peewee

8、Pony ORM

9、Spyne

10、schema

11、fn.py

12、when.py

13、clize

14、Pocoo小组

15、后言和链接



1、摘要

工欲善其事,必先利其器。Python社区高产富饶,有大量的美丽,实用的库, 这里挑选出来一些接口设计简洁的库。

2、docopt

Github: https://github.com/docopt/docopt

Pythonic的命令行参数解析库:

"""Usage:
  quick_example.py tcp <host> <port> [--timeout=<seconds>]
  quick_example.py serial <port> [--baud=9600] [--timeout=<seconds>]
  quick_example.py -h | --help | --version

"""
from docopt import docopt


if __name__ == '__main__':
    arguments = docopt(__doc__, version='0.1.1rc')
    print(arguments)

3、requests

Github: https://github.com/kennethreitz/requests

大神kennethreitz的作品,简易明了的HTTP请求操作库, 是urllib2的理想替代品

API简洁明了,这才是Python开发者喜欢的:

>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}

4、sh

http://amoffat.github.io/sh/

如其名,子进程接口。

from sh import ifconfig
print(ifconfig("wlan0"))

5、purl

github: https://github.com/codeinthehole/purl

拥有简洁接口的URL处理器:

>>> from purl import URL
>>> from_str = URL('https://www.google.com/search?q=testing')
>>> u.query_param('q')
u'testing'
>>> u.host()
u'www.google.com'

6、path.py

github: https://github.com/jaraco/path.py

一个文件系统处理库,不过目前还在开发阶段

from path import path
d = path('/home/guido/bin')
for f in d.files('*.py'):
f.chmod(0755)

7、Peewee

https://github.com/coleifer/peewee

小型ORM, 接口很漂亮:

# get tweets by editors ("<<" maps to IN)
Tweet.select().where(Tweet.user << editors)

# how many active users are there?
User.select().where(User.active == True).count()

类似的我的 CURD.py (https://github.com/hit9/CURD.py) :)

User.create(name="John", email="John@gmail.com")  # create

User.at(2).update(email="John@github.com")  # update

John = User.where(name="John").select().fetchone()  # read

# who wrote posts?
for post, user in (Post & User).select().fetchall():
    print "Author: %s, PostName: %s" % (user.name, post.name)

8、Pony ORM

https://github.com/ponyorm/pony

一个十分独特的ORM,接口简单干净,最大的特点是支持使用generator的语法来进行查询,可以使查询语句变得简洁,灵活,而且漂亮。

例如可以使用如下的语句来进行一个查询:

select(p for p in Product if p.name.startswith('A') and p.cost <= 1000)

同时,Pony ORM还提供了一个ER图编辑工具来进行数据库原型设计。

9、Spyne

https://github.com/arskom/spyne

一个用于构建RPC服务的工具集,支持SOAP,JSON,XML等多种流行的协议。

现在有诸如 flask-restful 以及 django-rest-framework 等框架用于 REST 服务的开发,人们对于 REST 之外的框架似乎兴趣不大。Spyne 很好地填补了这一空白,它支持多种协议,而且本身也封装地相当好:

class HelloWorldService(ServiceBase):
    @srpc(Unicode, Integer, _returns=Iterable(Unicode))
    def say_hello(name, times):
        for i in range(times):
            yield 'Hello, %s' % name

application = Application([HelloWorldService],
    tns='spyne.examples.hello',
    in_protocol=Soap11(validator='lxml'),
    out_protocol=Soap11()
)

短短几行代码便实现了一个支持SOAP 1.1 协议的服务器端application,接入任何一个WSGI兼容的服务器后端就可以运行了。

10、schema

https://github.com/halst/schema

同样是docopt的作者编写的,一个数据格式检查库,非常新颖:

>>> from schema import Schema
>>> Schema(int).validate(123)
123
>>> Schema(int).validate('123')
Traceback (most recent call last):
...
SchemaError: '123' should be instance of <type 'int'>

11、fn.py

https://github.com/kachayev/fn.py

增强Python的函数式编程:

from fn import _

print (_ + 2) # "(x1) => (x1 + 2)"
print (_ + _ * _) # "(x1, x2, x3) => (x1 + (x2 * x3))"

12、when.py

https://github.com/dirn/When.py

友好的时间日期库:

>>> import when
>>> when.timezone()
'Asia/Shanghai'
>>> when.today()
datetime.date(2013, 5, 14)
>>> when.tomorrow()
datetime.date(2013, 5, 15)
>>> when.now()
datetime.datetime(2013, 5, 14, 21, 2, 23, 78838)

13、clize

https://github.com/epsy/clize

用 docopt 写程序的使用doc是不是很爽, clize是一个类似的库。可以用程序的函数名字来作为使用方法

#!/usr/bin/env python

from clize import clize

@clize
def echo(text, reverse=false):
    if reverse:
        text = text[::-1]
    print(text)
if __name__ == '__main__':
    import sys
    echo(*sys.argv)

而这个小程序就可以这么使用:

$ ./echo.py --help
Usage: ./echo.py [OPTIONS] text

Positional arguments:
  text

Options:
  --reverse
  -h, --help   Show this help

14、Pocoo小组

pocoo出的库,必属精品。 http://www.pocoo.org/

它的库很出名: flask, jinja2, pygments,sphinx

15、后言和链接

<think>好的,用户之前问过如何用Burp绕过一些安全限制,现在他继续问有没有更“让耳目一新”的方法。我需要先回顾之前的回答,确保不重复,同时提供新的技巧。 首先,之前的回答涵盖了编码混淆、特殊字符、路径回溯、白名单绕过和Intruder模块的使用。用户现在需要的是更高级或更少被提及的方法。可能需要考虑协议转换、HTTP请求走私、主机头注入、基于时间的绕过,或者利用服务端解析差异。 然后,要思考用户可能的场景。用户可能在进行渗透测试,已经尝试了基础方法,现在需要更深层次的技巧。他可能遇到更严格的安全措施,或者目标系统已经修补了常见漏洞,所以需要更创新的方法。 接下来,需要确保建议的方法合法,并强调授权的重要性。同时,要解释每种方法的原理和适用场景,让用户理解为什么这些方法有效,而不仅仅是步骤。 还要考虑是否有遗漏的现代漏洞,例如HTTP/2的利用,或者特定框架的解析问题。另外,用户可能对自动化工具或扩展插件感兴趣,可以推荐一些资源或工具,比如Logger++或者Param Miner,帮助用户更高效地测试。 最后,确保语言简洁明了,结构清晰,分点列出,方便用户理解和应用。同时,提醒用户防御措施,帮助开发者加固系统,体现全面性。</think>在绕过安全限制时,除了传统的编码或路径遍历,一些 **非传统思路** 或 **利用服务端特性** 的方法往往更具突破性。以下是结合最新研究和实战经验的进阶技巧(**仅限合法授权场景**): --- ### **一、协议降级与混淆** 1. **HTTP/HTTPS 协议切换** 尝试将目标 URL 协议从 `https://` 改为 `http://`,或利用混合协议构造 URL: ```http GET /redirect?url=http://attacker.com?q=https://real.com HTTP/1.1 ``` - 某些白名单校验可能仅检查协议前缀,但服务端最终可能仍默认补全为 `http://`。 2. **利用非标准协议** 尝试 `ftp://`、`file://`、`javascript:` 等协议(需目标允许): ```http GET /redirect?url=javascript:alert(1) HTTP/1.1 ``` --- ### **二、服务端解析差异** 1. **参数污染(HPP)** 通过重复参数干扰解析逻辑: ```http GET /redirect?url=allowed.com&url=attacker.com HTTP/1.1 ``` - 某些框架可能取第一个或最后一个参数值,导致校验失效。 2. **HTTP 请求走私** 构造畸形的 `Content-Length` 或 `Transfer-Encoding` 头,诱导服务端将两个请求解析为一个: ```http POST /redirect HTTP/1.1 Content-Length: 13 Transfer-Encoding: chunked 0 GET /attacker.com HTTP/1.1 ``` - 需结合后端服务器链的解析差异(如前端 Nginx + 后端 Tomcat)。 --- ### **三、基于 DNS 的绕过** 1. **子域名接管** 若目标白名单包含 `*.example.com`,可尝试注册未使用的子域名(如 `test.example.com`),构造跳转至可控域名: ```http GET /redirect?url=https://test.example.com.attacker.com HTTP/1.1 ``` - 利用 DNS 解析特性(如 `a.b.c.com` 可能解析到 `c.com`)。 2. **CNAME 重绑定** 通过动态 DNS 或云服务(如 AWS Route 53)修改域名解析记录,使同一域名在不同时间指向不同 IP: ```http GET /redirect?url=http://dynamic-dns.attacker.com HTTP/1.1 ``` - 绕过首次校验时的白名单检查(需服务端未持续验证目标 IP)。 --- ### **四、逻辑漏洞组合** 1. **OAuth/SSO 跳转滥用** 利用 OAuth 回调 URL 的宽松校验,构造恶意回调地址: ```http GET /oauth/authorize?redirect_uri=https://attacker.com HTTP/1.1 ``` - 部分实现可能允许 `redirect_uri` 包含白名单域名的子路径(如 `allowed.com/../attacker.com`)。 2. **开放重定向 + XSS** 若存在反射型 XSS,可构造跳转 URL 触发双重漏洞: ```http GET /redirect?url=data:text/html,<script>alert(document.cookie)</script> HTTP/1.1 ``` --- ### **五、冷门 Header 注入** 1. **X-Forwarded-Host 覆盖** 修改请求头中的 `X-Forwarded-Host`,诱导服务端生成错误跳转: ```http GET /api/getUrl HTTP/1.1 X-Forwarded-Host: attacker.com ``` - 适用于服务端依赖该头动态生成链接的场景。 2. **Host 头污染** 篡改 `Host` 头使白名单校验失效: ```http GET /redirect?url=http://attacker.com HTTP/1.1 Host: allowed.com ``` - 某些框架可能直接信任 `Host` 头值进行校验。 --- ### **六、自动化辅助工具** 1. **Burp 插件扩展** - **Logger++**:记录历史请求,分析异常响应。 - **Param Miner**:自动探测隐藏参数或 Header 注入点。 - **Turbo Intruder**:高速爆破复杂 Payload。 2. **基于机器学习的模糊测试** 使用 `ffuf` 或 `wfuzz` 生成上下文相关的 Payload: ```bash ffuf -w payloads.txt -u "https://target.com/redirect?url=FUZZ" -fr "Invalid URL" ``` --- ### **七、防御视角的思考** 1. **深度防御策略** - 校验前强制规范化 URL(如解析为绝对路径)。 - 使用同源策略(Same Origin Policy)或 CSP 限制跳转行为。 2. **动态令牌签名** 对跳转 URL 附加 HMAC 签名,防止篡改: ```http /redirect?url=https://allowed.com&sig=1a2b3c4d5e... ``` --- ### **总结** 绕过方法的核心是 **寻找校验逻辑与解析逻辑的不一致性**。实际测试中需结合目标业务场景,例如: - 针对云服务:尝试利用 Metadata API 或临时凭证漏洞。 - 针对微服务架构:探测内部 API 网关的路径转发规则。 **注:所有测试必须获得明确授权,避免法律风险。**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值