PHP コード監査学習 dvwa_sql、PHP 監査 dvwa_sql_PHP チュートリアル

WBOY
リリース: 2016-07-12 09:06:56
オリジナル
1003 人が閲覧しました

phpコード監査学習dvwa_sql、php監査dvwa_sql

0x00

OneNote に切り替えて以来、長い間新しいエッセイを公開していませんでしたが、それでも考えることが非常に必要です。ここ数日で PHP コード監査を学び始めたので、投稿を始めましょう。まずはエッセイ!

まず、トップ 10 のテスト プラットフォーム dvwa を通して学習を始めましょう。まず、参考のために有名人のリンクをここに持ってきてください。

1.http://drops.wooyun.org/papers/483

2. http://www.lxway.com/86980986.htm is_numeric 関数のバイパス

3.http://www.cnblogs.com/Safe3/archive/2008/08/22/1274095.html 文字エンコーディングのバイパス ワイドバイトインジェクション

0x01

ここではまず、最も単純な低レベルの PHP コードを紹介します

リーリー

これを見ると、このコードは実際には

id を処理せず、その結果、sqlインジェクションの脆弱性が生じていることがわかります。OK、あらゆる種類のインジェクションが可能です。だから、ここでは詳しく説明しません。

0x02

中級レベル、コード: リーリー Mysql_real_escape_string 関数は id パラメータをエスケープします。一般的なエスケープには

があります。

' =>
    " => "
  • =>
  • => \n
  • このプロセスをバイパスするには 2 つの方法があるはずだと思います:
  • 1.数値注射

この関数は主に文字系の特殊文字の処理を目的としているので、特殊文字を使わずに注入、つまり数値注入が可能です

リーリー

これにより、users テーブルのアカウントのパスワードを取得できます。もちろん、具体的なテーブル名が分からず、列名を変更した場合はどうなるかという疑問が生じます。 OK、ユニオンブールインジェクションを使ってみましょう

リーリー

char() の値を変換して制限する必要がありますが、これにはさらに時間がかかる可能性があります (追記: まずピットを利用してください)。実際には、遅延注入を使用して同じ効果を達成できます。

2.ワイドバイトインジェクション

mysql_real_escape_string

パラメータをエスケープする方法は、「

」を追加することです。その

urlエンコーディングは%5cなので、%df%5c%27をパラメータに追加します。ここで、%df %5c は合法的なgbkキャラクターです

そして、この関数で処理すると、 %df%5c%5c%27 、 このように%df%5c となることがわかります。 %5c を飲み込むと、 a gbkキャラクター+ \' になります そして、 mysql のエスケープ文字も '' であり、これは単一引用符の挿入と同等です

リーリー
同じ
addslashes
関数にも同じ問題があります。詳細は記事冒頭のリンクを参照してください

0x02

  high级别的php代码

<span>$id</span>=<span>$_GET</span>['id'<span>];
</span><span>$id</span>=<span>stripslashes</span>(<span>$id</span><span>);//剔除参数中的斜杠
</span><span>$id</span>=<span>mysql_real_escape_string</span>(<span>$id</span><span>);//对id中的特殊字符进行转义
</span><span>if</span>(<span>is_numeric</span>(<span>$id</span><span>)){//判断是否是数值或数值字符串
    </span>...
ログイン後にコピー

  好吧,这样一来,我觉得还是变得很安全了,前面2个函数对字符型的注入进行了处理,紧接着is_numeric函数则对数值型注入进行了处理。

  然而这样子仍然可以造成sql注入,不过是二次注入,且限制的条件也比较苛刻但是仍有机会造成注入

  比如执行sql语句

  

<span>  insert</span> <span>into</span> test(type) <span>values</span>($s);   
ログイン後にコピー

 

  此时传入的字符串$s=0x31206f722031  

  这样看可以知道这是一个16进制数,可以通过该函数的检测,然后对16进制解码我们可以发现$s其实实际的值为 1 or 1 

  那么这样操作数据库里会变成什么样子

  

  可以看到数据库将这串16进制数进行了转码变成了1 or 1  那么到时候进行数据库取值然后不经处理带入到另一个sql语句中就会造成二次注入.所以我们在写代码的时候不能盲目的信任数据库里的数据,在取出数据时仍需要进行检测。

0x03

  sql部分的代码就分析到这里,如有不正确的地方,欢迎拍砖!

  下篇准备sql blind :)

 

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1063513.html技術記事 PHP コード監査の学習 dvwa_sql、PHP 監査 dvwa_sql 0x00 onenote に切り替えて以来、長い間新しいエッセイを公開していませんでしたが、それでも考えることが非常に必要な今日この頃です...
関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!