[英]Python exploit using subprocess
我有一個小程序(程序A),要求輸入密碼,如果密碼正確,它將打開一個外殼。 我想在python中制作另一個程序(程序B),該程序調用程序A並提供密碼作為輸入,以便打開外殼。
我正在執行以下操作,但是該程序只是終止了,沒有讓我使用外殼。
p = subprocess.Popen("./ProgramA", stdin=subprocess.PIPE)
p.communicate("password")
運行程序B時,我的終端如下所示:
~/Desktop/$./ProgramB
Password: Here is your shell.
~/Desktop/$ (this is not the shell opened by program A)
我怎樣才能解決這個問題?
由ProgramA
啟動的shell從其父進程中繼承了stdin,因此它繼承了管道。 此時管道已經關閉,因此外殼退出。
您可能希望將終端保留為stdin,但是很難偽造密碼輸入。
Popen.communicate()
關閉子Popen.communicate()
stdin
並等待直到它終止-這是預期的行為。 您只需要p.stdin.write("password")
。
假設這是linux或osx,如果stdin是管道而不是終端,則程序通常會以不同的方式運行,並且它們也“繞過” stdin並讀取終端以獲取密碼。 在您的情況下,程序可能沒有看到終端並退出。 嘗試使用python pexpect模塊或閱讀其源代碼,以了解如何為stdin打開pty。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.