第11节SQL注入之字符型注入攻防实战计算机网络攻击与防护第十二章实战网络攻防
目录CONTENT01什么是字符型注入02漏洞利用03漏洞防御
字符型注入与数字型注入的区别在于字符型注入一般要使用引号来闭合语言。数据库语句逻辑格式使用双引号或者单引号选择对应字符串。如果是查询用户名username,可能的格式是username=‘name’。案例:select字段1,字段2from表名whereusername=‘Alice’后端PHP代码片段:$name=$_GET[name];$query=selectid,emailfrommemberwhereusername=$name;什么是字符型注入
漏洞利用之字符型注入步骤1:打开Pikachu靶场?选择一个Firefox浏览器或者GoogleChrome浏览器,并使用它来访问Pikachu靶场的URL:/pikachu-master/vul/sqli/sqli_str.php在靶场平台网站的SQL注入栏目字符型注入页面,选择“what‘syourusername?”的窗口栏。输入payload:“1or1=1”
步骤1:打开Pikachu靶场点击查询按钮,返回结果为:“您输入的username不存在,请重新输入!”漏洞利用之字符型注入
步骤1:打开Pikachu靶场“您输入的username不存在,请重新输入!”username不存在?这是什么原因?在数字型注入案例中,修改id=1or1=1,为什么可以查询出所有用户的userid呢?漏洞利用之字符型注入
步骤1:打开Pikachu靶场我们重新而仔细的再读一遍题目,这个页面中的问题是:what‘syourusername?返回结果为:您输入的username不存在,请重新输入!username是什么?很显然数据类型是字符型(字符串),而不是userid的数字型。漏洞利用之字符型注入
步骤1:打开Pikachu靶场字符型注入中,数据库语句逻辑格式使用双引号或者单引号选择对应字符串。案例:如果没有使用引号,将会报告错误提示。mysqlselectid,emailfrommemberwhereusername=kobe;ERROR1054(42S22):Unknowncolumnkobeinwhereclause‘漏洞利用之字符型注入
步骤1:打开Pikachu靶场字符型注入中,数据库语句逻辑格式使用双引号或者单引号选择对应字符串。案例:如果使用引号,将会出现查询的结果。mysqlselectid,emailfrommemberwhereusername=kobe;漏洞利用之字符型注入
步骤2:修改payload,遍历查询在这里,我们如果还是使用payload为1or1=1将无法返回正确结果,完成攻击操作。因为,数据库语句拼接字段后,1or1=1会被当做一个字符串‘1or1=1’被解释执行,无法查询到有效的数据。SQL语句案例:mysqlselectid,emailfrommemberwhereusername=‘1or1=1’;Emptyset(0.00sec)漏洞利用之字符型注入
步骤2:修改payload,遍历查询因此,payload应该修改为:or1=1#在查询窗口中重新输入这个payload,数据库表中所有username都被遍历查询,显示结果。漏洞利用之字符型注入
步骤2:修改payload,遍历查询重新构造的SQL语句为:mysqlselectid,emailfrommemberwhereusername=or1=1#;同理,数据库表中所有username也都被遍历查询,显示结果。漏洞利用之字符型注入
漏洞利用之字符型注入之Payload分析Payload分析:Payload:or1=1#我们将Payload带入到SQL语句中,重新构造的SQL语句为:mysqlselectid,emailfrommemberwhereusername=or1=1#;在SQL语法中#是注释符,因此#之后的语句都会被注释,而不会被执行,where是判断语句,并且由or连接的,username=‘’或者1=1之中只要有一个为true。就可以符合逻辑或的条件,遍历查询,显示数据库表中所有username的结果。
通过查看sqli_str.php的代码片段。我们发现问题,一是代码没有进行合理过滤,可以拼接select语句;二是变量是字符型,需要考虑闭合问题。关键代码:$query=selectid,emailfrommemberwhere