sqli-labs:less-11/12 简单SQL注入和身份验证漏洞综合
2021-08-31 20:42
961 查看
这两个靶场是一样的题,我就拿less-12说事了吧 首先,尝试胡乱输入密码进行测试: 发现存在报错,这时用admin和admin这个正确的账号密码进行测试(1~10前面的题目告诉了) 发现有着正确的提示: 但是还不够,我们尝试在username后面加上单引号: 发现正常报错 加上双引号尝试(没输入密码) 存在报错,这个就是SQL注入点:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '") and password=("") LIMIT 0,1' at line 1构造SQL语句:
admin") and 1=1 %23
输入到其中去:
漏洞分析
首先进行代码审计:
<?php //including the Mysql connect parameters. include("../sql-connections/sql-connect.php"); error_reporting(0); // take the variables if(isset($_POST['uname']) && isset($_POST['passwd'])) { $uname=$_POST['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,'Password:'.$passwd."\n"); fclose($fp); // connectivity $uname='"'.$uname.'"'; $passwd='"'.$passwd.'"'; @$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result); if($row) { //echo '<font color= "#0000ff">'; echo "<br>"; echo '<font color= "#FFFF00" font size = 4>'; //echo " You Have successfully logged in " ; echo '<font size="3" color="#0000ff">'; echo "<br>"; echo 'Your Login name:'. $row['username']; echo "<br>"; echo 'Your Password:' .$row['password']; echo "<br>"; echo "</font>"; echo "<br>"; echo "<br>"; echo '<img src="../images/flag.jpg" />'; echo "</font>"; } else { echo '<font color= "#0000ff" font size="3">'; //echo "Try again looser"; print_r(mysql_error()); echo "</br>"; echo "</br>"; echo "</br>"; echo '<img src="../images/slap.jpg" />'; echo "</font>"; } } ?>
- 首先,在判断语句
if(isset($_POST['uname']) && isset($_POST['passwd']))
中只判断passwd是否存在,而并没有直接去查询数据库进行if判断,这样,会导致攻击者不需要用户名就可以进入if条件判断。 - 其次,在语句
// connectivity $uname='"'.$uname.'"'; $passwd='"'.$passwd.'"'; @$sql="SELECT username, password FROM users WHERE username=($uname) and password=(\$passwd) LIMIT 0,1";
在这里,就给SQL注入闭合双引号提供了可能,可以直接把passwd注释掉 - 最后,报错:
print_r(mysql_error());
,报错给注入者提供了便利。
综上所述,这些都是解决靶场的代码关键
相关文章推荐
- sqli-labs less-11 & less-12
- 通过sqli-labs学习sql注入——基础挑战之less11-22
- sqli-labs Less-12
- sql注入问题之 后台身份验证绕过漏洞
- sqli-labs Less-11
- 从Sqli-Labs学习sql注入:Sqli-Labs less-1&2
- 通过sqli-labs学习sql注入——基础挑战之less1
- sql注入及sqli-labs-master/Less-1题解析
- 通过sqli-labs学习sql注入——基础挑战之less1-10
- 通过sqli-labs学习sql注入——进阶挑战之less23-28a
- Sqli-labs less 12
- sqli-labs的sql注入——基础挑战之less11
- 防止SQL注入漏洞简单方法
- SQL 2005用Windows身份验证登陆18456错误
- 12、SQL综合应用学习2
- 实现简单的 Forms 身份验证
- SQLSERVER 在局域网使用Windows身份验证连接局域网内的另一台SQL服务器(不是域环境)
- Sql集成身份验证_Sql连接不上问题
- sqli-labs Less-13
- sqli-labs解题大法11~17