这是我真正意义上来说做的第一道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 xxxrlike 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注入题的更多相关文章

  1. 实验吧_简单的sql注入_1、2、3

    简单的sql注入1 看着这个简单的界面,一时间没有特别好的思路,先输入一个1',发生了报错 初步猜测这是一个字符型的注入,他将我们输入的语句直接当成sql语句执行了,按题目的意思后面肯定过滤了很多注入 ...

  2. 【实验吧】CTF_Web_简单的SQL注入之3

    实验吧第二题 who are you? 很有意思,过两天好好分析写一下.简单的SQL注入之3也很有意思,适合做手工练习,详细分析见下. http://ctf5.shiyanbar.com/web/in ...

  3. 实验吧简单的sql注入3

    今天早上起来发现有人评论说我没更新实验吧sql注入3,主要是因为前段时间都去做bugku去了 但是重做这道题发现以前的姿势不行了,exp()报错不再溢出,现在不能用这个姿势,所以这里重新整理了一遍思路 ...

  4. 【实验吧】CTF_Web_简单的SQL注入之1

    题目链接:http://ctf5.shiyanbar.com/423/web/ 简单的SQL注入之1,比2,3都简单一些.利用2 的查询语句也可以实现:1'/**/union/**/select/** ...

  5. 简单的SQL注入学习

    引贴: http://blog.163.com/lucia_gagaga/blog/static/26476801920168184648754/ 首先需要编写一个php页面,讲php页面放入/opt ...

  6. 实验吧之【简单的sql注入 1、2、3】

    实验吧的三道sql注入(感觉实验吧大部分web都是注入) 简单的SQL注入 地址:http://ctf5.shiyanbar.com/423/web/ 这道题也是sql注入,输入1,页面显示正常,输出 ...

  7. 实验吧简单的SQL注入1,简单的SQL注入

    接上面一篇博客. 实验吧简单的sql注入1 题目连接   http://ctf5.shiyanbar.com/423/web/ 同样,直接输入 1加个但引号,结果下面有返回错误,            ...

  8. union注入的几道ctf题,实验吧简单的sql注入1,2,这个看起来有点简单和bugku的成绩单

    这几天在做CTF当中遇到了几次sql注入都是union,写篇博客记录学习一下. 首先推荐一篇文章“https://blog.csdn.net/Litbai_zhang/article/details/ ...

  9. 一道简单的CTF登录题题解

    一.解题感受 这道题50分,在实验吧练习场算比较高分,而且通过率只有14%,比较低的水平. 看到这两个数据,一开始就心生惬意,实在不应该呀! 也是因为心态原因,在发现test.php之后,自以为在SQ ...

随机推荐

  1. 使用toString()检测对象类型

    可以通过toString() 来获取每个对象的类型.为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.call() 或 ...

  2. windows常用系统命令

    dir指定要列出的驱动器.目录和/或文件 显示当前路径下的所有文件的绝对路径,包含子文件夹中的内容 dir /b / s /o:n /a:a /b 表示去除摘要信息,且顶格显示完整路径 /s 表示枚举 ...

  3. 关于用命令行和idea对项目打jar包

    前提说一下,我们一般是对编译后的项目进行打包,不然打包后还得自己去重新编译class文件. 假如这是你的一个项目目录: 我们要写一个简单的计算器工具类项目,然后对他进行打包, idea里面out文件夹 ...

  4. CocoaPods 安装卸载

    建议升级10.15的系统,什么都装好了 sudo gem install cocoapods pod setup搞定不能有search命令,可以pod init,下载用的是cdn,打开项目正常使用 问 ...

  5. thinkphp5.1中使用链式操作的坑

    1.在进行tp5->tp5.1的时候,没有想太多,直接使用之前的代码:结果在该操作中,多次调用该get方法,tp5.1的链式操作一直保持了之前的搜索条件,截图如下:(具体的代码没有展示) 2.然 ...

  6. wireshark一开,无线网络就断开

    最近在研究wireshark 笔记本连着wifi,开始抓包后,无线网就断了 查了半天,需要把捕获-->选项里的监控模式去掉就行了

  7. Java8 学习笔记--函数式接口

    通过之前的函数式接口与lambda表达式的关系那篇文章,大家应该对函数式接口有了一定的了解了,在Java中它是lambda表达式的基础,没有函数式接口就没有办法使用lambda表达式. 函数式接口如此 ...

  8. 基于 HTML5 WebGL 的 水泥工厂可视化系统

    前言 如今的制造行业,基于数据进行生产策略制定与管理已经成为一种趋势,特别是 工业4.0 的浪潮下,数据战略已经成为很多制造企业的优先战略,而数据可视化以更直观的方式,帮助指导决策,成为数据分析传递信 ...

  9. C语言 文件操作(一)

    #include<stdio.h> int main(){          FILE *fp = fopen("f:\\lanyue.txt","r&quo ...

  10. redis 练习 a的数据库数据迁移到b数据库

    思路 1.从a redis中获取所有的key 2.判断key的类型 3.根据key的类型,判断使用的是set/hset类型 4.set到b redis中(写入到b redis中)