一道简单的SQL注入题
这是我真正意义上来说做的第一道SQL题目,感觉从这个题目里还是能学到好多东西的,这里记录一下这个题目的writeup和在其中学到的东西
link
:https://www.ichunqiu.com/battalion Web分类下的SQL
尝试SQL注入
进入这个模拟环境之后,会得到一个提示为flag在数据库中,这时候查看url栏可以发现
嗯这个就有SQL注入内味了,然后试一下id=2或者id=3,发现id=2时候可以出来提示为test,然后再往后就什么都不出来了,这时候我先假装id后面的东西是一个数字变量,输入id=1 and 1=1
,发现网页给出提示是这是SQL注入代码,这说明这个网站是有对SQL注入做基本的防护的,所以现在的问题就变成了如何绕过服务器的过滤规则。
对过滤or、and、xor、not的绕过
对这些的绕过一般的操作是
- and = &&
- or = ||
- xor = | # 异或
- not = !
现在我们换一下把输入变成id=1 && 1=1
,发现并没有报错,这说明我们成功进行了注入的第一步。这时候我们可以发现,很有可能该数据库仅对我们展示了表中某一列的数据,所以现在就要判断这个表到底有几列,这里使用的方法是order by
。url里输入id=1 order by 1
,报错提示这是sql注入代码,所以现在要进行进一步的绕过
SQL关键字过滤绕过
- 改变大小写:例如
select
变为SELect
(本题中没用) - 添加内联注释:把一些MYSQL的语句放在
/*!...*/
中,例如/*!order*/
(本题中没用) - 双写关键字:一些waf中替换使用的是
replace()
函数,因此可以输入selselectect
,在经过waf处理后变为select
(本题中没用) - 空格过滤绕过:有些waf会过滤掉注入中的空格导致无法正常允许,这里可以把空格用
/**/
,反单引号
,()
,回车
等进行代替(本题中暂时不用考虑) - 等号绕过:使用like和rlike模拟=的功能,在不添加通配符%时候,
like xxx
和rlike xxx
和= xxx
是等价的(本题中暂不用考虑) - 添加<>或者//:因为有的waf会对<>或//进行过滤,所里可以利用这一点,使用
sel<>ect
进行绕过(本题有用)
现在进行分割,注意分割时候order
不要分割为了or<>der
因为这样又会引入or
,现在我们输入ord<>er by x
进行尝试,发现最多到order by 3
就停止了,这说明这个表只有3列。现在我们就需要找出具体的flag位置,这就涉及到对mysql数据库结构的了解。
查找flag
MYSQL数据库
Mysql数据库里面有一个数据库叫information_schema,这个数据库中很多有用的信息都存在这个里面
- schemata表里面存储了不同数据库的信息,如下所示:
- tables表里面存储着每个数据库中包含的所有的表的信息,如下所示:
- columns表里面存储着每个数据库中列的信息,如下所示:
查看数据库信息
知道这些东西之后,我们现在要找flag,我认为flag多半是在这个数据库里面,首先我们查看一下当先数据库的名称,因为已知查询到的数据是3列,现在我们要计算,输出在前端的到底是哪一列的数据,这里我们构造一个payload为?id=1 un<>ion sel<>ect 1,2,3
,发现输出的有2,那么可以肯定输出在前端的就是第二列。
现在我们想要知道这个表在哪个数据库,所以就可以构造一个payload为?id=1 un<>ion sel<>ect 1,database(),3
,得到前端的返回结果为
现在我们就要查找这个sqli数据库中存在哪些表,在前面我们说过,表的信息存在tables中,所以这里构造一个payload为?id=1 un<>ion sel<>ect 1,table_name,3 from information_schema.tables whe<>re table_schema='sqli'
,然后可以得到该数据库中有两张表,一个是info,一个是users
现在我们分别查一下这两个表里面都有哪些列,信息从columns里面查到,这时候我们可以构造payload为?id=1 un<>ion sel<>ect 1,column_name,3 from information_schema.columns where table_schema='sqli' an<>d table_name='users'
和?id=1 un<>ion sel<>ect 1,column_name,3 from information_schema.columns where table_schema='sqli' an<>d table_name='info'
,分别如下所示:
找到flag
好吧看了一下列名称,竟然都有flag这个东西,那只能一个表一个表找了,首先找一下第一个表users
,这时候我们可以构造payload为?id=1 un<>ion sel<>ect 1,flag_9c861b688330,3 fr<>om users
,但是发现并出不来任何东西。。感到疑惑,好吧那就试下一个构造payload为?id=1 un<>ion sel<>ect 1,flAg_T5ZNdrm,3 fr<>om info
,这时候出来结果了,如下所示:
然后复制这个flag交差,就ok啦!
感想
这是第一次做sql注入的题,虽然这个题比较简单,但是总的来说我还是学到了不少东西的,比如Mysql数据库中的表结构和sql注入的绕过等,我觉得还是很有教育意义的。
一道简单的SQL注入题的更多相关文章
- 实验吧_简单的sql注入_1、2、3
简单的sql注入1 看着这个简单的界面,一时间没有特别好的思路,先输入一个1',发生了报错 初步猜测这是一个字符型的注入,他将我们输入的语句直接当成sql语句执行了,按题目的意思后面肯定过滤了很多注入 ...
- 【实验吧】CTF_Web_简单的SQL注入之3
实验吧第二题 who are you? 很有意思,过两天好好分析写一下.简单的SQL注入之3也很有意思,适合做手工练习,详细分析见下. http://ctf5.shiyanbar.com/web/in ...
- 实验吧简单的sql注入3
今天早上起来发现有人评论说我没更新实验吧sql注入3,主要是因为前段时间都去做bugku去了 但是重做这道题发现以前的姿势不行了,exp()报错不再溢出,现在不能用这个姿势,所以这里重新整理了一遍思路 ...
- 【实验吧】CTF_Web_简单的SQL注入之1
题目链接:http://ctf5.shiyanbar.com/423/web/ 简单的SQL注入之1,比2,3都简单一些.利用2 的查询语句也可以实现:1'/**/union/**/select/** ...
- 简单的SQL注入学习
引贴: http://blog.163.com/lucia_gagaga/blog/static/26476801920168184648754/ 首先需要编写一个php页面,讲php页面放入/opt ...
- 实验吧之【简单的sql注入 1、2、3】
实验吧的三道sql注入(感觉实验吧大部分web都是注入) 简单的SQL注入 地址:http://ctf5.shiyanbar.com/423/web/ 这道题也是sql注入,输入1,页面显示正常,输出 ...
- 实验吧简单的SQL注入1,简单的SQL注入
接上面一篇博客. 实验吧简单的sql注入1 题目连接 http://ctf5.shiyanbar.com/423/web/ 同样,直接输入 1加个但引号,结果下面有返回错误, ...
- union注入的几道ctf题,实验吧简单的sql注入1,2,这个看起来有点简单和bugku的成绩单
这几天在做CTF当中遇到了几次sql注入都是union,写篇博客记录学习一下. 首先推荐一篇文章“https://blog.csdn.net/Litbai_zhang/article/details/ ...
- 一道简单的CTF登录题题解
一.解题感受 这道题50分,在实验吧练习场算比较高分,而且通过率只有14%,比较低的水平. 看到这两个数据,一开始就心生惬意,实在不应该呀! 也是因为心态原因,在发现test.php之后,自以为在SQ ...
随机推荐
- Android 文章合集 200+ 篇
code小生 一个专注大前端领域的技术平台 公众号回复Android加入安卓技术群 镇楼 2017 文章合集 2017 年度文章分类整理 下面是 2018 年公众号所发表的文章分类整理 面经 一年经验 ...
- JVM tomcat 性能调优
1,新建web 测试项目并且发布到Tomcat,访问路径:http://127.0.0.1:8080/JvmWeb/index @WebServlet("/index") publ ...
- python之xlrd和xlwt模块读写excel使用详解
一.xlrd模块和xlwt模块是什么 xlrd模块是python第三方工具包,用于读取excel中的数据: xlwt模块是python第三方工具包,用于往excel中写入数据: 二 ...
- ScrollViewer - 可用鼠标拖动滚动的列表框
ScrollViewer添加附加属性: using System; using System.Collections.Generic; using System.Windows; using Syst ...
- Xcode - 添加文档注释插件
Xcode自动添加文档注释插件: https://github.com/onevcat/VVDocumenter-Xcode 功能演示: 感谢onevcat的分享!
- Light of future-凡事预则立
目录 1.冲刺的时间计划安排 2.针对上一次作业同学.助教提出的问题的回答 3.针对前几次作业的不足的地方进行思考和总结 4.需要改进的团队分工 5.团队的代码规范 6.Github仓库链接 归属班级 ...
- 将本地项目关联到git上面
1.github上面创建新项目 2.初始化项目-------------可忽略 首先加入git提交忽略的文件.gitignore文件 .idea 忽略以.idea文件logs/ 忽略logs文件夹* ...
- springboot 切面添加日志功能
1.新建一个springboot项目 2.定义个切面类,并指定切入点,获取所需记录信息(如:访问人IP, 访问地址,访问地址名称等) 3.新建数据库 SET FOREIGN_KEY_CHECKS=0; ...
- 使用 Spring data redis 结合 Spring cache 缓存数据配置
使用 JavaConfig 方式配置 依赖 jar 包: jedis.spring-data-redis 首先需要进行 Redis 相关配置 @Configuration public class R ...
- Git-flow 使用笔记
git-flow 原理:A successful Git branching model,两篇不错的中文翻译: Git开发管理之道,一个成功的Git分支模型. 简单来说,git-flow 就是在 gi ...