servlet SQL注入的java审计

刚入门学习java审计,注定要走很多弯路,但希望能坚持下来从容易到难,一步步的成长。

这篇文章是基于panda 师傅的文章来学习的,
https://xz.aliyun.com/t/6872?accounttraceid=80830b9ba7504847b13dec404f34658aspsf

servlet搭建文章
https://blog.****.net/weixin_41598660/article/details/108659980


环境搭建

首先要把servlet的sql注入项目导入idea,sql 测试源码:
https://github.com/cn-panda/JavaCodeAudit
启动mysql添加数据库和对应的数据,直接把数据库语句复制到sql编译器执行就能完成添加。
servlet SQL注入的java审计

然后在Userinfodaoimpl文件中修改本地数据库的账号连接密码。
servlet SQL注入的java审计

然后根据servlet的javaweb搭建思路导入sql注入测试的源码即可。(中间出现了很多错误,也是搞了好长时间才解决)
数据库文件和servlet项目导入配置好后,就可以来进行的简单java审计的学习了。
servlet SQL注入的java审计


开始简单的审计

  • SQL语句有Select、Insert、Update和Delete四种类型,注入也是对这四种基本操作的拼接产生的

1.利用fortify工具对sql注入测试源码进行扫描,发现提示Userinfodaoimpl代码中的24行有注入。
链接:https://pan.baidu.com/s/1gweBr2GRztnvEtoYmPH0uw
提取码:bjle (如果fortify**版工具链接过期了,可以留个言,我私发。)
servlet SQL注入的java审计

2.我可以看到24行代码中的sql是一条数据库查询语句,如果id没有进行过滤,那么就可能存在注入。
servlet SQL注入的java审计

String sql = "select * from userinfo where id = " + id;这条语句中的id主要是是Userinfofounddao()方法中的参数,这个方法是在userInfoDaoImpl这个类里边,所以我要去查这个userInfoDaoImpl类在哪被用过,idea功能里边,ctrl+b就能查询类被谁使用过。可以看到,这个类在userinfoserviceimpl中的15行被new过,继续往下跟踪。
servlet SQL注入的java审计

跳到userinfoserviceimpl.java这个文件后 可以看到UserInfoDao ui = new UserInfoDaoImpl(); 这是一个多态语句,Userinfodaoimpl()在这里被使用了,并且这里定义了userinfofoundservice方法用来返回参数,所以我要继续看Userinfoserviceimpl在哪被引用了
servlet SQL注入的java审计

对该类进行跟踪,发现在infoServlet.java
servlet SQL注入的java审计

跳转到infoservlet.java文件后发现这是个servlet定义get和post方法的文件,看到这里,就可以去构造payload了
servlet SQL注入的java审计

然后根据servlet输入流的过程,进行payload的构造,看看这个InfoServlet.java文件在web.xml中的目录映射关系,对位到/info目录,漏洞是因为id参数get请求拼接到数据库语句中,
payload:
127.0.0.1/tomcat中javaweb映射的地址/info?id=1 and 1=2 union select 1,2,3,4,database()
servlet SQL注入的java审计

servlet SQL注入的java审计

servlet SQL注入的java审计