作者:zero


本文为SQL基本注入的进阶文章,如有任何疑问请查看:

SQL基本注入演示:https://www.cnblogs.com/anbus/p/10082452.html

导语:

利用SQL注入进行攻击来获取WebShell其实就是在向服务器写文件。(注意:这里我们需要得到网站的绝对路径)如何理解?引入余弦老哥的一句话:

黑客通过输入提交“特殊数据”,特殊数据在数据流的每个层处理,如果某个层没处理好,在输出的时候,就会出现相应层的安全问题。

也就是“输入输出”,余弦老哥举的这个例子就很精彩!

如果在存储层的数据库中没处理好,数据库的SQL解析引擎把这个“特殊数据”当做指令执行时,就产生SQL注入这样的安全问题,这段“特殊数据”可能长得如下这般:
' union select user, pwd, 1, 2, 3, 4 from users--

为什么要进行SQL注入WebShell

在所有常用的关系数据库管理系统(RDBMS)中均包含内置的向服务器文件系统写文件的功能,通过这些内置的功能,我们可以将自己的WEBshell写目录或文件进去。

什么是web shell?

Web shell 我们可以把他拆开来看,web就是指在web服务器上,shell指的是用脚本语言编写的程序,那么,web shell就是用来管理服务器的一个工具,拥有对服务器进行操作的权限,又被称作web admin。Web shell一般是被网站管理员用于网站管理、服务器管理等等一些用途,但是由于web shell的功能比较强大,可以上传下载文件,查看数据库,甚至可以调用一些服务器上系统的相关命令(比如创建用户,修改删除文件之类的),所以经常会被黑客加以利用,通过一些上传缺陷,将自己编写的web shell上传到web服务器的页面的目录下,然后通过页面访问的形式进行渗透,或者通过插入 “一句话” 来进行渗透。

Web shell 种类:

Web shell根据脚本可以分为多种,例如:PHP脚本木马,ASP脚本木马,也有基于.NET的脚本木马和JSP脚本木马。在国外,还有用python脚本语言写的动态网页,当然也有与之相关的web shell,根据功能来区分可以分为大马和小马,小马通常就指的是一句话木马,那下面我们就来说说一句话木马。

什么是一句话木马?

一句话木马顾名思义就是只有一行代码的木马,短短的一行的代码就可以做到与大马相当的功能,为了绕过检测机制的检测,一句话木马出现过无数种变形,但是核心功能还是不变的,就是木马函数执行我们发送的信息。说到发送,正常我们发送的途径有三种:分别是 get , post , cookie。可以用这三种方式向一个网站提交数据。

一句话木马用 $_GET[' ']  , $_POST[' '] ,$_COOKIE[' '] 来接受我们发送的数据,并把接收到的数据传递给一句话木马中执行命令的函数,进而执行命令。所以我们看到很多一句话木马大多数都有两个部分,一个用来接受命令,一个用来执行命令。

举个例子:

这就是一个经典的一个一句话木马,其中 post 就是使用 post 的方式来接受命令,而 eval 就是执行命令的函数,eval 在 PHP 中的意思是将收到的数据转化成 PHP 代码来执行,这样我们就能够让插了一句话木马的网站执行我们传递过去的任意php语句,是不是觉得一下豁然开朗?

演示一下一句话木马的使用:

新建立一个叫做muma.php的php文件,将它放入到www目录中

因为是post方法,所以我们用hankbar来提交数据

我们提交一个叫 phpinfo 的命令,phpinfo 的意思是展现当前php版本信息,然后提交一下

成功执行!

但是不只是 eval 这一个函数可以实现这个功能,还有很多函数可以间接或者直接的实现,而你要做的,便是想方设法进行变异来绕过某些检测机制,这些思路网上有很多,这里就不在赘述了。

常用工具:中国蚁剑的使用

不一定得是这个工具,笔者只是将用这个工具来做个科普。

中国蚁剑,一剑在手,纵横无忧!其他的多余的话咱们就不说,来做个演示:

利用蚁剑链接一句话木马

还是写入一个一句话木马,密码值是value

将其中写入到www目录里面

