关卡地址

解决方案:

思路:

这一关给了一部电话,并且提示: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

代码:

Challenge013.py

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)
PS src\static> python .\Code\Python\Challenge013.py

Challenge013.ps1

# 选择安装模块或者使用源码


# 安装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"
PS src\static> .\Code\PowerShell\Challenge013.ps1

Challenge013.go

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)
}
PS src\static> .\Code\Go\Challenge.exe -l 013

最终结果: italy

[下一关地址][5]