demandosigno

なんとか生きていけるように

自分のやりたいことをまとめます

こんにちは。  

私が三日坊主で物事が続かないのは「記録を取っていないから」ということが一つの原因だと思います。ですので今日から色々と書き留めていこうと思います。

「最も無意味なのは「決意を新たにする」ことだ」と誰かの言葉ですが。

  • プログラミングを勉強する
  • 英語が不自由なく使えるようになりたい
  • FX(外国為替証拠金取引)でお金を儲けたい
  • その他不労所得を得たい

  • 2022/01/13 スラスラわかるPHP p.1~53まで完了。2h30m
  • 2022/01/15 MBSD 1h00m
  • 2022/01/19 PHP4章 0.5h

rootパスワードを忘れた。パスワード再設定方法。CentOS 6.6

ずいぶん昔にインストールしたCentOSのルートパスワードを忘れてしまった。再設定方法を記す。

起動画面で何かキーを押してメニュー画面に入る。 centos

メニュー画面で e を押してカーネルの選択画面に移る。
centos

カーネルの選択画面で e を押して編集モードに入る。
centos

最後部に single (または 1)と入力して Enterで保存して前の画面に戻る → bでboot。
centos

しかし『Give root password for maintenance』と出て先へ進めなかった。
centos

次は、single rw init=/bin/sh で試す。
centos

singleユーザーモードで入れた。 centos

ルートパスワードの変更。

sh-4.1# passwd root

centos

sh-4.1# exec /sbin/init

で再起動。

ゲストOS起動エラー。VMware Workstation 16 Player

久しぶりに起動したところ下記のエラーが出た。

