一.[极客大挑战 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语句中逻辑运算符的优先级(=
优先于AND
,AND
优先于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!