HTML input Disabled attribute için XSS Bypass Yöntemi

Merhaba

XSS zafiyetlerinden korunmak için Input Validation ve Output Encoding yöntemlerine özen gösterilmesi gerekmektedir. Bu güvenlik adımlarının uygulanmadığı yazılımlarda XSS zafiyeti olsa bile exploit edilemediği durumlar gelişebilir.

Input Disabled Attribute

HTML formlarda bazı input alanlarının kullanıcı tarafından değiştirilmesini engellemek amacıyla geliştirilmiş. Örnek olarak; Üyelik işlemi tamamlandıktan sonra nickname’in değiştirilmesine izin verilmiyorsa. Bu alan input tag’ine Disabled attribute’u eklenerek yapılabilir.

Aşağıdaki örneğe http://lab.mehmetince.net/xss/disabled-input.php adresinden erişerek test edebilirsiniz.

Kod analiz edildiğinde keyword parametresi üzerinden XSS açığı olduğu görülmektedir. Tek ve Çift tırnakların haricinde < ve > gibi karakterlerin tamamı encode edilmektedir. Bu zafiyeti exploit edecek payload aşağıdaki şekilde yazılabilir.

lab.mehmetince.net/xss/disabled-input.php?keyword=mehmet” onmouseover=”alert(1)

Dönen sayfanın HTML kaynak koduna bakıldığında XSS zafiyetinin exploit edildiği düşünülmektedir.

Mouse input alanına getirildiğinde beklenildiği gibi bir Alert popup’u çıkmayacaktır. Bunun sebebi input alanının disabled edilmiş olmasıdır. Input alanının disabled edildiğini fark eden tarayıcılar bu alana tanımlanmış onmouseover gibi javascript kodlarını çalıştırmayacaktır.

Internet Explorer

İnternet tarayıcıları arasında belirli bir standart olmadığı için tarayıcıların farklı davranışları mevcuttur. Bu XSS örneğini bypass’lamak için Internet Explorer 9.0 ve öncesi için geçerli olan style=”x:expression(alert(1))” payload tag’i kullanılacaktır.

Son

Gönderilen talep: http://lab.mehmetince.net/xss/disabled-input.php?keyword=foo” style=”x:expression(alert(1))

Disabled XSS IE 9