スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
新しい記事を書く事で広告が消せます。
勝手に何してんだ!!
卒研の発表にあわせ、PHPからSQLインジェクションなどの実験してみました。
$sql = "select * from sdb where id = '".$id."' and password = '".$pw."'";
$query = mysql_query($sql, $link);
実際の卒研のphpの問い合わせ部分はこんな感じ。
データベースサーバへのログインユーザにはすべての権限を与えているユーザでログインしてます。
変数の$idには打ち込まれたユーザID、$pwにはパスワードが格納されているたいです。
もちろんエスケープ処理などもすべてなくしました。
んじゃー「070666」というユーザがいるとして、ログインフォームのパスワードのところには「' or id = '070666' and 'A' = 'A」と打てば、パスワードを知らなくてもログインできるんじゃないか?って思ったんですが、できませんでした。
エラーが返ってきます。
ちょっとわからないので、とりあえず実際に送信しているSQLを見てみると
「select * from sdb where id = '' and password = '\' or id = \'070666\' and \'A\' = \'A'」
になってました。
なぜか勝手にエスケープ処理が‥
さらに調べてみると、前のページからPOSTメソッドで受け取った値にエスケープ処理が施されていました。
実験にならないので、PHPの方で\を除去するように書き直し、送信してみると‥
パスワードを打ち込まずに、ログイン成功!!
次に、複数のSQLを実行させてみようとしたら、エラーが返ってきました。
passwordの部分には「';delete from sdb where ''='」と打ち込んで、実際には
「select * from sdb where id = '' and password = '';delete from sdb where ''=''」が送信されてるみたいなんですがね‥
mysql_query直後でエラーになってる。
調べると、1つしかクエリを送信できないとなっているみたいです。
セキュリティー上、原則1つしか実行できないみたいで、これまた実験にならない。
他の関数でもそうみたいです。
なので、自分で適当に関数作って、複数でも実行できるようにしたら、あっさり実行できてしまいました。
てか、テーブル内の全部消えちまったじゃねーか!!!
だいぶ無理やりやってしまったけど、直にやれる方法はないんだろうか‥。
もう眠いので、cobolでもやって寝るか。
あのWindows777に新機能が追加されたようです!
手取り14万切ったwwwwwwwww
$sql = "select * from sdb where id = '".$id."' and password = '".$pw."'";
$query = mysql_query($sql, $link);
実際の卒研のphpの問い合わせ部分はこんな感じ。
データベースサーバへのログインユーザにはすべての権限を与えているユーザでログインしてます。
変数の$idには打ち込まれたユーザID、$pwにはパスワードが格納されているたいです。
もちろんエスケープ処理などもすべてなくしました。
んじゃー「070666」というユーザがいるとして、ログインフォームのパスワードのところには「' or id = '070666' and 'A' = 'A」と打てば、パスワードを知らなくてもログインできるんじゃないか?って思ったんですが、できませんでした。
エラーが返ってきます。
ちょっとわからないので、とりあえず実際に送信しているSQLを見てみると
「select * from sdb where id = '' and password = '\' or id = \'070666\' and \'A\' = \'A'」
になってました。
なぜか勝手にエスケープ処理が‥
さらに調べてみると、前のページからPOSTメソッドで受け取った値にエスケープ処理が施されていました。
実験にならないので、PHPの方で\を除去するように書き直し、送信してみると‥
パスワードを打ち込まずに、ログイン成功!!
次に、複数のSQLを実行させてみようとしたら、エラーが返ってきました。
passwordの部分には「';delete from sdb where ''='」と打ち込んで、実際には
「select * from sdb where id = '' and password = '';delete from sdb where ''=''」が送信されてるみたいなんですがね‥
mysql_query直後でエラーになってる。
調べると、1つしかクエリを送信できないとなっているみたいです。
セキュリティー上、原則1つしか実行できないみたいで、これまた実験にならない。
他の関数でもそうみたいです。
なので、自分で適当に関数作って、複数でも実行できるようにしたら、あっさり実行できてしまいました。
てか、テーブル内の全部消えちまったじゃねーか!!!
だいぶ無理やりやってしまったけど、直にやれる方法はないんだろうか‥。
もう眠いので、cobolでもやって寝るか。
あのWindows777に新機能が追加されたようです!
手取り14万切ったwwwwwwwww
スポンサーサイト
コメント
コメントの投稿