サイド チャネルの緩和を有効にしてこの仮想マシンを実行しています。サイド チャネルの緩和によりセキュリティを強化しながら、パフォーマンスを低下させることもできます。
緩和を無効にするには、仮想マシンの設定の詳細パネルで、サイド チャネルの緩和の設定を変更します。詳細については、VMware ナレッジベースの記事 KB 79832 (https://kb.vmware.com/s/article/79832) を参照してください。

パワーオン中にエラーが発生しました: VMware Player は、このホスト上で仮想化されたパフォーマンス カウンタをサポートしていません。詳細については、https://kb.vmware.com/s/article/81623 にある VMware ナレッジベースの記事 KB 81623 を参照してください。

モジュール VPMC のパワーオンに失敗しました。

仮想マシンの起動に失敗しました。

  • 仮想マシン設定→ハードウェア→プロセッサ から「CPUパフォーマンスカウンタを仮想化」のチェックを外す。

VMWare-1

再起動。しかし別のエラー。

仮想 Intel VT-x/EPT はこのプラットフォームではサポートされていません。
仮想化された Intel VT-x/EPT を使用せずに続行しますか。
はい(Y) いいえ(N)

はい(Y) を選ぶ、が失敗

パワーオン中にエラーが発生しました: VMware Player はこのホスト上でネストされた仮想化をサポートしていません。
モジュール HV のパワーオンに失敗しました。
仮想マシンの起動に失敗しました。

VMWare-2

「Intel VT-x/EPT または AMD-V/RVI を仮想化」のチェックも外す。

再び『サイド チャネルの緩和を有効にしてこの仮想マシンを実行しています…』が出るが、OKで。

WebGaot 6-2 SQL Injection (intro)

No.9 Try It! String SQL injection

コード内のクエリは、前の例で見たように動的なクエリを構築します。このクエリは文字列を連結して作られているため、String SQL Injectionの影響を受けやすくなっています。

"SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '" + lastName + "'";

以下のフォームを使って、usersテーブルからすべてのユーザーを取得してみてください。完全なリストを取得するために、特定のユーザ名を知る必要はありません。

f:id:hirose-test:20210404201910j:plain

f:id:hirose-test:20210404201105j:plain

説明します。or '1' = '1'は常に真と評価されるため、この注入は機能します('1'の文字列終了リテラルは、クエリ自体で閉じられているため、注入してはいけません)。
つまり、注入されたクエリは基本的に次のようになります。SELECT * FROM user_data WHERE first_name = 'John' and last_name = '' or TRUE これは、その前に何があっても、常に true と評価されます。

No.10 Try It! Numeric SQL injection

コード内のクエリは、前述の例のように動的クエリを構築します。コード内のクエリは、数値を連結して動的クエリを構築するため、Numeric SQLインジェクションの影響を受けやすくなっています。

"SELECT * FROM user_data WHERE login_count = " + Login_Count + " AND userid = " + User_ID;

以下の2つの入力フィールドを使って、usersテーブルからすべてのデータを取得してみましょう。
警告。これらのフィールドのうち1つだけがSQLインジェクションの影響を受けます。すべてのデータをうまく取得するためには、どちらのフィールドかを調べる必要があります。

f:id:hirose-test:20210404202300j:plain

f:id:hirose-test:20210404202321j:plain

No.11 ストリングス SQL インジェクションによる機密性の侵害

システムがSQLインジェクションに対して脆弱な場合、システムのCIAトライアドの側面を簡単に侵害することができます(CIAトライアドについてよく知らない方は、一般カテゴリのCIAトライアドのレッスンをご覧ください)。次の3つのレッスンでは、SQLストリングインジェクションやクエリチェイニングなどのテクニックを使って、CIA三要素の各側面を侵害する方法を学びます。
このレッスンでは、「機密性」について学びます。機密性は、攻撃者がSQLインジェクションを使ってデータベースからクレジットカード番号などの機密データを読み取ることで、簡単に侵害されてしまいます。

What is String SQL injection?

アプリケーションの中で、文字列を連結してクエリを動的に構築すると、ストリングSQLインジェクションの影響を非常に受けやすくなります。
入力が文字列パラメータとしてクエリに挿入される文字列を取る場合、構築されたクエリを引用符を使って簡単に操作し、特定のニーズに合わせて文字列を形成することができます。例えば、文字列パラメータの最後を引用符で囲み、その後に独自のSQLを入力することができます。

It is your turn!

あなたは大企業に勤めるジョン・スミスという社員です。この会社には社内システムがあり、すべての社員が自分の所属する部署や給与などの社内データを見ることができます。
このシステムでは、従業員は自分のデータを見るために、固有の認証TANを使用する必要があります。
あなたの現在のTANは3SL99Aです。
あなたは常に最も稼いでいる従業員になりたいと思っているので、このシステムを利用して、自分の内部データを見る代わりに、同僚全員のデータを見て、彼らの現在の給与を確認したいと考えています。
以下のフォームを使用して、従業員テーブルからすべての従業員データを取得してみてください。必要な情報を得るために、特定の名前やTANを知る必要はありません。
あなたの要求を実行するクエリは次のようになることがすでにわかりました。

"SELECT * FROM employees WHERE last_name = '" + name + "' AND auth_tan = '" + auth_tan + "';

f:id:hirose-test:20210404203927j:plain

WebGaot 6-1 SQL Injection (intro)

No.2 What is SQL?

SQLとは、標準化された(1986年にANSI、1987年にISO)プログラミング言語で、リレーショナル・データベースを管理し、データベース内のデータに対してさまざまな操作を行うために使用されます。 データベースとは、データの集まりのことです。データは行、列、テーブルに整理され、関連する情報を見つけやすくするためにインデックスが付けられています。 従業員を含むSQLテーブルの例、テーブル名は「Employees」です。

f:id:hirose-test:20210327144507j:plain

問題. Bob Francoという従業員の所属部署を検索してみてください。この課題では、あなたには完全な管理者権限が与えられており、認証なしですべてのデータにアクセスできることに注意してください。

f:id:hirose-test:20210327145529j:plain

f:id:hirose-test:20210327145615j:plain

No.3 Data Manipulation Language (DML)

データ操作言語(DML) データ操作言語は、その名の通りデータの操作を扱うもので、SELECT、INSERT、UPDATE、DELETEなどの最も一般的なSQL文を含み、データベースのテーブルからレコードの結果セットを要求したり(select)、データベース内のデータを追加したり(insert)、削除したり、変更したり(update)する際に使用されます。

攻撃者がDMLタイプのSQLインジェクションを使用してデータベースを操作すると、情報セキュリティにおける3つの保護目標のうち、機密性(...)&完全性(更新)(データを読むことを許可された人だけが読める)に違反することになります。

DMLコマンドは、データの保存、取得、修正、削除に使用されます。
SELECT - データベースからデータを取り出す
INSERT - テーブルにデータを挿入する
UPDATE - テーブル内の既存のデータを更新する
DELETE - データベースのテーブルからすべてのレコードを削除する

例:データを取得する。

SELECT phone FROM employees WHERE userid = 96134;

このステートメントは、ユーザIDが96134の従業員の電話番号を配信します。 www.DeepL.com/Translator(無料版)で翻訳しました。

It is your turn!

Tobi Barnettの部署を「Sales」に変更してみてください。

f:id:hirose-test:20210401204209j:plain

f:id:hirose-test:20210401203939j:plain

No.4 Data Definition Language (DDL)

データ定義言語には、データ構造を定義するためのコマンドが含まれており、特にデータベース内にどのようにデータを配置すべきかを示すデータベーススキーマを定義することができます。
攻撃者がDDLタイプのSQLインジェクションを使用してデータベースを操作すると、情報セキュリティにおける3つの保護目標のうち、次の項目に違反することになります:整合性(変更)、可用性(削除)。(データを変更/削除することを許可された人だけがそれを行うことができます)。 DDLコマンドは、データベースオブジェクトの構造を作成、変更、削除するために使用されます。
CREATE - データベースとそのオブジェクト(テーブル、ビュー、...)を作成します。
ALTER - 既存のデータベースの構造を変更します。
DROP - データベースからオブジェクトを削除する

CREATE TABLE employees(
    userid varchar(6) not null primary key,
    first_name varchar(20),
    last_name varchar(20),
    department varchar(20),
    salary varchar(10),
    auth_tan varchar(6)
);
この記述により、最初の「Employees」表が作成されます。

ここで、テーブル "employees "にカラム "phone"(varchar(20))を追加して、スキームを変更してみましょう。

f:id:hirose-test:20210401205723j:plain

f:id:hirose-test:20210404010254j:plain

No.5 Data Control Language (DCL)

データ制御言語は、ユーザーがデータベースにアクセスしたり操作したりするための特権を作成するために使用されます。
攻撃者がDCLタイプのSQLインジェクションを使用してデータベースを操作した場合、情報セキュリティにおける3つの保護目標のうち、次の項目に違反することになります:機密性(付与)&可用性(取り消し)(不要な人が自分に管理者権限を付与したり、管理者から管理者権限を取り消したりする可能性があります)。

DCLコマンドは、データベースオブジェクトにセキュリティを提供するために使用されます。
GRANT - ユーザーにデータベースへのアクセス権限を与える。
REVOKE - GRANTコマンドで与えられたユーザーのアクセス権限を取り消す
www.DeepL.com/Translator(無料版)で翻訳しました。

GRANT CREATE TABLE
TO operator;

ユーザーグループ "UnauthorizedUser "にテーブルを変更する権利を与えてみてください。
f:id:hirose-test:20210401210728j:plain

f:id:hirose-test:20210401210800j:plain

No6 What is SQL injection?

SQLインジェクションとは何ですか?
SQLインジェクションは、最も一般的なウェブハッキング技術です。SQLインジェクション攻撃は、クライアントからアプリケーションに入力されるSQLクエリを介して、悪意のあるコードを挿入または「注入」するものです。正しく対処しないと、このようなコードのアプリケーションへの注入は、データの整合性やセキュリティなどに深刻な影響を与える可能性があります。
SQL インジェクションは、クライアントからのフィルタリングされていないデータ(検索フィールドの入力など)が、アプリケーション自体の SQL インタープリタに入ることで発生します。クライアントからの入力にSQLコマンドが含まれているかどうかがチェックされなければ、ハッカーは簡単に基礎となるSQL文を操作することができ、自分に有利になります。 例えば、--(行の残りの部分をコメントアウトする)や ;(SQLクエリを終了させ、その方法でSQLクエリを連鎖させることができる)のようなSQLメタキャラクタが入力されているかどうかをフィルタリングしない場合です。

Example of SQL injection

入力フィールドにユーザー名を入力することで、ユーザー情報を表示することができるWebアプリケーションを考えてみましょう。
入力された情報はサーバーに送信され、SQLクエリに挿入され、SQLインタープリタによって処理されます。
データベースからユーザー情報を取得するためのSQLクエリは次のようになります。
www.DeepL.com/Translator(無料版)で翻訳しました。

"SELECT * FROM users WHERE name = '" + userName + "'";

変数 userName は、クライアントからの入力を保持し、それをクエリに「注入」します。 入力がSmithの場合、クエリは次のようになります。

"SELECT * FROM users WHERE name = 'Smith'";

と入力すると、Smithという名前のユーザーのすべてのデータが取得されます。
しかし、攻撃者がSQLクエリの一部である可能性のある予期しない入力を提供した場合、クエリ自体が変更され、データベースに対して他の(悪意のある)アクションを実行するために使用される可能性があります。
ここに入力フィールドがあります。ここに何らかのSQLを入力してみると、クエリがどのように変化するかがよくわかります。

f:id:hirose-test:20210404005610j:plain

以下は、ハッカーが入力フィールドに供給して、一人のユーザーのデータを読み取るだけではない、データベースに対するアクションを実行する例です。

  • Smith’ OR '1' = '1
    results in SELECT * FROM users WHERE name = 'Smith' OR TRUE; and that way will return all entries from the users table

  • Smith’ OR 1 = 1; --
    results in SELECT * FROM users WHERE name = 'Smith' OR TRUE;--'; and that way will return all entries from the users table

  • Smith’; DROP TABLE users; TRUNCATE audit_log; --
    chains multiple SQL-Commands and deletes the USERS table as well as entries from the audit_log

No.7 SQLインジェクションの影響

SQLインジェクションが成功すると、以下のことが可能になります。
* データベースの機密データの読み取りと変更
* データベースの管理操作の実行
・監査またはDBMSのシャットダウン
・テーブルやログの切り捨て
・ユーザーの追加
* DBMSファイルシステム上に存在する特定のファイルの内容の回復
* オペレーティングシステムへのコマンド発行

SQLインジェクション攻撃では、攻撃者は以下のことができます。
  • IDの偽装
  • 既存のデータを改ざんする
  • 取引の無効化や残高の変更などの否認問題の発生
  • システム上のすべてのデータを完全に開示させる
  • データを破壊したり、利用できないようにする
  • データベースサーバの管理者になる

No.8 SQLインジェクションの深刻度

SQLインジェクション攻撃の深刻度は、以下によって制限されます。
  • 攻撃者のスキルと想像力
  • ディフェンス・イン・デプス対策
    ・入力検証
    ・最小限の特権
  • データベース技術
すべてのデータベースがコマンドチェインに対応しているわけではない
SQLインジェクションは、PHP、Classic ASP、Cold Fusionや古い言語でよく見られます。
  • パラメタライズドクエリをサポートしていない言語
  • 新しいバージョンではパラメータ化されたクエリが追加されている
  • Webテクノロジーアーリーアダプター(=オールドコード)
すべてのデータベースが同じではない(SQL Server)
  • コマンドシェル: master.dbo.xp_cmdshell 'cmd.exe dir c:'
  • レジストリコマンド: xp_regread, xp_regdeletekey, ...

www.DeepL.com/Translator(無料版)で翻訳しました。