URL重定向漏洞,python打造URL重定向漏洞检测脚本

前言:

今天学习了重定向漏洞,这个漏洞比较好理解

漏洞名:URL重定向漏洞

威胁:低

漏洞的来源:开发者对head头做好对应的过滤和限制

例子:

有漏洞的网站:http://a.com/x.php?url=http://a.com/login.php

这时我们通过写个url后面的链接让其跳转到指定的页面。例:http;//a.com/x.php?url=http://www.baidu.com

可搭配使用的漏洞:

CSRF  当一个网站存在CSRF漏洞的时候,而你知道了创建后台管理员的链接。修改链接,运用URL重定向漏洞。在进行短链生成

储存型XSS 当一个网站存在储存型XSS漏洞的时候,你插入了一个盗取cookie的js。配合URL重定向漏洞,让受害者直接跳转到该页面

正文:

这里我们使用BWAPP这个漏洞网站来进行URL重定向测试。

http://192.168.3.41/bWAPP/unvalidated_redir_fwd_1.php

未过滤的重定向与转发

点击Beam按钮跳转到

打开Burpsuite抓包一看

发现参数是这样的url=xxxx&form=submit

发送到repeater

修改url=http://www.baidu.com

产生302跳转。跳转页面为http://www.baidu.com

回到刚刚的位置放包一看,跳转

中级尝试

一样抓包

直接进行改链,发现跳回到登录页面。仔细对比发现,中级防御通过cookie的设置来判断

将其改为0在改其url后面的参数,直接跳转

高级尝试

高级和中级防御没区别。只是将cookie后面的值改为2。直接改0,将其链接设置跳转成博客园的链接

博客园这里要经过两次跳转

验证URl重定向的漏洞脚的本代码:

import requests,time
def poc():
    user=input(‘Please enter the web site to be tested:‘)
    user2=input(‘Please enter the parameters you want to bring in:‘)
    values=user2.strip().split(‘?‘)[-1]
    params={}
    for line in values.split(‘&‘):
        key,value=line.split(‘=‘,1)
        params[key]=value
    print(‘URL:‘,user)
    print(‘The parameters you have taken are:‘,params)
    time.sleep(0.2)
    print(‘If you want to change the parameters, please enter y‘)
    print(‘Do not need to change to enter n‘)
    user3=input(‘Do you want to change your parameters[y/n]:‘)
    if user3 == ‘y‘:
        while True:
          print(‘Please enter the name of the parameter you want to change{name: value}‘)
          print(params)
          user4=input(‘Please fill in the name:‘)
          user5=input(‘Please enter the value you want to change:‘)
          params[‘{}‘.format(user4)]=‘{}‘.format(user5)
          print(‘The change is done, and your current parameter is‘,params)
          user6=input(‘Do you want to continue to love the parameters more[y/n]?:‘)
          if user6 == ‘y‘:
              continue
          elif user6 == ‘n‘:
              break
          elif user6 == ‘‘:
              break

    url=user.strip()
    headers={‘User-Agent‘: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36‘}
    rest=requests.get(url=url,headers=headers,timeout=6,params=params, allow_redirects=False)
    print(‘Http_code:‘,rest.status_code)
    print(rest.headers)
    try:
        print(rest.headers[‘Location‘])
        if rest.headers[‘Location‘] == ‘http://www.baidu.com‘:
            print(‘[*]There is a URL redirection vulnerability in this link‘)
        else:
            print(‘[+]There is no URL redirection vulnerability in this link‘)
    except:
        print(‘[-]not Location head‘)
poc()

运行结果如下:

总结:


虽然漏洞威胁不高但还是要防御。防御方法有以下几种:

可利用state参数进行防跨站攻击,验证302跳转回来带code参数的这个请求是否是攻击者伪造的,防止攻击者伪造请求。

对于外链攻击,可在支持HTML5浏览器的环境下给所有外部链接加上rel=noreferrer属性;对于老版本IE的处理方案是利用一个HTTPS进行跳转达到抹去referer的效果

