我被困在这个任务中,因为我正在解决一个关于渗透测试的问题,我们得到了一个简单的TCP web服务器,我们要连接到它并给出两个值,如果它们最终匹配,我们会得到标志,我们也会得到一段服务器代码。我已经尽我所能去拿旗子。代码如下:
clientsock.send("Welcome to Maths_Server 1.0\n")
try:
clientsock.send("Enter the first number, so I can EVALuate it:\n")
firstNum = eval(clientsock.recv(1024))
firstNum = firstNum + firstNum + ord(flag[4]) + ord(flag[8]) + ord(flag[5])
clientsock.send("Enter the second number, so I can EVALuate it:\n")
secondNum = eval(clientsock.recv(1024))
if secondNum == firstNum:
clientsock.send("The flag is: " + flag + "\n")
firstNum = 0
secondNum = 0
except:
pass
clientsock.close()
注意,使用
eval
将数字从字符串转换为“number”。这意味着您不需要传入一个数字,只需要传入一个值为1的值。由于eval
使用局部变量,因此可以为firstNum
输入字符串-0.5 * (ord(flag[4]) + ord(flag[8]) + ord(flag[5]))
,这将使下一行firstNum
设置为零。然后您可以为secondNum
传递文本0
,并得到flags
。在您可能需要将字符串填充到1024个字符。我会做一些类似
output.center(1024, ' ')
的事情。在{cd1>发送第二条消息。那么无论最初使用什么作为firstNum的值,您都将成功:
这很容易用telnet实现
^{pr2}$另一种可能是您只需发送字符串
clientsock.send(flag)
作为第一个数字,它将立即将flag的值返回给您。请注意,这不适用于测试服务器,因此我猜测源代码略有不同,它不会简单地执行远程用户提供的任何类型的代码,而是仅当它与您所获得的任务的期望值相匹配时才执行。但是它可以和我的测试安装一起使用。在希望你能得出这样的结论:永远不要只评估未经认可的用户输入。在
相关问题 更多 >
编程相关推荐