Cross Site Request Forgery (CSRF)
译作跨站请求伪造
这个实验都不需要做了,因为只要更改一下密码就能很容易看到该实验将会有多么的简单,修改密码的请求是通过GET方法提交的,因此,简单的不能再简单了,不具体说了
<?php if (isset($_GET['Change'])) { // Turn requests into variables $pass_new = $_GET['password_new']; $pass_conf = $_GET['password_conf']; if (($pass_new == $pass_conf)){ $pass_new = mysql_real_escape_string($pass_new); $pass_new = md5($pass_new); $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';"; $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); echo "<pre> Password Changed </pre>"; mysql_close(); } else{ echo "<pre> Passwords did not match. </pre>"; } } ?>
此处的代码非常简单易懂,同时可以分析到,UPDATE处将参数直接代入到了SQL语句中,同样存在漏洞,可以构造SQL语句修改任何人的密码。
"UPDATE `users` SET password = '$pass_new' WHERE user = 'admin'
将上面的代码修改为
"UPDATE `users` SET password = '123' where user='root'#' WHERE user = 'admin'
即,密码为 123′ where user=’root’#,这样就可以修改root用户的口令了,这个没有测试,因为系统里只有一个admin账号,理论可行。