记一次“有手就行”的从SQL注入到文件上传Getshell的简单过程

news/2025/3/26 8:06:26/文章来源:https://www.cnblogs.com/hetianlab/p/18230214

0x01 前台SQL注入

漏洞原理

SQL 注入漏洞的原理是应用程序没有对用户输入进行充分的验证和过滤,导致攻击者可以在输入框中插入恶意的 SQL 代码。当应用程序将用户输入的数据拼接到 SQL 查询语句中时,攻击者插入的恶意代码也会被执行,从而绕过身份验证和访问控制,直接访问或修改数据库中的数据。

1、查找注入点。

如果要对一个网站进行SQL注入攻击,首先就需要找到存在SQL注入漏洞的地方,也就是寻找所谓的注入点。可能的SQL注入点一般存在于登录页面、查找页面或添加页面等用户可以查找或修改数据的地方。

交互点一般是搜索栏、留言版、登入/注册页面、以及最利于观察的搜索栏的地址如果类似于http//xxxxxx/index.phpid=1这种很大程度存在注入当然有些注入点不会这么一眼看出会有些比较复杂例如http://xxxxxx/index.phpx=home&c=View&a=index&aid=9 这样的地址其实也可能存在注入。

如果应用程序未对用户输入进行充分的验证和过滤,就容易受到 SQL [注入攻击]

根据如上所述先去查看和数据库有交互点的地方,一般先去找搜索框,特别是这种可以查询年份和编号的地方,和用户数据交互的可能性最大。

使用Wappalyzer简单看一下网站的框架和使用的语言

image-20240413191302707

经过查看找到一处与数据库有数据交互的搜索编号的搜索框

image-20240413215111458

可以直接输入一个单引号看看有没有报错,sql注入加单引号的原因是为了让sql语句发生错误,从而得知其有没有过滤措施

image-20240413215133470

芜湖,直接爆SQL语句错误。。。

返回前面的搜索框输入' and sleep(10)#

image-20240413215334237

还是直接报错,没什么waf防护拦截。

image-20240413215429927

既然你这么脆弱,我就不客气了,直接丢sqlmap一把梭。。。。。

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】

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

2、测试

在搜索框随便输入一个简单的数据,使用yakit工具拦截等一下点击搜索发送的数据包。

image-20240414015812784

拦截的数据包:

image-20240414020116680

注入点在mz17Condition.searchCaseId=这个参数,在这个参数后面加上*号,让等一下使用sqlmap工具测试的时候直接测试这个测试,要不然会从头开始每一个参数都会测试,浪费时间,把数据包复制到txt文件里面。

image-20240414020410134

使用sqlmap工具测试txt文件里面的数据sqlmap命令:

--random-agent 随机使用HTTP用户代理头。
--level 分为1-5,默认为1,检查cookie至少为2,检查User-Agent等级至少为3,5级包含的payload最多,会自动破解出Cookie、XFF等头部注入,对应的速度也会比较慢。
--risk 等级为0-3,默认为1,会检测大部分的测试语句,等级为2时会增加基于事件的测试语句,等级为3会增加or语句的SQL注入测试

sqlmap.py -r .\9.txt --random-agent --level 5 --risk 3

image-20240414020843677

果然直接跑出来了,注入类型有布尔和报错,后端还是IBM DB2数据库,第一次遇见。。。。

话不多说直接跑库,看看可以获取到后台的密码sqlmap.py -r .\9.txt --random-agent --level 5 --risk 3 --dbs

image-20240414021324983

只跑出了一个库,看提示,感觉是当前注入的用户权限不够大sqlmap.py -r .\9.txt --random-agent --level 5 --risk 3 --is-dba

image-20240414021410331

后面跑了一下爆出来的数据库,里面没啥有用的信息。。。。拿不了shell继续测试别的地方

0x02 万能密码后台登录

前面的前台SQL注入没什么大用拿不了shell以后,继续测试别的漏洞,前台基本没什么东西,看向后台。

1、测试

使用dirsearch工具扫描网站目录,扫描出网站后台。

image-20240414193642525image-20240414193542027

访问后台url

image-20240414021621094

按照惯例后台登录必试弱口令admin/123456、admin/12345、admin/admin、admin/admin888、system/123456。。。。都试了一遍没成功,看见没验证码又不限制登录错误次数,直接去跑字典,结果。。。。没爆出来。。。。

