将python代码注入TCP套接字

2024-09-29 23:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我被困在这个任务中,因为我正在解决一个关于渗透测试的问题,我们得到了一个简单的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()

Tags: the代码服务器sendnumbersoitcan
2条回答

注意,使用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的值,您都将成功:

    secondNum = eval(clientsock.recv(1024))
->  secondNum = eval("firstNum")
->  secondNum = ... value of firstNum

这很容易用telnet实现

^{pr2}$

另一种可能是您只需发送字符串clientsock.send(flag)作为第一个数字,它将立即将flag的值返回给您。请注意,这不适用于测试服务器,因此我猜测源代码略有不同,它不会简单地执行远程用户提供的任何类型的代码,而是仅当它与您所获得的任务的期望值相匹配时才执行。但是它可以和我的测试安装一起使用。在

希望你能得出这样的结论:永远不要只评估未经认可的用户输入。在

相关问题 更多 >

    热门问题