注入条件:
只有调用数据库的动态页面才有可有存在注入漏洞,动态页面包括asp php jsp cgi等注入原理:
程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中,这样,我们就可以提交具有数据查询功能的语句,加入到程序将要提交的信息中去,再根据服务器返回的信息来判断数据库内容。我的实践:
我对以上两段段话不是很理解 我希望大家帮我解释下 比如我举个例子:
我用啊D扫了个有漏洞的站。asp的 然后用 and 1=1 检查该站是否可以检测。然后成功了。但我学过jsp 我这儿有个简单的jsp网页(用DAO模型写的)然后我想在虚拟机做注入实验 但用and 1=1来检查是否可以注入,不成功。
http://192.168.25.129:8080/company/revertMessage.jsp?messageID=6
在以上网址(messageID为int型)我在后面加 and 1=1
tomcat错误:
//下面代码大概意思是从数据库取出数据
msgId = Integer.parseInt(request.getParameter("messageID"));
MessageDAOImpl mdao = new MessageDAOImpl();
Message msg = mdao.findById(msgId);
RevertDAOImpl rdao = new RevertDAOImpl();我的问题是:
1)为什么我在asp页面下成功了 在jsp下失败了。是因为传值方法问题吗?
2)只有调用数据库的动态页面才有可有存在注入漏洞 这句话能解释下吗?
3)程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中 这句话是怎么理解,和上面两种情况有关系吗?问题有点多,先谢过大家。希望得到解答,或者给些相关参考资料,谢谢!
只有调用数据库的动态页面才有可有存在注入漏洞,动态页面包括asp php jsp cgi等注入原理:
程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中,这样,我们就可以提交具有数据查询功能的语句,加入到程序将要提交的信息中去,再根据服务器返回的信息来判断数据库内容。我的实践:
我对以上两段段话不是很理解 我希望大家帮我解释下 比如我举个例子:
我用啊D扫了个有漏洞的站。asp的 然后用 and 1=1 检查该站是否可以检测。然后成功了。但我学过jsp 我这儿有个简单的jsp网页(用DAO模型写的)然后我想在虚拟机做注入实验 但用and 1=1来检查是否可以注入,不成功。
http://192.168.25.129:8080/company/revertMessage.jsp?messageID=6
在以上网址(messageID为int型)我在后面加 and 1=1
tomcat错误:
//下面代码大概意思是从数据库取出数据
msgId = Integer.parseInt(request.getParameter("messageID"));
MessageDAOImpl mdao = new MessageDAOImpl();
Message msg = mdao.findById(msgId);
RevertDAOImpl rdao = new RevertDAOImpl();我的问题是:
1)为什么我在asp页面下成功了 在jsp下失败了。是因为传值方法问题吗?
2)只有调用数据库的动态页面才有可有存在注入漏洞 这句话能解释下吗?
3)程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中 这句话是怎么理解,和上面两种情况有关系吗?问题有点多,先谢过大家。希望得到解答,或者给些相关参考资料,谢谢!
如果用PreparedStatement处理SQL语句,即使没有进行过滤,也不会成功注入。
1 只有调用数据库的动态页面才有可有存在注入漏洞
2 程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中,这样,我们就可以提交具有数据查询功能的语句,加入到程序将要提交的信息中去最后 我坚信大家不是充分数来的 帮帮忙啦!!!
2.一般在查询前都要对传入参数做校验是否合法的,
你所说的ASP能够成功那是因为他直接将传入的参数附到SQL上了 然后传参查询
你这里完全不同 你使用findById 就要求传入一个整数,你要做转型 这个地方相当于做了一步校验 必须为整数
但如果你不做这一步呢 直接把参数附加到sql 直接用jdbc的statement查询试试
感谢各位!