SQL 스타일 주입에 bash 입력을 사용하시나요?

SQL 스타일 주입에 bash 입력을 사용하시나요?

누구나 입력을 제공할 수 있는 스크립트가 제공됩니다. 변수에서 벗어날 수 있는 입력이 있습니까? 예를 들어 다음 스크립트가 제공됩니다.

echo $1

다음과 같이 만드는 것이 가능합니까 $1?

text && rm -rf /

위와 비슷한 작업을 시도하고 있지만 작동하지 않습니다.

위의 시나리오가 가능하지 않다는 것을 누구든지 확인할 수 있습니까?

답변1

2014년에는 Shellshock이라는 Bash 취약점이 악용되었습니다. 일반적인 소프트웨어의 대부분의 취약점과 마찬가지로 CVE(Common Vulnerability and Exposures) 권고 CVE-2014-6278이 게시되었습니다. Shellshock은 Apache의 cgi 모듈 및 OpenSSH를 포함한 일반 서버 소프트웨어 스택의 여러 공격 벡터를 통해 원격 호스트에서 임의 코드 실행을 허용하는 Bash용 원격 공격입니다.

이 취약점은 1989년부터 2014년까지 모든 Bash 버전에 영향을 미쳤으며 쉽게 생성된 취약점이 널리 시연되면서 패치가 적용되었습니다.

추가 자료:

OWASP 쉘 충격 프레젠테이션, PDF

NIST CVE-2014-6278

ServerFault Shellshock 문제, 2014

Distro Repos에서 사용 가능한 대부분의 버전이 이미 패치되었다고 생각합니다.

정정: 쉘 쇼크는가족취약점... CVE-2014-6271, CVE-2014-6277, CVE-2014-6278, CVE-2014-7169, CVE-2014-7186, CVE-2014-7187

그리고 Apache 웹 서버나 SSH와 같은 포트 전달과 패치가 적용되지 않은(아마도 패치가 적용되지 않은) IoT 장치가 있으면 LAN에 쉽게 영향을 미칠 수 있다는 점을 기억하는 것이 좋습니다.

답변2

명령 구분 기호는 확장 전에 처리되므로 변수의 \n, ;, &또는 &&변수 내용을 편집하지 않는 한 변수에 영향을 주지 않습니다.||eval

답변3

와일드카드가 취약점인 것 같습니다.

$ echo 'echo $1' > injection.sh
$ bash injection.sh '/*'
/bin /boot /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var

그래서 당신은언제나참조 변수:

$ echo 'echo "$1"' > injection.sh
$ bash injection.sh '/*'
/*

관련 정보