您的位置:首页 > 数据库

Sqli-LABS通关笔录-17-审计SQL注入

2016-12-10 22:33 351 查看
这个关卡开始好像进入新的知识区了,前面几个是让我们加深对盲注的印象。接下来又是新知识了!皮卡丘,接招吧!

代码是从SQL-libs的第十七关卡扣的。

页面效果如下所示:



PHP面完整CODE如下所示:

<?php
include("../sql-connections/sql-connect.php");
error_reporting(0);

function check_input($value) #定义一个函数为check_input,里面有一个参数为$value。
{
if(!empty($value))     #当参数不为空的时候
{
// truncation (see comments)
$value = substr($value,0,15); #参数如果的话执行该条语句,使用substr函数对参数进行截取取从第0位到第15位的数据。
}

// Stripslashes if magic quotes enabled
if (get_magic_quotes_gpc()) #判断php.ini是否开启了魔术引用。
{
$value = stripslashes($value); #如果开启了对魔术引用进行反转。这个的意思就是不需要去掉魔术引用
}

// Quote if not a number
if (!ctype_digit($value)) #ctype_digit:检测是否都是数字,负数及小数都不行,也就是说如果不为数字,为负数或者小数的执行22行代码。
{
$value = "'" . mysql_real_escape_string($value) . "'"; #关于mysql_real_escape_string()函数的更多解释:http://www.w3school.com.cn/php/func_mysql_real_escape_string.asp
}

else
{
$value = intval($value); #获取$value的整数
}
return $value;
}

// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd'])) #判断user和passwd有没有设置

{
//making sure uname is not injectable
$uname=check_input($_POST['uname']);   #使用check_input函数对传过来的uname参数进行过滤

$passwd=$_POST['passwd']; #过滤的很好,但是密码就没过滤了。问题的关键处出在这里!

//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'User Name:'.$uname."\n");
fwrite($fp,'New Password:'.$passwd."\n");
fclose($fp);

// connectivity
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";

$result=mysql_query($sql);
$row = mysql_fetch_array($result);
//echo $row;
if($row)
{
//echo '<font color= "#0000ff">';
$row1 = $row['username'];
//echo 'Your Login name:'. $row1;
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
mysql_query($update);
echo "<br>";

if (mysql_error())
{
echo '<font color= "#FFFF00" font size = 3 >';
print_r(mysql_error());
echo "</br></br>";
echo "</font>";
}
else
{
echo '<font color= "#FFFF00" font size = 3 >';
//echo " You password has been successfully updated " ;
echo "<br>";
echo "</font>";
}

echo '<img src="../images/flag1.jpg"   />';
//echo 'Your Password:' .$row['password'];
echo "</font>";

}
else
{
echo '<font size="4.5" color="#FFFF00">';
//echo "Bug off you Silly Dumb hacker";
echo "</br>";
echo '<img src="../images/slap1.jpg"   />';

echo "</font>";
}
}

?>


见39行,未对齐进行过滤进而造成SQL注入



这题其实跟之前的一样。可以使用延时注入来注入。至于为啥工具没跑出来我真心不懂。

THE END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: