“ 腰疼,脖子疼”
最近闲着没事,弄了几十套源码下来玩。资产都是满足cnvd要求的(懂得都懂,想要的尽快),定个小目标,二十四套源码,一半得拿shell啊,最次也得挖个注入吧。从黑盒,白盒,两个方面来看,还能让你有更多的攻击方向,以后去单纯挖黑盒,也有更多的操作空间。
漏洞表
漏洞审计
01
02
任意文件下载
03
sql注入,dba权限
野路子出生的我,其实更喜欢直接找危险函数的,结果搜了一遍危险函数,寥寥无几,就慢慢看传参,经过了哪些代码。
01
—
先来一个简简单单的反射xss,有存储xss的,但是我为啥不写存储xss,emmm我也不知道,可能就是想写反射的
存储xss证明
备注里直接填就好,没啥意思。
我们还是来看反射xss。
直接return了mav
"></li><script>alert(1)</script>
payload随便写
对于反射xss这种,之后不继续关注啦,大致就是输入,然后show
02
—
任意文件下载
截图字小?我给你们复制出来。有想自己审的,也可以自己看看代码
@RequestMapping({"/download"})
public void fileDownload(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
String fileNameStr = request.getParameter("fileName");
String fileNameUtf = null;
String fileName = null;
try {
fileNameUtf = URLDecoder.decode(fileNameStr, "UTF-8");
fileName = URLEncoder.encode(fileNameUtf, "UTF-8");
fileName = new String(fileNameUtf.getBytes("GB2312"), "ISO_8859_1");
} catch (Exception var13) {
var13.printStackTrace();
}
String basePath = PropertiesUtils.getPara("downFileDir");
String savePath = request.getSession().getServletContext().getRealPath("/") + basePath + "/";
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
File file = new File(savePath + fileNameUtf);
try {
FileInputStream inputStream = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
byte[] buffer = new byte[1024];
boolean var12 = true;
int length;
while((length = inputStream.read(buffer)) != -1) {
out.write(buffer, 0, length);
}
inputStream.close();
out.close();
out.flush();
} catch (IOException var14) {
var14.printStackTrace();
}
}
这里先是传递一个fileName的参数
String fileNameStr = request.getParameter("fileName");
然后new file
File file = new File(savePath + fileNameUtf);
然后
FileInputStream inputStream = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
中间没有什么过滤,和限制。
03
—
多到数不清的sql注入
其实我一直觉得审计sql注入是最简单的,除非系统里自带了函数过滤啥的。
直接找xml文件即可
在xml文件里搜:${
(
value = {"/list"},
method = {RequestMethod.GET}
)
public ModelAndView list(HttpServletRequest request) {
ModelAndView mav = new ModelAndView("page/sysmanage/user/list");
Map<String, Object> params = new HashMap();
String query_username = request.getParameter("query_username");
String pid = request.getParameter("pid");
String enterId = request.getParameter("enterId");
String level = request.getParameter("currentLevel");
try {
if (!StringUtils.isNullOrEmpty(query_username)) {
query_username = URLDecoder.decode(query_username, "UTF-8");
mav.addObject("query_username", query_username);
} else {
mav.addObject("query_username", (Object)null);
}
} catch (UnsupportedEncodingException var16) {
var16.printStackTrace();
}
int count = false;
if (!StringUtils.isNullOrEmpty(query_username)) {
params.put("username_fuzzy", query_username);
}
然后直接找功能点即可,找了好半天,然后抓包看一下,我敲。。还不如手动直接测
http://xxx.xx.xxx.xx/index.do?query_rolename=1*
dba权限
(可能注入这里代码和截图的点对不上,注入太多了,而且大多都一样,混一混总能过去的)
审计代码的菜鸡,不是专业队员。审完代码,交了两个cnvd,写完公众号,回头一看天亮了,我果然是菜鸡,这歌挺好听的。
---------------------
---------------------
欢迎关注公众号:虚拟尽头
师傅们,聊天框发送"二维码",加我好友一起交流呀(加的时候请备注来自公众号)。
原文始发于微信公众号(虚拟尽头):记java代码审计(1)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论