绕过来绕过去,还是躲不掉查询
查询的账号不要给root账号,也不要轻易给权限,依我个人理解一网站一数据库一账号较为稳妥
知识回顾,预备:
- 单行注释
#这是个单行注释
-- 这也是个单行注释
- 数据库里的infomation_schema是什么?
里面存着你数据库所有信息
schemate表记录着数据库的名称
table记录着表名
columns记录着对应的列名,后面的table_schema记录着数据库名,table_name为表名
在SQLi-labs了解SQL注入
Less-1
注意到这里是直接用GET的传输方式,我们可以清楚的看到传了一个叫id为1的数据
我们也可以就浏览器的开发者工具查看传了什么数据
是的,就是id为1的数据
我们不妨给id加点菜 ( ̄y▽, ̄)╭
加个点会发生什么呢?
欸?报错了?
看看报错语句,原来是点重复了,可以判定这个id传的数据周围可能有两个点
给这个id再加点菜
成了,竟然没有报错
我们不妨看看此时id传输了什么
这时候传了个叫1’ and ‘1’='1的id.
我相信学过编程的同学可能会心一笑了,没学过编程的和还是不清楚的同学也不要着急
我们现在不妨看看源代码
我我们注意到 $sql 后面的语句
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
是的,我们的id就是交给数据库来处理的
id里面是什么,只要没有字符审查的,他可管不了这么多了,直接填进去就完事了
我们给这个代码改一下
echo $sql;
我们再刷新下网页
此时sql语句就在显示出来了
SELECT * FROM users WHERE id='1' and '1'='1' LIMIT 0,1
我们直接去后台数据库管理界面会输出什么吧
诶,正好和网页对上了
通过上面操作,是不是有点明白数据库注入是什么了呢?
如果没有严格的字符审查机制,那么就很容易改动我们写好的数据库语句.
你可能会说,这个有啥好可怕的呢?这你也只是查了单个数据库里的语句啊
不要着急,这只是开胃小菜.