본문 바로가기

해킹과 보안 동향/DVWA

dvwa. 커맨드 인젝션 #2-2(medium, high, impossible코드 분석)

728x90

 

Medium

127.0.0.1에 대한 응답은 하지만 low에서 했던 명령어들은 먹히지 않는다.

 

 - view-source보면 특수문자 '&&'와 ';'이 공백으로 필터링 되는 것을 볼 수 있다.

 127.0.0.1 ; cat /etc/passwd ->  127.0.0.1 cat /etc/passwd로 실행

 - 다른 특수문자를 이용해서 명령 실행

 

High

127.0.0.1에 대한 응답은 하지만 medium에서 했던 명령어가 먹히지 않는다.

 - view-source를 보면 특수문자 필터링이 늘어났다.

하지만 "| "기호에서 뒤에 공백이 생겨 공격자가 그 틈을 노려 "|" 뒤에 공백 없이 바로 명령을 내리면 공격을 수행할 수 있다.

 - view help에서 보면 이건 의도한 것으로 개발자의 실수에 의한 취약점을 노린 것으로 볼 수 있다.

 

Impossible

마찬가지로 공격 명령이 수행되지 않는다.

 - view-source를 보면 .으로 ip를 구분하고 octet()으로 ip가 맞는지 검증해주고 있다.

trim() removes all leading & trailing spaces, right?.

checkToken()과 generateSessionToken() 함수를 호출하여 토큰을 생성하고 검증해서 CSRF를 방지한다.

똑같이 target에 ip를 넣지만 stripslashes()에 ip값을 넣는다.

explode(경계 문자열, 나눌 문자열, 제한 갯수) : 특정 문자열을 나눠서 배열로 반환한다.

-> IP를 "."을 기준으로 4개의 배열로 나눴다.

is_numeric(a) : a가 숫자인지 아닌지를 확인하여 결과를 반환하는 함수다.

-> 0번째 ip주소가 ip주소인지 .을 기준으로 구분하여 127.0.0.1이면 0번째 배열이므로 127이 숫자인지 확인하고 있다.