코드를 실행하기 위해 파일을 XML로 덮어쓰는 기능을 활용할 수 있습니까?

코드를 실행하기 위해 파일을 XML로 덮어쓰는 기능을 활용할 수 있습니까?

제한된 셸을 사용하여 SSH를 통해 연결된 Ubuntu 18.04 사용자가 있습니다. 보다 정확하게는 /etc/passwd의 셸은 /bin/bash이지만 해당 command=설정 authorized_keys으로 인해 Python 스크립트 실행이 제한됩니다. 무엇보다도 이 스크립트는 사용자가 제공한 일부 데이터를 파일에 기록합니다. 파일 경로는 사용자가 조작할 수도 있습니다. 공격자는 이 취약점을 악용하여 임의의 파일을 덮어쓸 수 있다고 가정합니다(사용자에게 쓰기 권한이 있음). 이를 악용하여 해당 사용자로 임의의 코드를 실행하여 무제한 쉘을 효과적으로 얻을 수 있습니까?

공격자가 제어하는 ​​데이터는 파일의 시작 부분에 위치하지 않고 아래와 같이 XML로 래핑되어 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<blah>
  <blah blah="ATTACKER_CONTROLLED_DATA" />
<blah>

나는 .bashrc그것을 다음과 같은 것으로 재정의하려고 했습니다.

<?xml version="1.0" encoding="utf-8"?>
<blah>
  <blah blah=""
echo exploit?
"" />
<blah>

하지만 bash는 이를 구문 분석할 수 없으므로 실행되지 않습니다.

authorized_keys파일은 루트 사용자가 소유하고 읽기 전용 액세스 권한을 갖고 있으므로 사용자는 이러한 파일을 직접 덮어쓸 수 없습니다 . 디렉토리와 동일합니다 .ssh. 홈 디렉터리에 대한 쓰기 액세스 권한이 있지만 스크립트는 디렉터리를 이동/삭제할 수 없습니다.

분명히 이것은이론적으로악용될 수도 있지만 실제로 그런 일이 일어날 수 있다는 것을 증명하고 싶습니다.

답변1

데이터 출력 파일 경로가 사용자가 작동할 수 있고 기록되는 데이터가 사용자가 제공하는 경우 해당 사용자는 쓰기 액세스 권한이 있는 모든 위치에 무엇이든 효과적으로 쓸 수 있습니다.

SSH를 통해 실행 제한을 설정하여 사용자가 남겨둔 코드를 실행하지 못하도록 방지하는 것은 좋은 시작입니다. 주의하지 않으면 서비스/서버 다시 시작 시 적용되는 구성 파일을 변경하거나 일반 프로세스가 실행되는 동안 추가 작업을 수행하도록 서비스 스크립트를 변경할 수 있습니다.

파일 설정을 원하지 않는데 .bashrc왜 파일에 대한 쓰기 액세스 권한을 부여합니까 ? 악의적인 사용자가 무엇이든 덮어써서 이 스크립트에 문제를 일으킬 수 없도록 권한이 올바르게 설정되어 있는지 확인하십시오. 기본적으로 데이터를 기록하려는 정확한 위치에만 쓸 수 있도록 허용합니다.

관련 정보