🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

545閲覧

mysql プロセス

u-sukesan

総合スコア160

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2020/11/29 02:27

phpとmysqlによるwebサイトで動作が重いため
phpMyAdminでデータベースのプロセスを確認したところ

select serial,news_rid,pict_day,pict_no,TIMEDIFF(now(),add_date)as regist_time from news_feed where no =1234 and sex=2 and lev=1 order by serial desc limit 3

というクエリはphpで発行していますが、プロセスを見ると

select serial,news_rid,pict_day,pict_no,TIMEDIFF(now(),add_date)as regist_time from news_feed where no =1234 AND 2608=IF((ORD(MID((SELECT IFNULL(CAST(column_name AS CHAR),0x20) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x6e79756b696e5f32303230 AND table_schema=0x79617269737567695f6e61676f7961 LIMIT 7,1),1,1))>64),SLEEP(3),2608) and sex=2 and lev=1 order by serial desc limit 3

という中間に何やら追記されたクエリがあり、これが処理去れず、この後のクエリがwtaitingになっているため止まっていました。
サイト内にはこの記述はありませんでした。
サーバー会社に確認したところ、確かに自サイトからのリクエストだと言うことらしいです。
外部からの攻撃も確認できないという回答でした。

プロセスを削除するとその後の処理は流れるのですが、数分に一度このクエリが出てきます。
バックドアなどの類でしょうか

ちなみにリクストのwhere句 noは毎回1234というような同じ数字です
考えられる原因はなんでしょう

mysql 5.5
PHP 7.x
データベースのアクセス権限はIPアドレス固定
サーバー KAGOYA

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そういうのをSQLインジェクションって言います。急いで対策しましょう。
セキュリティの基礎中の基礎なのでグーグル先生に聞けば簡単に対策を調べられます。

投稿2020/11/29 02:54

hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

u-sukesan

2020/11/29 03:44 編集

ありがとうございます。 値をバインドせず直接値を入れている箇所を発見しました。 そして、特定の数字の時に特定の数字の箇所に不正なSQLが入れられていたようです。 no =1234 の箇所はPHPでは no =$_GET[no]となっており この$_GET[no]が1234のときに AND 2608=IF((ORD(MID((SELECT IFNULL(CAST(column_name AS CHAR),0x20) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name=0x6e79756b696e5f32303230 AND table_schema=0x79617269737567695f6e61676f7961 LIMIT 7,1),1,1))>64),SLEEP(3),2608) このSQLが入れられていたようです。 他にもないか確認して対策します。 ありがとうございました。
hentaiman

2020/11/29 03:49

SQLレベルで見るよりもプログラム上でプレースホルダー使ってないところ全部直した方が良いですよ
Orlofsky

2020/11/29 05:30

SQLインジェクション対策をしていなかったことについて開発会社の責任が問われた判例があります。SQLインジェクションの対処方法を知らなかったでは済まされません。 https://itlaw.hatenablog.com/entry/2019/08/30/221450
u-sukesan

2020/11/29 08:24

Orlofsky 様 ご指摘ありがとうございます。 フレームワークを仕様していないフルスクラッチのプログラムを作った会社が飛び連絡が付かなくなったということで、その管理を引き継いだ結果、非常に脆弱な構造のようですので一通り見直さないといけないようですね。
u-sukesan

2020/11/29 08:25

hentaiman 様 ありがとうございます。 確かに一通り見直した方が良さそうですね
hihijiji

2020/12/01 02:53

管理とSQLインジェクション対策は本来別物です。 契約内容によりますが、調査費用も修正費用も請求できる可能性があります。 「管理中に重大なセキュリティーホールを見つけた」 「しかもそのセキュリティホールは現在攻撃を受ける形跡がある」 とりあえずこの2点を報告し、調査と修正は別途依頼してもらうのがよろしいかと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問