注入条件:
只有调用数据库的动态页面才有可有存在注入漏洞,动态页面包括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)程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中 这句话是怎么理解,和上面两种情况有关系吗?问题有点多,先谢过大家。希望得到解答,或者给些相关参考资料,谢谢!

解决方案 »

  1.   

    有可能不等于一定会。
    如果用PreparedStatement处理SQL语句,即使没有进行过滤,也不会成功注入。
      

  2.   

    由于msgId = Integer.parseInt(request.getParameter("messageID"));中的Integer.parseInt已经出现异常
      

  3.   

    ls是对的,因为这样的mid是个int型,但是加上and 1=1就是个字符串了,所以tomcat会报错的,还有一些登录有可能有问题,就是密码你加入 or 1=1,如果没有做入库的特殊处理就会有问题了
      

  4.   

    楼主的问题ls已经给解决了啊jsp应该自己调试一下祝楼主好运
      

  5.   

    大家再给我个机会 我分数不多了 哈哈哈。这个我没看懂!我还想问下 那asp可以成功 能不能结合 下面两句 给我稍微讲下成功的原因?
    1 只有调用数据库的动态页面才有可有存在注入漏洞
    2 程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中,这样,我们就可以提交具有数据查询功能的语句,加入到程序将要提交的信息中去最后 我坚信大家不是充分数来的 帮帮忙啦!!!
      

  6.   

    1.感觉跟调用不调用数据库无关,你如果一个页面传了一个带漏掉的参数过去,然后这个页面再将参数传给其他的页面或servlet做进一步处理,一样会出现这个问题
    2.一般在查询前都要对传入参数做校验是否合法的,
    你所说的ASP能够成功那是因为他直接将传入的参数附到SQL上了 然后传参查询
    你这里完全不同 你使用findById 就要求传入一个整数,你要做转型 这个地方相当于做了一步校验 必须为整数
    但如果你不做这一步呢 直接把参数附加到sql 直接用jdbc的statement查询试试
      

  7.   

    感谢 zhouyuqwert 你的回答让我了解很多 谢谢!
    感谢各位!