添加数据

然后添加数据,成功!

点击文件管理,就可以成功进入到目标服务器了。

利用SQL注入漏洞获取webshell:

从前文我们可以看出,一切一切的难度在于如何上传小马,而我们一般都是利用上传漏洞来进行上传各种大马小马,本次我们利用SQL注入来进行上传操作,以达到写入webshell的这一个操作。

select ...into outfile介绍:

正常的使用规则就是select A into outfile B,意思就是选择a的数据导入到b,常和union连用。但是有两种写法,一种是利用union的,一种是不用的。

如果要利用需要满足多种条件:

  1. 必须能用单引号

  2. -secure-file-priv没有进行配置

  3. 需要绝对路径

  4. 对web目录有写入权限

挖洞这门艺术是运气与实力的充分展现,在get shell的过程中限制会有很多,尤其是绝对路径,有点时候有可能报错或者是直接默认路径直接就可以出来绝对路径,有的时候得通过扫后台敏感信息啊,sqlmap扫目录啊,等等多种手段才能出来,这可能也就是挖洞的魅力所在吧。

具体如何获取路径信息文章推荐:https://blog.csdn.net/wodafa/article/details/61916575

思路引导:

首先我们理顺一下思路,前提是我们已经发现这个漏洞了,是select语句类型的SQL漏洞,并且已经注入成功了,我们对这个漏洞进行进一步利用,通过测试我们发现我们拥有写入权限,并且也没有规定路径,能使用单引号,我们也知道了后台服务器的绝对路径,于是决定写入小马对漏洞进行进一步的利用。

对于构造语句,我们使用select into out file 和union进行联合使用,具体语句如下:

a ' union select 1,0x273c3f706870206576616c28245f504f53545b2776616c7565275d293b3f3e27 into outfile 'E:/PHP/PHPTutorial/WWW/muma.php'#

其中,前面的我想应该就不用讲了吧,不明白可以回顾一下前面的文章,重点在于:

0x273c3f706870206576616c28245f504f53545b2776616c7565275d293b3f3e27

这个十六进制码这个翻译过来就是:

带引号的一个小马,欸这里有人可能要问了,小马就算了,为什么还要带引号?

SQL语句因为是解释型语言,这条语句进入后台后,首先后台会解码,把十六进制转换成字符,然后再执行,而带引号的小马会被当成字符串传递到muma.php的php文件中,这时在muma.php里面就是已经变成字符串的一句话木马,但是如果不加引号,传递到muma.php 的就是未被转换的十六进制,这就是为什么要加引号的原因。

注入语句!

打开www目录,我们发现已经注入进去了

现在我们用蚁剑来进行连接

成功链接!

常见防御姿势:

  1. 设置 secure_file_prive = null (不允许导入和导出)

  2. 防止暴露网站绝对路径

  3. 正确设置 web 目录权限,除 log、upload 等目录外不授予写权限,upload 目录不授予执行权限


本文到此结束!