image-20240414021733898

看向用户注册,鼓捣了一阵子发现根本就是摆设,填写信息点击注册没反应,抓包查看发现根本没有数据包发送出去,鸡肋。。。。

在一筹莫展的时候,突然想到前台有SQL注入漏洞,后台会不会也有呢。。。。

原理

万能密码利用的原理就是在后台登陆页面没有对用户输入的内容进行验证,此时程序所用用户输入的数据都合法的,所以这个时候无论是合法的管理员还是非法的入侵者所输入的数据都是被信任的,非法入侵者正是利用这一特点来进行非法登录的。

当我们在这些语句中添加一些参数时,就可以去数据库中查询账号和密码。

添加参数后,语句差不多是这样:

select * from user where username='a' or true #' and password='pass'

其中,#在SQL中是注释符,注释符后面的内容不起作用。

所以,实际上后台得到的有效代码是这样的:

select * from user where username='a' or true

其中or true 会使SQL语句恒成立,从而查询出数据库中的所有账号和密码,从而使我们成功登录。

除了 # 以外, -- 也是SQL中的注释符,但SQL的语法格式规定--和后面的注释内容必须间隔一个空格。

所以拼接到语句中大概是这样的:

select * from user where username='a' or true -- a' and password='pass'

也就是说:a' or true -- a经过SQL的转化后,结果等价于 a’ or true #。

SQL中规定,非布尔类型的数据参与比较运算时,会转化为布尔类型再参与运算。比如 or 1 或者 or 1=1 ,会转化为布尔类型的 true 再参与 or 的比较运算,也就是变成 or true ,同样能使条件恒成立,从而登录成功

简单来讲就是:a' or 1 # 或者 a' or 1=1 # 等价于 a' or true #。

当我们在登录界面输入 【万能密码】 比如 admin’ # 以后,后端会将我们输入的参数拼接到SQL中,大概是下面这样

select * from user where username='admin' #' and password='pass'

由于 # 在SQL中是注释符,注释符后面的内容不起作用,所以真正执行的SQL大概是下面这样

select * from user where username='admin'

SQL只会在数据库中查询用户名,而不是同时查询用户名和密码,这就意味着,只要用户名正确,就可以登录成功。

继续测试

使用万能密码继续测试admin' or 1=1--+

image-20240414021854314

点击登录以后会跳转到这错误页面,好像有戏!

image-20240414022458070

更换一个万能密码payload:admin' or 1=1#

image-20240414022729822

芜湖报错!!!根据报错提示尝试闭合

image-20240414022818568

尝试万能密码闭合能不能直接进入后台,使用自己收藏的万能密码txt去Fuzz用户名

抓取输入登录框用户名的数据包

image-20240414024625178

这里使用burp suite工具继续爆破

image-20240414030120963

加入自己收集的万能密码payload,进行测试

image-20240414030246161

芜湖302跳转了应该是成功了使用payload测试看看

image-20240414191902541

最终构造万能密码payload:admin' or '2'='2#

image-20240414030829604

进入后台!!!,登录的用户为管理员用户!!!

image-20240414112057949

0x03 后台getshell

1、测试

进了后台而且还是管理员的账号,就好办了,查找上传点,结果一番点点点、看看看,在网站信息维护找到上传点。

image-20240414112523664

点击添加

image-20240414192039250

填写好状态编号和数量

image-20240414112712630

设置主页新闻图片的位置选择文件

image-20240414112816281

设置一张图片码

使用Webshell_Generate生成哥斯拉jsp的webshell

image-20240414113229782

生成名为ceshijsp.jpg的哥斯拉码

image-20240414113430492

image-20240414113529434

选择这个cheshijsp.jpg的图片

image-20240414113736086

使用burp suite工具拦截点击确定时候发送的数据包,把后缀为jpg改为jsp

image-20240414113835950

修改后缀为jpg以后,发送修改好的数据包,取消拦截。

image-20240414113921479

因为发送出去的数据包试没有回显回来上传webshell jsp码的地址,访问首页,新闻动态的第一张图片就是刚刚上传的jsp码,右键打开新的标签可以看到完整的图片地址。

image-20240414114223037

得到webshell地址

image-20240414144147934

使用哥斯连接

image-20240414144502875

root最高权限!!!

image.png

0x04 总结

要多做尝试不要气馁。。。。

