本人小白,刚刚入门,可能技术含量真的很低,但一定好好写,欢迎各位大佬的指点
我觉得先假设个例子吧
最简单的就是一个通过出版商查书名的业务了,给我们输入的地方是我们填一个出版商 比如我们填 steve 那么执行
SELECT author FROM book WHERE publisher= 'steve' and published =1
从 book 表中第一行提取每条publisher 列为 steve 值的记录 通过html表返回给浏览器
但是如果我输入一个
' or 1=1--
那么执行就变成
SELECT author FROM book WHERE publisher= '' or 1=1--' and published =1
–后被注释掉了,那么就相当于
SELECT author FROM book WHERE publisher= '' or 1=1
因此就可以把这个book表单中每一行中author的记录都返回来了,由于攻击者还把published=1 注释掉了,那么攻击者就越权访问了每一行
还是通过例子来说
一个正常的业务让用户自我注册让他们指定自己的用户名和密码
INSERT INTO USERS (username,password ,id,privs)VALUES ( 'qwe','admin',2248,1)
假设username和password字段存在sql注入漏洞
那么攻击者可以在表中插入任何数据以及他们的id 和privs(代表权限1是正常用户,0是管理员用户)
在填username的时候如果我们这么填
admin','admin',9999,0)--
那么到sql处理的时候就变成了
INSERT INTO USERS (username,password ,id,privs)VALUES ( 'qwe','admin',9999,0)--qwe','admin',2248,1)
–后被注释掉了相当于执行了
INSERT INTO USERS (username,password ,id,privs)VALUES ( 'qwe','admin',9999,0)
那么相当于攻击者创建了一个id为9999和权限为管理员的账户
这里值得注意一下的是因为攻击者不知到总共有几个参数注入的时候就要试
以上面那个为例
需要试
qwe',1)--
qwe',1,1)--
qwe',1,1,1)--
...............此处省略
比如一个更换密码的业务
UPDATE users SET password='newsecret' WHERE user ='qwe' and password='secret'
这个需要你输入用户名 和旧密码和新密码
如果你的用户名输入的是
admin'--
那么你就不需要知道管理员的密码就把管理员的密码给篡改了
举个例子删除 person表中姓为wilson的记录
DELETE FROM Person WHERE LastName = 'Wilson'
给你的输入是lastname字段,如果输入的不是wilson而是
'or 1=1--
那么就相当于把整个person 表中所有的记录都删去了