SQL注入在国内CTF比赛中的地位特别高,基本上是每次比赛的必出题。有时候还不只一道题,一道题也不只有一个数据库,可能是与SSRF、XSS等漏洞配合出题等,这时候就需要我们根据不同的环境随机应变。在这里,我们主要介绍基于MySQL的注入。

我们假设你已经有一定的SQL基础,熟悉常见的增(insert)删(delete)改(update)查(select)语句,了解常见的查询(比如联合查询、连接查询等),知道基本的数据库的权限控制,并了解PHP的基本语法和常见的参数传递方法(如GET、POST等)。

 

什么是SQL注入

首先简单介绍一下SQL注入的成因。开发人员在开发过程中,直接将URL中的参数、HTTP Body中的Post参数或其他外来的用户输入(如Cookies,UserAgent等)与SQL语句进行并接,造成待执行的SQL语句可控,从而使我们可以执行任意SQL语句。

了解SQL注入的成因之后,我们再来简要介绍下常见SQL注入的分类,具体如下。

1.可回显的注入
  可以联合查询的注入
  报错注入
  通过注入进行DNS请求,从而达到可回显的目的

2.不可回显的注入
  Bool盲注
  时间盲注

3.二次注入


通常作为一种业务逻辑较为复杂的题目出现,一般而要自己编写脚本以实现自动化注入。

SQL注入在CTF比赛中十分常见,各种数据库。一般的CTF比赛中,出题人都会变相地增加一层WAF(比如,对关键字进行过滤等),然后只留下一个思路的解题路径,这时候我们需要快速找到并绕过这个点,然后得到flag。