繁体   English   中英

将python代码注入TCP套接字服务器

[英]Injecting python code into TCP socket server

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

只需发送字符串firstNum作为第二条消息。 然后,无论最初用作firstNum的值是什么,您都将成功:

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

使用telnet可以轻松完成

$ telnet services.cyberprotection.agency 3166
Welcome to Maths_Server 1.0
Enter the first number, so I can EVALuate it:
10
Enter the second number, so I can EVALuate it:
firstNum
The flag is: .... (try yourself)...

另一种可能性是,您只发送字符串clientsock.send(flag)作为第一个数字,这将立即向您发送flag的值。 请注意,这不适用于测试服务器,因此我认为源代码略有不同,并且不会简单地执行远程用户给出的任何类型的代码,而只是执行与您获得的任务期望相符的代码。 但这适用于我对给定代码的测试安装。

希望您得出这样的结论:永远不要仅仅评估未经消毒的用户输入。

请注意,使用eval将数字从字符串转换为“数字”。 这意味着您不需要传递数字,只需传递一个数字即可。 由于eval使用局部变量,因此您可以为firstNum输入字符串-0.5 * (ord(flag[4]) + ord(flag[8]) + ord(flag[5]))firstNum为零。 然后,您可以将文字0传递给secondNum并获取flags

您可能需要将字符串填充为1024个字符。 我会做类似output.center(1024, ' ')事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM