013. call him

关卡地址#

解决方案:#

思路:#

这一关给了一部电话,并且提示:phone that evil。电话按键只有“5”这个按键是可用的,点击后会得到如下提示:

faultCode
105


faultString
XML error: Invalid document end at line 1, column 1

在网上搜索可以得到xmlrpc相关的解决方案,结合标题与图片下提示,可以猜测出我们需要通过xmlrpc调用给evil打电话。

xmlrpc服务器地址是:http://www.pythonchallenge.com/pc/phonebook.php

通过ServerProxy可以枚举出服务器提供的方法:

[‘phone’, ‘system.listMethods’, ‘system.methodHelp’, ‘system.methodSignature’, ‘system.multicall’, ‘system.getCapabilities’]

其中phone方法即为所需。

接着获取到phone方法的签名及使用帮助:

[[‘string’, ‘string’]]

Returns the phone of a person

可以看出:

  • phone方法返回一个字符串类型的值,需要一个字符串类型的参数。

  • 返回值为一个人的电话号码。

  • 参数是evil的名字,在上一关已经得到了。

请求后得到的电话号码是:

555-ITALY

将其做为下一关地址访问会得到404 NOT FOUND提示,去掉555-后访问会提示:SMALL letters.

所以下一关地址是:italy

代码:#

import xmlrpc.client

serverUrl="http://www.pythonchallenge.com/pc/phonebook.php"
serverProxy=xmlrpc.client.ServerProxy(serverUrl)
# 枚举xmlrpc服务
# print(serverProxy.system.listMethods())
# print(serverProxy.system.methodSignature('phone'))
# print(serverProxy.system.methodHelp('phone'))

phoneNumber=serverProxy.phone('Bert')
print(phoneNumber)
# 选择安装模块或者使用源码

# 安装XmlRpc模块(已发布)
# Install-Module -Name PSXmlRpcClient

# 将XmlRpc源码作为git子模块克隆到Modules目录下
# 添加子模块
# git submodule add https://github.com/3gbywork/PSXmlRpcClient.git .\Code\PowerShell\Modules\PSXmlRpcClient
# git submodule init
# 更新子模块
# git submodule init
# git submodule update
# 删除子模块
# git rm .\Code\PowerShell\Modules\XmlRpc
# 加载XmlRpc模块
# Import-Module .\Code\PowerShell\Modules\PSXmlRpcClient\PSXmlRpcClient.psm1

$serverUrl="http://www.pythonchallenge.com/pc/phonebook.php"

# Invoke-XmlRpcRequest -ServerUri $serverUrl -MethodName "system.listMethods"
# Invoke-XmlRpcRequest -ServerUri $serverUrl -MethodName "system.methodSignature" -Params "phone"
# Invoke-XmlRpcRequest -ServerUri $serverUrl -MethodName "system.methodHelp" -Params "phone"

Invoke-XmlRpcRequest -ServerUri $serverUrl -MethodName "phone" -Params "Bert"
package main

import(
	"fmt"
	"github.com/kolo/xmlrpc"
)

func (c *Challenge) Challenge013() {
	client, err := xmlrpc.NewClient("http://www.pythonchallenge.com/pc/phonebook.php", nil)
	if err != nil {
		fmt.Println("Can't create client: ", err)
	}
	defer client.Close()

	// var methods []string
	// client.Call("system.listMethods", nil, &methods)
	// fmt.Println(methods)

	// var signature [][]string
	// client.Call("system.methodSignature", "phone", &signature)
	// fmt.Println(signature)

	// var help string
	// client.Call("system.methodHelp", "phone", &help)
	// fmt.Println(help)

	var result string
	client.Call("phone", "Bert", &result)
	fmt.Println(result)
}

最终结果: italy#

下一关地址#

017. eat?

关卡地址#

解决方案:#

思路:#

这一关图片中是曲奇饼干,左下角图片是不是有点熟悉?是第四关啦!

查看源代码并没有什么提示。

但是!根据cookie可以联想到什么?对!就是浏览器缓存。

通过浏览器开发者工具查看cookie后,可以得到如下提示:

you+should+have+followed+busynothing…

在第四关,我们请求的是:http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=

这里需要将nothing替换为busynothing,并且收集cookieinfo的值。

之后得到BZh91AY开头的经过url编码的字符串,是不是又有点熟悉?不熟悉的请回顾第八关

使用python在解码时会有小问题:

OSError: Invalid data stream

在解码前将+替换为%20可以解决该问题。

解码后得到提示:

is it the 26th already? call his father and inform him that “the flowers are on their way”. he’ll understand.

这句话信息量有点大,26号暗示第十五关call his father则暗示第十三关,Mozart的父亲是Leopold(注意L大写)。

给Leopold打电话之后得到:

555-VIOLIN

访问violin.html得到如下提示:

no! i mean yes! but ../stuff/violin.php.

替换url之后访问,得到的是一张Leopold的照片,及:

it’s me. what do you want?

额。。。对,and inform him that “the flowers are on their way”

❤️ 如果这篇文章对你有帮助,欢迎赞助支持我继续维护 ❤️

☕ Support me ⚡ 爱发电赞助