web-dev-qa-db-ja.com

脆弱なsqlmap HTTP 405エラーPOSTパラメータ

学術的な目的のために、POSTメソッドを使用して送信されるフォームパラメータにブラインドSQLインジェクションを展開する必要があります。フォームは非常にシンプルで、名前を入力するための入力テキストボックスがありますユーザーと送信ボタンの場合、生成される出力は、紹介されたユーザーの存在または不在を通知するだけです。htmlコードは次のとおりです。

<html>
<head>
      <title>User info</title>
</head>...

<p> Introduce an user to check if it's in the database </p>   
<form method="post">
      User <input type="text" value="" name="user">
      <input type="submit" value="Check!">
</form>
<hr>
</center>
</html>

'guest'は有効なユーザー名であることを知っています(trueを返します)guest 'and' 1 '=' 1(それが返されることにより、ブラインドSQLインジェクションに対して脆弱であることを手動で確認しましたtrue)、およびguest 'and' 1 '='、(falseを返します)。脆弱であることを確認したら、次のコマンドを使用してsqlmapを使用して脆弱性を爆発させようとしました:

# sqlmap -u  "http://foo.com/checkuserform" --method "POST" --data "user=guest" --dbms "mysql" -p "user"

しかし、それは脆弱性を爆発させることができないようです:

...
    **[00:23:01] [WARNING] the web server responded with an HTTP error code (405) which could interfere with the results of the tests**
    [00:23:01] [INFO] testing if the target URL is stable
    [00:23:02] [INFO] target URL is stable
    [00:23:02] [WARNING] heuristic (basic) test shows that POST parameter 'user' might not be injectable
    ...
    **[00:23:18] [WARNING] POST parameter 'user' is not injectable**
    [00:23:18] [CRITICAL] all tested parameters appear to be not injectable. Try to increase '--level'/'--risk' values to perform more tests. Also, you can try to rerun by providing either a valid value for option '--string' (or '--regexp') If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could retry with an option '--tamper' (e.g. '--tamper=space2comment')
    [00:23:18] [WARNING] HTTP error codes detected during run:
    405 (Method Not Allowed) - 175 times

SqlmapコマンドでPOSTの使用を強制しているため、この脆弱性を爆発させることができないことの1つは、HTTP 405エラーです(そして、私は再現できません)ブラウザで手動で確認すると、このエラーが発生します。レベルとリスクパラメータの値を増やしてみましたが、成功しませんでした。原因がわかりませんか?

5
Toni

SQLmapを使用する好ましい方法は、Burpを介してプロキシされるブラウザーを使用して要求を送信し、Burpからテキストファイルに要求をコピーし、テキストファイルを指す-rパラメーターを指定してsqlmapを呼び出すことです。

これにより、必要なヘッダーとCookieを使用して、送信が正しい場所に送信されます。

この場合、私はあなたが間違った場所にPOSTしているのではないかと思います-説明から、それはバックエンドサービスに対してJavaScript呼び出しを行ってから、アラートボックスを提供するか、ページのコンテンツを更新しているようです。プロキシを使用してこれを観察すると、ページ上のスクリプトが難読化されていたり、過度に複雑であったりして、妥当な調査が可能であっても、確認することができます。

3
Matthew