sqli-labs1-10通关笔记

让第一个参数不存在的目的是,让联合查询需要的结果能在页面回显。

常规注入步骤为探测是否有注入点,有则判断列数,判断回显位,判断当前数据库名,查询当前数据库中的所有表名,然后选取感兴趣的表进行字段查询

Less1

纯数字时,页面正常

尝试闭合标签,发现闭合成功,页面无内容

判定存在注入点

查看源码,发现闭合标签确实时单引号,且参数获取的值,没有经过任何过滤,就直接使用。于是常规的sql注入流程就可以获取到用户名和密码


Less2

由于逻辑假,所以没有查询到结果,判断为数字型查询

同样,由于参数没有任何过滤,直接使用,所以常规注入流程即可


Less3

?id=1--+时页面正常

?id=1 and 1=2 页也正常,所有判断为字符型注入,接下来需要考虑闭合标签

当第一次使用单引号后,直接报错

其他任意闭合符都正常返回页面,于是初步可以判断为闭合标签应该是单引号与其他标签组合形成的闭合符。

使用单引号和括号时,页面正常,单引号双引号结合时,报错。于是可以判断闭合标签为单引号和括号

查看源码

为什么只用单引号会报错,其他符号没闭合却没报错?

原 SQL 结构:id=('$id')

仅输入单个单引号 1' 为什么报错

传入值拼接后:id=('1'')。多出一个单引号,引号配对断裂,SQL 语法不完整,数据库抛出语法错误。

传入 1) 这类符号为什么不报错

传入值拼接后:id=('1)')。首尾原有单引号正常配对闭合,1) 整体被视作字符串内容,SQL 语法合法,因此正常执行查询。

补充 payload 1)--+

  1. 提前闭合左侧括号,--+ 注释掉后端多余的 '),截断原有语句,实现注入。

由于没有对参数进行任何过滤,,所以常规注入步骤即可


Less4

通less3一样,判断出闭合符即可

复制代码
$id = '"' . $id . '"';

点是php拼接字符串运算符

PHP 单引号字符串:内部内容原样输出,不解析变量、不解析转义

如输入1,此时id的值就是"1"

最后再拼接成("1")


Less5--盲注类

盲注:布尔盲注,错误盲注

数据库执行 SQL,但页面不返回数据库报错,也不回显查询的数据。 仅根据 SQL 查询条件真假,返回两种不同页面状态:

  1. 查询条件为真:返回正常页面(业务正常内容)
  2. 查询条件为假:返回异常 / 空白页面

通过观察页面两种返回结果,间接推断数据库内部信息,逐位猜解库、表、字段数据。

可使用sqlmap工具,或编写python脚本自动注入

错误盲注:updatexml(1,concat(0x7e,(select database()),1)--+

源码

只会输出固定内容,输出结果随 SQL 查询真假分为两种页面:

查询条件为真输出 "You are in......";

查询条件为假则进入 else 分支,可输出数据库报错信息,该环境可支持布尔盲注与报错注入。

报错注入法


Less6

同样是盲注,注意判断闭合符


less7

依旧盲注,判断闭合符

一个单引号报错

单引号括号也报错

双引号不报错

正确闭合

依旧对输入的参数没有任何过滤,判断闭合符后盲注

')让语句中多了个)

"被当作字符串整体识别


Less8

纯布尔盲注

Less9--时间盲注

不论正确闭合与否,页面都不会改变,于是可以用时间盲注。

在burp suite中抓包后,用if(expre1,expr2,expr3):如果expr1为ture,则if返回expr2,否则返回expr3.

此处由于知道当前数据库名为security,所以返回sleep(5),让数据库查询休眠5秒,明显得发现页面有延迟

Less10

注意闭合符的时间注入

相关推荐
风哥2号14 分钟前
数据库教程FGMT29‑Linux平台MySQL5.7安装配置与管理入门
数据库
杨云龙UP1 小时前
MySQL Host is blocked because of many connection errors 导致 JDBC 连接失败排查与解决
linux·运维·网络·数据库·sql·mysql·登录失败
这个DBA有点耶2 小时前
数据库数据同步解决方案怎么选?6款主流工具横向对比与信创选型指南
数据库·架构·dba
刃神太酷啦2 小时前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
小雷信息医学2 小时前
不会写复杂代码也能发 SCI?手把手教你用 InSpireR 交互系统一键提取、合并与导出临床科研宽表【第三章】
数据库
旺仔不是程序员3 小时前
复合索引最左前缀原则:PostgreSQL 的 WHERE 为什么必须命中第一列
数据库·后端·sql
旺仔不是程序员3 小时前
字段类型不一致:PostgreSQL 报错与索引失效的第一元凶
数据库·后端·sql
白远山3 小时前
货运跑腿搬家平台开发实战:从需求分析到落地部署指南
数据库·数据挖掘·需求分析
geovindu3 小时前
sql: Data Modeling Patterns
数据库·sql·设计模式·sqlserver
上海蓝色星球3 小时前
蓝色星球NG-AIOS新型AI工业操作系统重磅发布——以本体智能为内核,重构“AI+制造“新范式
大数据·数据库·人工智能·机器人