ホームページ  >  記事  >  バックエンド開発  >  Qibo CMS SQL インジェクションの脆弱性学習

Qibo CMS SQL インジェクションの脆弱性学習

WBOY
WBOYオリジナル
2016-08-08 09:27:171520ブラウズ

今日、asrc (http://security.alibaba.com/blog/blog.htm?spm=0.0.0.0.96tpib&id=13 ) で cms の脆弱性分析に関する記事を見て、次のような気がしました。 Ali Daniel は、脆弱性分析を書くとき、ましてや利用方法を書くときはまだ少し慎重です。

この CMS を Baidu で検索しましたが、使用量は依然としてかなり多くなっています。 PHPについてあまり詳しくないので、簡単に勉強して使い方をまとめてみました。

この脆弱性の原因は、inc/common.inc.php 内の次のコード部分です:

if(!ini_get('register_globals')){
	@extract($_FILES,EXTR_SKIP);
}

このコードの意味は、php が受け取った $_Files リクエスト配列をいくつかの変数に変換することです。そして、これらの変数はマジッククォーテーションによってエスケープされないことがわかっています。

member/comment.php ファイルをもう一度見てください。次のコードです:

if($job=='del'){
      foreach( $cidDB AS $key=>$value){
		$rs=$db->get_one("SELECT aid FROM {$pre}comment WHERE cid='$value'");
		$erp=get_id_table($rs[aid]);
		$rsdb=$db->get_one("SELECT C.cid,C.uid AS commentuid,C.aid,A.uid,A.fid FROM {$pre}comment C LEFT JOIN {$pre}article$erp A ON C.aid=A.aid WHERE C.cid='$value'");
		if($rsdb[uid]==$lfjuid||$rsdb[commentuid]==$lfjuid||$web_admin||in_array($rsdb[fid],$fiddb)){
			$db->query("DELETE FROM {$pre}comment WHERE cid='$rsdb[cid]'");
		}
		$db->query("UPDATE {$pre}article$erp SET comments=comments-1 WHERE aid='$rsdb[aid]'");
	}
	refreshto("$FROMURL","删除成功",0);
}

このうち、変数 $cidDB は、get メソッドを通じて URL から取得したコメントの ID である必要があります。 SQL を実行するために SQL ステートメントに記述されます。

しかし、comment.php は common.inc.php を参照しており、$cidDB は初期化されていないため、ここでは $_Files の変数を使用して、エスケープせずに $cidDB に値を直接割り当てることができます。

POC: 不は実際には POC ではなく、単純な使用方法です。

out out out of Named: 1' Union select version() and '1'='1

次に、アップロードを送信すると、返される結果が表示されます。

さらに厄介な問題は、値が2つのSQLステートメントに格納されているため、2つのステートメントの列が異なるため、エラーが発生することです。ここで Union を使用するとレポートされます。唯一の方法はブラインド インジェクションです。または、他の場所で初期化されていない変数を探すこともできます。



サイズ: 55.3 KB

サイズ: 26.1 KB

添付画像を見る

上記では、関連する側面も含めて Qibo CMS の SQL インジェクションの脆弱性について学習しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。

  • Qibo CMS SQL インジェクションの脆弱性学習
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。