mysql_real_escape_string(string,connection)
因为在后端PHP中所有传入的参数被这个函数进行了转化,使得SQL注入相关的一些字符没转换了。
- \x00
- \n
- \r
- \
- '
- "
- \x1a
而且在登录的时候,很多页面也不返回SQL注入的数据。只会返回一些固定图片或语句,这样只能是盲注,不过又因为有这个函数的过滤,就被堵住了。
<html>
<head>
</head>
<body bgcolor="#000000">
<?PHP
session_start();
if (!isset($_COOKIE["Auth"]))
{
if (!isset($_SESSION["username"]))
{
header('Location: index.php');
}
header('Location: index.php');
}
?>
<div align="right">
<a style="font-size:.8em;color:#FFFF00" href='index.php'><img src="../images/Home.png" height='45'; width='45'></br>HOME</a>
</div>
<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
if (isset($_POST['submit']))
{
# Validating the user input........
$username= $_SESSION["username"];
$curr_pass= mysql_real_escape_string($_POST['current_password']);
$pass= mysql_real_escape_string($_POST['password']);
$re_pass= mysql_real_escape_string($_POST['re_password']);
if($pass==$re_pass)
{
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
$res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');
$row = mysql_affected_rows();
echo '<font size="3" color="#FFFF00">';
echo '<center>';
if($row==1)
{
echo "Password successfully updated";
}
else
{
header('Location: failed.php');
//echo 'You tried to be smart, Try harder!!!! :( ';
}
}
else
{
echo '<font size="5" color="#FFFF00"><center>';
echo "Make sure New Password and Retype Password fields have same value";
header('refresh:2, url=index.php');
}
}
?>
<?php
if(isset($_POST['submit1']))
{
session_destroy();
setcookie('Auth', 1 , time()-3600);
header ('Location: index.php');
}
?>
</center>
</body>
</html>
不过这里这个pass_change.php文件有漏洞,这里的username没有经过mysql_real_escape_string()这个函数就直接被执行到SQL语句中了。
我们可以在注册的username中做手脚。
1、创建新用户:
2、登录:
3、修改密码:
由于加了SQL注入,其实修改的就是admin的密码
这样我们就拿到了admin的密码,可以一admin用户登录了