python urllib.parse_python urllib.parse.urlunsplit() [idna编码utf-8解码等因素]函数会把奇奇怪怪的(ⓒ ℂ ℭ)变成正常的C,其他的应该也...

01ddc0d4b35a

image.png

打开题目可以看到源码

01ddc0d4b35a

image.png

这里利用了python urllib.parse urlunsplit() 函数会把奇奇怪怪的(ⓒ ℂ ℭ)变成正常的C

01ddc0d4b35a

image.png

至于怎么找到这些奇奇怪怪的C,

from flask import Flask, Blueprint, request, Response, escape ,render_template

from urllib.parse import urlsplit, urlunsplit, unquote

from urllib import parse

import urllib.request

def fuzzing():

for i in range(65536):

uni = chr(i)

url = "http://suctf.c{}".format(uni)

try:

if getUrl(url):

print("str:"+uni+" unicode: \\u"+str(hex(i))[2:])

exit()

except:

pass

pass

def getUrl(url):

host = parse.urlparse(url).hostname

print(host)

if host == 'suctf.cc':

return False

parts = list(urlsplit(url))

host = parts[1]

print(host)

if host == 'suctf.cc':

return False

newhost = []

for h in host.split('.'):

newhost.append(h.encode('idna').decode('utf-8'))

parts[1] = '.'.join(newhost)

#去掉 url 中的空格

finalUrl = urlunsplit(parts).split(' ')[0]

print(finalUrl)

host = parse.urlparse(finalUrl).hostname

print(host)

if host == 'suctf.cc':

return True

else:

return False

fuzzing()

然后使用file://协议来读取etc/passwd看看

01ddc0d4b35a

image.png

01ddc0d4b35a

可以读取

然而读取根目录下flag或flag.txt是不行的,没有这个

但题目说了nginx,那么查一下nginx配置文件,

01ddc0d4b35a

image.png

01ddc0d4b35a

image.png

01ddc0d4b35a

image.png

就找到flag了

比如说F

01ddc0d4b35a

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值