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#

下一关地址#

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

☕ Support me ⚡ 爱发电赞助