初学者掌握手工注入的过程: (1)判断是否存在注入点 //(URL,POST表单,HTTP头部字段......) (2)判断字段长度(字段数) //(有可能保存在后台数据库某一个表当中,表当中的某一个或几个字段) (3)判断字段回显位置 // (4)判断数据库信息 (5)查找数据库名 (6)查找数据库表 (7)查找数据库表中所有字段以及字段值 (8)猜解账号密码 (9)登录管理员后台 (1)判断是否存在注入点 以SQLI-LABS第一关为例: 正常登录 URL后添加?id=1',回显错误,判断可能存在SQL注入漏洞, 进一步判断 添加
Less-2(GET-Errorbased-Intigerbased)打开Less-2页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式传入一个数值。确定注入点注入语句:?id=1。可以看出传入id=1可以正常回显,那么试一下?id=1',发现在引号附近产生了歧义导致报错,并且可以看出这条SQL语句是不用引号闭合的。接着尝试注入语句?id=1and1=1--+和?id=1and1=2--+,发现注入第一条语句时正常回显,注入第二条语句时没有回显,由此判断存在注入点。判断数据表列数通过order
Less-2(GET-Errorbased-Intigerbased)打开Less-2页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式传入一个数值。确定注入点注入语句:?id=1。可以看出传入id=1可以正常回显,那么试一下?id=1',发现在引号附近产生了歧义导致报错,并且可以看出这条SQL语句是不用引号闭合的。接着尝试注入语句?id=1and1=1--+和?id=1and1=2--+,发现注入第一条语句时正常回显,注入第二条语句时没有回显,由此判断存在注入点。判断数据表列数通过order
Less-3(GET-Errorbased-Singlequoteswithtwist-string)打开Less-3页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式传入一个数值。确定注入点注入语句:?id=1。可以看出传入id=1可以正常回显,那么试一下?id=1',发现在引号附近产生了歧义导致报错。并且从上图报错中可以看出这条SQL语句的闭合方式为'),那么使用注入语句:?id=1')--+,看看是否能够正常闭合并注释,从下图看出是没有问题的。接着尝试注入语句?id=1')and1=1-
Less-3(GET-Errorbased-Singlequoteswithtwist-string)打开Less-3页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式传入一个数值。确定注入点注入语句:?id=1。可以看出传入id=1可以正常回显,那么试一下?id=1',发现在引号附近产生了歧义导致报错。并且从上图报错中可以看出这条SQL语句的闭合方式为'),那么使用注入语句:?id=1')--+,看看是否能够正常闭合并注释,从下图看出是没有问题的。接着尝试注入语句?id=1')and1=1-
Less-5(GET-Doubleinjection-SingleQuotes-String)打开Less-5页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式传入一个数值。确定注入点注入语句:?id=1。从上图可以看出传入id=1并没有回显查询结果,接着试一下?id=1',发现在引号附近产生歧义导致了报错。并且通过报错信息可以看出闭合SQL语句时用的是单引号。由于这里不回显查询结果,但是依然会显示报错信息,那么就不使用联合注入,而选择报错注入。使用注入语句:?id=1'--+看看是否能够正常
Less-5(GET-Doubleinjection-SingleQuotes-String)打开Less-5页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式传入一个数值。确定注入点注入语句:?id=1。从上图可以看出传入id=1并没有回显查询结果,接着试一下?id=1',发现在引号附近产生歧义导致了报错。并且通过报错信息可以看出闭合SQL语句时用的是单引号。由于这里不回显查询结果,但是依然会显示报错信息,那么就不使用联合注入,而选择报错注入。使用注入语句:?id=1'--+看看是否能够正常
Less-4(GET-Errorbased-DoubleQuotes-string)打开Less-4页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式传入一个数值。确定注入点注入语句:?id=1。可以看出传入id=1可以正常回显,那么试一下?id=1',发现也是可以正常回显的。接着尝试拼接?id=1",发现在双引号附近产生歧义导致了报错。并且从上图报错中可以看出这条SQL语句的闭合方式为"),那么使用注入语句:?id=1")--+,看看是否能够正常闭合并注释,从下图看出是没有问题的。接着尝试注
Less-4(GET-Errorbased-DoubleQuotes-string)打开Less-4页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式传入一个数值。确定注入点注入语句:?id=1。可以看出传入id=1可以正常回显,那么试一下?id=1',发现也是可以正常回显的。接着尝试拼接?id=1",发现在双引号附近产生歧义导致了报错。并且从上图报错中可以看出这条SQL语句的闭合方式为"),那么使用注入语句:?id=1")--+,看看是否能够正常闭合并注释,从下图看出是没有问题的。接着尝试注
Less-1(GET-Error-Singlequotes-String)打开Less-1页面,可以看到页面中间有一句PleaseinputtheIDasparameterwithnumericvalue,那么先使用ID这个参数通过GET方式传入一个数值。确定注入点通过传入id=1看到页面上查询结果是有回显的,接着尝试一下?id=1'可以看到页面报错了,说明id=1'导致SQL语句产生了歧义。通过报错信息可以看出闭合SQL语句时用的是单引号。关于在HTTP请求中的注释问题:在浏览器的GET请求中,URL中#号是用来指导浏览器动作的(例如锚点),对服务器端无用。所以,HTTP请求中不包括#,因此