sql注入-技巧

1、union联合注入

如果sql语句是select结构,可以尝试联合注入获取信息。

(1)order by n确认查询字段数,n从1开始递增,只有当n等于当前select查询字段数才正常执行sql语句

(2)union select 1,2,3...n,默认查询,确认有输出前端的字段。

  • 如果确定是单查询,那么需要将union前的条件置为false
  • 如果响应不包含union后的查询,那么推测是单查询,需要将union前的条件置为false

(3)union select version(),user(),database(),查询基本信息

(4)查询具体的数据库表数据

2、布尔盲注

如果无法直接输出查询数据到前端,但是根据条件的不同会有其它不同的状态输出,那么可以进行布尔盲注,利用响应中的反应进行判断。

对于获取的信息,可以作为一个字符串,进行逐字符判断,从而获取整体内容。

3、时间盲注

与布尔盲注原理基本一致,区别在于不是根据响应内容判断,而是根据响应的时间进行判断。

主要利用if函数和sleep函数

4、错误注入

如果服务端将sql应用执行sql语句的sql异常输出到前端,可以利用updatexml等函数输出信息

5、堆栈注入

对于sql语句,通过;关闭当前语句,然后在其后另写sql语句执行。

注意这种方法,后者的sql语句一般不会输出影响前端,所以并不写入select语句。

6、其他

6.1 二次注入

如果某处存在sql注入漏洞,但是因为防护墙等因素无法在该sql语句中写入敏感字符或关键字。而在另外一处可以将敏感字符或关键字写入保存到数据库中,同时在存在sql注入处,有读取保存的数据作为变量使用,因此结合利用。

$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

6.2 宽字节注入

一般,网站程序和mysql都是统一使用utf-8编码,不会出现宽字节注入。

但是如果两者不一致,那么就有可能在网站程序中检查输入是作为宽字节被允许,但是数据库中是单字节编码,造成被允许的宽字节字符拆分成多个单字节字符,就有可能在sql语句中突然出现单引号、双引号、空格等敏感字符

posted @ 2023-04-16 02:28  挖洞404  阅读(94)  评论(0编辑  收藏  举报