更多网安技能的在线实操练习,请点击这里>>

  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ollama部署本地大模型

安装docker与docker-compose 安装ollama与anythingllm docker-compose.yml version: "3"services:ollama:image: ollama/ollamacontainer_name: ollamavolumes:- .ollama:/root/.ollamaports:- 11434:11434anythingllm:image: mintplexlabs/anythingllmcontainer_nam…

学习笔记17:DenseNet实现多分类(卷积基特征提取)

转自:https://www.cnblogs.com/miraclepbc/p/14378379.html 数据集描述 总共200200类图像,每一类图像都存放在一个以类别名称命名的文件夹下,每张图片的命名格式如下图: 数据预处理 首先分析一下我们在数据预处理阶段的目标和工作流程获取每张图像以及对应的标签划分测试集…

学习笔记19:图像定位

转自:https://www.cnblogs.com/miraclepbc/p/14385623.html 图像定位的直观理解 不仅需要我们知道图片中的对象是什么,还要在对象的附近画一个边框,确定该对象所处的位置。 也就是最终输出的是一个四元组,表示边框的位置 图像定位网络架构 可以将图像定位任务看作是一个回归…

学习笔记13:微调模型

转自:https://www.cnblogs.com/miraclepbc/p/14360807.html resnet预训练模型 resnet模型与之前笔记中的vgg模型不同,需要我们直接覆盖掉最后的全连接层先看一下resnet模型的结构: 我们需要先将所有的参数都设置成requires_grad = False然后再重新定义fc层,并覆盖掉原来的。…

成熟的双向同步方案,能够解决哪些同步问题?

在企业的数据流转管控过程中,经常会遇到频繁的数据备份、同步,人工重复这样的工作程序,既繁琐又容易出错。因此对于企业而言,选择一款高效且安全的同步软件成为了企业运营中的关键一环,不仅能够提高工作效率,还能确保数据的安全性。在选择双向同步方案时,首先要明确自己…

从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践

据库设计和性能调优最重要的干货都在这里了!本文分享自华为云社区《DTSE Tech Talk openGemini :从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践》,作者:华为云开源。 在本期《从数据库设计到性能调优,全面掌握openGemini应用开发最佳实践》的主题直播中,…

MBD闲谈 第03期:MBD的“禁区”——底层驱动

转载自:autoMBD, 版权归autoMBD所有,转载请注明作者和来源 原文链接:http://www.360doc.com/content/22/0820/17/15913066_1044626106.shtml全文约3562字,你将看到以下内容:底层驱动的那些事底层驱动为啥是MBD“禁区” 底层驱动与模型集成下期预告1 底层驱动的那些事 先…

allure的suites(测试套)中未显示返回值参数,显示No information about test execution is available.(转自大佬,亲测有用)

转自大佬:https://blog.csdn.net/sbdxmnz/article/details/137016423ExecutionNo information about test execution is available.解决方法: 添加代码,因为pytest输出文本形式测试报告时未存储响应内容 # 将接口响应的文本内容附加到Allure报告中 allure.attach(接口响应.…

学习笔记9:卷积神经网络实现MNIST分类(GPU加速)

转自:https://www.cnblogs.com/miraclepbc/p/14345342.html 相关包导入 import torch import pandas as pd import numpy as np import matplotlib.pyplot as plt from torch import nn import torch.nn.functional as F from torch.utils.data import TensorDataset from tor…

笔记2:张量简介

张量生成方法 转自:https://www.cnblogs.com/miraclepbc/p/14329476.html张量的形状及类型张量的计算张量的梯度手写线性回归张量生成方法 张量的形状及类型 张量的计算 张量的梯度 手写线性回归

笔记3:逻辑回归(分批次训练)

转自:https://www.cnblogs.com/miraclepbc/p/14332084.html 相关库导入 import torch import pandas as pd import numpy as np import matplotlib.pyplot as plt from torch import nn %matplotlib inline数据读入及预处理 data = pd.read_csv(E:/datasets/dataset/credit-a.…

【深度好文】到底什么是质量意识?如何衡量,如何提升?

大家好,我是狂师! 在软件测试中,质量意识是一个核心且至关重要的概念。相信大家,经常会听到:"这个家伙质量意识很强,某某某要提升质量意识“之类的话语。 在企业中,“质量意识”不仅关乎产品和服务的优劣,更是企业竞争力和可持续发展的关键因素。那么,到底什么是…