【入门推荐】SQL注入进行WebShell渗透测试的基础概览的更多相关文章

  1. Web渗透测试入门之SQL注入(上篇)

    题记: 本来今天想把白天刷的攻防世界Web进阶的做个总结,结果估计服务器抽疯环境老报错,然后想了下今天用到了SQL注入,文件上传等等,写写心得.相信很多朋友都一直想学好渗透,然后看到各种入门视频,入门 ...

  2. 2019-10-23:渗透测试,基础学习,DVWA,Medium和Hight级别sql注入

    VWA的Medium和Hight级别sql注入 一,Medium级 服务端代码 <?php if( isset( $_POST[ 'Submit' ] ) ) {      // Get inp ...

  3. 2019-9-10:渗透测试,基础学习,sql注入笔记

    sql注入1,万能密码,自己写的网站,找到登录窗口,必须和数据库交互,往里插入构造的恶意代码,最后可以直接登录进去,不需要账号和密码,输入的恶意代码成为万能密码,后端拼接的sql语句,SELECT * ...

  4. SQL注入之DVWA平台测试mysql注入

    今天主要针对mysql常用注入语句进行测试. 测试环境与工具: 测试平台:DVWA,下载地址:http://down.51cto.com/data/875088,也可下载metaspolit-tabl ...

  5. 2019-9-9:渗透测试,基础学习,phpmyadmin getshell方法,基于时间的盲注,基于报错的注入,笔记

    phpmyadmin getshell方法1,查看是否有导入导出设置 show global variables like '%secure-file-priv%';2,如果secure-file-p ...

  6. 2019-9-9:渗透测试,基础学习,pydictor使用,sql盲注,docker使用,笔记

    pydictor,强大的密码生成工具,可以合并密码字典,词频统计,去重,枚举数字字典生成字典python3 pydictor.py -base d --len 4 4 生成纯数字4位密码python3 ...

  7. Vtiger CRM 几处SQL注入漏洞分析,测试工程师可借鉴

    本文由云+社区发表 0x00 前言 干白盒审计有小半年了,大部分是业务上的代码,逻辑的复杂度和功能模块结构都比较简单,干久了收获也就一般,有机会接触一个成熟的产品(vtiger CRM)进行白盒审计, ...

  8. 2019-10-9:渗透测试,基础学习the-backdoor-factory-master(后门工厂)初接触

    该文章仅供学习,利用方法来自网络文章,仅供参考 the-backdoor-factory-master(后门工制造厂)原理:可执行二进制文件中有大量的00,这些00是不包含数据的,将这些数据替换成pa ...

  9. 2019-9-28:渗透测试,基础学习,pgp常量,逻辑运算,DNS投毒,笔记

    sunny.exe clientid 隧道ID route -n 查看网关netstat -rn 查看网关 DNS劫持ettercap用来内网渗透测试使用,可以嗅探内网,DNS劫持等攻击1,在攻击者电 ...

随机推荐

  1. 【Go】 Go 语言环境安装

    安装环境/工具 1.Linux(CentOS 7.4版) 2.go1.11.2.linux-amd64.tar Go 语言环境安装 1.下载安装包 安装包下载地址为:https://golang.or ...

  2. HTML and CSS学习概述

    一·Web浏览器是一个连接到Web服务器,向Web服务器请求信息,然后解析返回来的HTML标记,并将其显示在浏览器窗口内的程序.1.Microsoft 2.Internet Explorer(IE)3 ...

  3. json(原生态)

    什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSO ...

  4. 单片机一种简便的printf调试方案。

    此处引用csdn博客.链接如下. http://blog.csdn.net/cp1300/article/details/7773239 http://blog.csdn.net/aobai219/a ...

  5. openstack的Host Aggregates和Availability Zones

    1.关系 Availability Zones 通常是对 computes 节点上的资源在小的区域内进行逻辑上的分组和隔离.例如在同一个数据中心,我们可以将 Availability Zones 规划 ...

  6. 第10章:MongoDB-CRUD操作--文档--修改--修改器

    ① $set:进行内容的重新设置 语法:{"$set" : {"成员" : "新内容"}}: 范例:将年龄是20岁的人的成绩修改为89 db ...

  7. spring mvc ajax异步文件的上传和普通文件上传

    表单提交方式文件上传和ajax异步文件上传 一:首先是我在spring mvc下的表单提交方式上传 ssm的包配置我就不一一详细列出来了,但是上传的包我还是列出来 这一段我也不知道怎么给大家讲解就是直 ...

  8. canvas画的时钟

    结合几天来学习的canvas的API,终于完成了一个时钟呵呵 html <!doctype html> <html> <head> <meta charset ...

  9. 如果我写一个开源的HIS软件

    HIS也称为医院信息管理系统,如果我要写一个 开源的,会成吗?为什么要这么做?出于对这个行业的担忧及其当前该行业的一些问题的思考.我曾跟两个HIS供应商讨论过这个话题,但可以感受到他们在利益面前,最终 ...

  10. 20155326刘美岑 2016-2017-2 《Java程序设计》第二周学习总结

    20155326刘美岑 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 教材第三章主要讲解的是基础语法,主要包括认识类型与变量.学习运算符的基本使用.了解类型 ...