WEB学习笔记之SQL注入实战题解(来自buuctf)

一.[极客大挑战 2019]EasySQL 1

打开页面是一个登录界面,第一时间猜测是一道sql注入题目

1. 判断注入点

  • 观察页面:首先,观察Web应用程序的页面,特别是那些与数据库交互的页面,如登录表单、搜索栏等。
  • 输入测试数据:在输入框中输入一些特殊字符,如单引号(')、双引号(")、注释符(--、#)等,观察应用程序的反应。如果页面报错,且报错信息中包含SQL语法错误或未闭合的引号等,则可能是SQL注入点。

2.判断sql注入类型

  • 数字型注入:如果输入的数据被当作数字处理,且不需要引号闭合,那么可能是数字型注入。
  • 字符型注入:如果输入的数据被当作字符串处理,并且需要用引号闭合,那么可能是字符型注入。

3.判断闭合方式

先假设sql语句闭合方式为单引号闭合

则可以理解一下sql语句的组成:SELECT*FROM table_name WHERE username='' and password='';

首先username输入1'进行判断,由于第一个单引号和1后面的单引号进行闭合,所以结果显示语句错误,初步判断假设成立。

后假设sql语句闭合方式为双引号闭合

则可以理解一下sql语句的组成:SELECT*FROM table_name WHERE username="" and password="";

首先username输入1'进行判断,若语句为SELECT*FROM table_name WHERE username="" and password="1'";不会显示报错,所以闭合方式为单引号闭合。

4.尝试万能密码登录(or 1=1#)

首先学习一下sql语句逻辑运算符的优先级,由于SQL语句中逻辑运算符的优先级(=优先于ANDAND优先于OR),以及字符串拼接的特性,上述SQL语句实际上会被解析为两部分:

SELECT*FROM table_name WHERE username='用户名' and password='1'

or 1=1#';

其中,1=1恒为真。由于OR运算符的两侧只要有一侧为真,整个表达式就为真,因此整个查询条件就恒为真。这导致无论用户名是什么,只要密码是万能密码,用户都能通过验证。

输入后成功获取flag,但很多题目中往往用万能密码行不通,所以最好还是学习一下手动注入或利用sqlmap进行自动注入。

二.[极客大挑战 2019]BabySQL1

1.利用之前的判断方法得出闭合方式为单引号闭合

2.先利用万能密码试着解题

输入1' or 1=1#后发现or不见了,初步判断or被过滤了,接下来有两个方向,一个是绕过or,一个是进行联合查询注入

3.绕过关键词

当利用大小写进行绕过时发现无法绕过,说明他可能对大小写进行了自动转换 ,也可能进行了过滤,利用or双写进行绕过,即:1' oorr 1=1#,可成功获取flag,证明他是过滤的关键词,执行语句时会给输入的关键字过滤掉

成功获取flag!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值