脆弱性対策で確認すること

◎◆php.ini

 expose_php

 error_reporting

 display_errors エラーメッセージの表示抑止

 display_startup_errors

 default_charset 文字コードの指定

 date.timezone

 mbstring.language 

 PHP7.4 ぼくのかんがえたさいきょうのphp.ini - Qiita

 

 

◎◆httpd.conf、custom_httpd

 welcome.conf

 icons

 Options Indexes FollowSymLinks

 /etc/httpd/conf.d/notrace.conf:TraceEnable off

 x frame options

 ServerTokens ProductOnly

 攻撃を受ける前に見直すApacheの基本的なセキュリティ10のポイント - レムシステム エンジニアブログ

  x content type options nosniff

 大規模サービスのセキュリティ対策用HTTPヘッダーまとめ - Qiita

  Options -Indexes  ディレクトリリスティング無効化

 Apacheセキュリティ設定 - Qiita

 session.use_only_cookies = 1

 session.cookie_httponly = 1

 session.use_strict_mode = 1

 Header unset "X-Powered-By"

 LimitRequestBody 10485760
 LimitRequestFields 50

 core - Apache HTTP サーバ バージョン 2.4

 RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

 https://agohack.com/can-nott-upload-files-apache24-mod_reqtimeout/

 Apache, PHP, MySQL セキュリティ設定メモなど : 犬ターネット

 

 

◎◆.env 

 


◎◆OSコマンドをphp中で使用しない
 ◎ evalを使わない
 ◎ system、execは使わない headerは要注意
 ◎ refererを使ったリダイレクトはどこで使ったか?⇒ 2箇所。問題なし。
 ◎ requireとincludeの箇所にトラバーサル攻撃の可能性 basementを使用
 ◎ blade内のimg等に対して../../トラバーサル攻撃、パス指定してる箇所が危ない
 ◎ urlでディレクトリ名を指定 ⇒ 指定していない
 ◎ json decodeなどdecode系を外部入力値に対して使わない

 

 

◎◆sqlインジェクション
 ◎'; delete from users --
 ◎' or 1 /*
 ◎sqlをrawで検索
 △sqlの複文の実行を禁止
 △sqlを静的プレースホルダにする

 

 

◎◆ヌルバイト攻撃 %00
 http://hdg?p=1%00
 https://qiita.com/tabo_purify/items/d7a67709f54865df891e

 

 

◎◆制御文字のチェック
 ¥n ¥t ¥0 %00

 


◎◆URL
 Get値 keyword=<script>alert(1)</script>
 Get値 url=javascript:alert(a)
 リダイレクトとクッキー付与でhttpレスポンスヘッダが使われている URL中の改行がそのまま使われるのは良くない refererを使っているところ

 

◎◆xss
 ◎bladeで {!! としているところ
 ◎xmlを使わず、jsonを使う

 ◎htmlspecialcharsにent_quotesが入ってるか

 styleタグの中に、@import()でjavascript実行可能
 jsのlocation.hrefに任意の文字列でxss危険
 ajaxのinnerHTMLとdocument.writeはscriptが動く
 strip_tagsにjavascriptを埋め込める
 $()の引数を動的に生成は要エスケープ
 


◎◆最後
 httpにtelnetで接続 '<>
 外部からfile get 、putできないこと
 ◎OWASP ZAPでテスト

 脆弱性診断ツール OWASP ZAP vs 脆弱性だらけのWebアプリケーションEasyBuggy - Qiita

 セキュリティテスト - Qiita

 VAddy料金プラン | VAddy クラウド型Web脆弱性診断ツール

 

 

 

◎ ◆調査に使用する文字列 

 

\n<\0>\t';,%00)(!"#$%&'()=~|{`*}_?

\([

?

 

'; UPDATE TABLENAME SET COLLUMNAME = 99 WHERE COLLUMNAME = 1 --
' or 1 /* UPDATE `TABLENAME` SET COLLUMNAME = 99 WHERE `COLLUMNAME` = 1 --


<a onclick="window.alert('アラートの表示3');">テスト3</a>
<sup onclick="window.alert('アラートの表示4');">テスト4</sup>
<sub onclick="window.alert('アラートの表示5');">テスト5</sub>
<u onclick="window.alert('アラートの表示6');">テスト6</u>
<span onclick="window.alert('アラートの表示7');">テスト7</span>
<br onclick="window.alert('アラートの表示8');">テスト8</br>

<a href="javascript:(alert('アラートの表示8');)">クリック</a>

 

 

<script type="text/javascript">
function ShowAlert() {
alert("aaaaa");
}
</script>
<a href="javascript:void(0)" onclick="ShowAlert();">bbbbbbbbb</a>

 


javascript:OnLinkClick(window.alert('アラートの表示'););

https://urlname.com/¥00aiueo04/

<button onclick="document.getElementById('dom_access_1').innerHTML='クリックでinnerHTML変更'">テスト</button>

http://yahoo.co.jp/@import(javascript:alert('ようこそ私のページへ'))


keyword=<sup script>alert(1)</sup>
@import()
javascript:alert(a)

a@a.jphttp://hdg?p=1%00

a@a.jphttp://hdg?p=1

http://yahoo.co.jp?p=1"<script>alert(12)</script>

a@a.jphttp://hdg?p=1 

a@a.jphttp://hdg?p=1