pwnthebox 网页读取器

whitelist_hostname = ["example.com",
                     "www.example.com"]
whitelist_scheme = ["http://"]
def check_hostname(url):
    for i in whitelist_scheme:
        if url.startswith(i):   
            url = url[len(i):]  # strip scheme  //将输入的url截取去掉http://
            url = url[url.find("@") + 1:]  # strip userinfo    //截取去掉@之前的内容
            if not url.find("/") == -1:
                url = url[:url.find("/")]  # strip parts after authority     //截取到"/"以内的内容
            if not url.find(":") == -1:
                url = url[:url.find(":")]  # strip port          //截取到":"以内的内容
            if url not in whitelist_hostname:
                return (False, "hostname {} not in whitelist".format(url))    //所剩内容对比whitelist
            return (True, "ok")
    return (False, "scheme not in whitelist, only {} allowed".format(whitelist_scheme)

上面代码解释引用了IncludeK师傅的注解

 python太菜对于url[len(i):] 这种写法可以截取字符串半天没看懂

同时发现个有趣的事情

关于@影响到url解析

        如:http://127.0.0.1/flag@example.com 会解析到127.0.0.1/flag

  但神奇的是http://127.0.0.1@example.com会解析到example.com

可能原因不太清楚不过有个图大家可以参考

  

 同时对于#在url的截断作用我也不是太清楚:

        大佬的解释

        #后的字符

在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。

比如,下面URL的原意是指定一个颜色值:

  http://www.example.com/?color=#fff

但是,浏览器实际发出的请求是:

  GET /?color= HTTP/1.1

  Host: www.example.com

可以看到,"#fff"被省略了。只有将#转码为%23,浏览器才会将其作为实义字符处理。也就是说,上面的网址应该被写成:

  http://example.com/?color=%23fff

 所以这个题很明显了,代码中会读取@后面的作为监测白名单的url,在处理的时候,会把后面白名单的内容识别,但是url请求的时候#号后面的url会被忽略。

参考文章链接

PwnTheBox - Hacking Platform - CTF Platform - CTF平台 - 网络安全竞赛平台

URL的井号 - 阮一峰的网络日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值