PHP获取retferer判断来路防止非法访问:http://www.90tec.com/iwork/20.html

第二种我不喜欢,其他都还好

原文地址:https://www.cnblogs.com/haq5201314/p/8975380.html

时间: 2024-10-09 19:40:15

URL重定向漏洞,python打造URL重定向漏洞检测脚本的相关文章

Java 获取网络重定向文件的真实URL

其实Java 使用HttpURLConnection下载的的时候,会自动下载重定向后的文件,但是我们无法获知目标文件的真实文件名,文件类型,用下面的方法可以得到真实的URL,下面是一个YOUKU视频的例子. import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; public class Test2 { public static void main(String[] args) th

使用国内镜像通过pip安装python的一些包 Cannot fetch index base URL http://pypi.python.org/simple/

原文地址:http://www.xuebuyuan.com/1157602.html 学习flask,安装virtualenv环境,这些带都ok,但是一安装包总是出错无法安装, 比如这样超时的问题: (env)[email protected]:~/flask_study/venv-test/test$ easy_install Flask-SQLAlchemy Searching for Flask-SQLAlchemy Reading http://pypi.python.org/simpl

转载大神的检测网站重定向的python脚本

#!/usr/bin/env python #coding=utf8 import sys import requests def check_for_redirects(url): try: r =requests.get(url,allow_redirects=False,timeout=0.5) if 300 <= r.status_code < 400: return r.headers['location'] else: return '[no redirect]' except r

[转] 三种Python下载url并保存文件的代码

原文 三种Python下载url并保存文件的代码 利用程序自己编写下载文件挺有意思的. Python中最流行的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件.此外Python还提供了另外一种方法requests. 来看看三种方法是如何来下载zip文件的: import urllib import urllib2 import requests url = 'http://www.blog.pythonlibrary.org/wp-c

[Python]从url中解析域名的几种方法

Python从url中解析域名的几种方法 从url中找到域名,首先想到的是用正则,然后寻找相应的类库.用正则解析有很多不完备的地方,url中有域名,域名后缀一直在不断增加等.通过google查到几种方法,一种是用Python中自带的模块和正则相结合来解析域名,另一种是使第三方用写好的解析模块直接解析出域名. 要解析的url urls = ["http://meiwen.me/src/index.html", "http://1000chi.com/game/index.htm

用python查看URL编码的中文

什么是URL编码呢,请看https://zh.wikipedia.org/wiki/Urlencode. 有时,我们向一些网站提交中文参数时,中文是会被编码成这种格式的 "%B1%E0%C2%EB ",它的原文是"编 码",URL编码也被称为"百分号编码",是不是有很多百分号.我们常使用的"空格"的URL编码就是 "%20",但是新的 标准把"空格" 替换为 "+",

python 代码审计-命令执行漏洞(自己编写的代码)

python 代码审计-命令执行漏洞(自己编写的代码) 0x00 源代码 def execute(request): context ={} ip= request.POST.get("ip") username= request.POST.get("username") password= request.POST.get("password") idnex= int(request.POST.get("index")) c

Python中input()函数漏洞及与raw_input()函数区别

Python中input()函数漏洞 一.函数简介: input()函数是python中的内置函数,函数作用是从stdin中读取数据 喜欢python2的朋友都知道python中有两个常见的输入函数:input()函数和raw_input()函数,但是我们在写脚本使用输入函数的时候,往往会使用raw_input()函数.这是为什么?因为input()函数在python2中拥有非常大的安全隐患.所以当我们自学python的时候,课本上,老师说的都是推荐raw_input()函数.Input()函数

pip安装python包出现Cannot fetch index base URL http://pypi.python.org/simple/

pipinstall***安装python包,出现 Cannot fetch index base URL  http://pypi.python.org/simple /错误提示或者直接安装不成功. 解决办法1.windows下创建/%user%/pip/pop.ini,并添加以下内容.        [global]          index-url=http://pypi.douban.com/simple/ 2.linux创建文件~/.pip/pip.conf,并添加一下内容.