Skip to content

Commit 1d7a3ab

Browse files
author
abel.rincon
committed
added SSRF
1 parent 3702466 commit 1d7a3ab

File tree

6 files changed

+45
-9
lines changed

6 files changed

+45
-9
lines changed

src/main/java/org/hdivsamples/controllers/DashboardController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.io.ObjectInputStream;
1010
import java.io.ObjectOutputStream;
1111
import java.io.OutputStream;
12+
import java.net.URL;
1213
import java.security.Principal;
1314
import java.util.List;
1415

@@ -23,6 +24,7 @@
2324
import org.hdivsamples.dao.CashAccountDao;
2425
import org.hdivsamples.dao.CreditAccountDao;
2526
import org.hdivsamples.facade.StorageFacade;
27+
import org.hdivsamples.util.InsecureBankUtils;
2628
import org.springframework.beans.factory.annotation.Autowired;
2729
import org.springframework.stereotype.Controller;
2830
import org.springframework.ui.Model;
@@ -91,6 +93,16 @@ public void getImage(final HttpServletResponse response, @RequestParam(value = "
9193
}
9294
}
9395

96+
@RequestMapping(value = "/userDetail/creditCardImage", method = RequestMethod.GET)
97+
public void getCreditCardImage(@RequestParam(value = "url") final String image, HttpServletResponse response) throws IOException {
98+
String downLoadImgFileName = InsecureBankUtils.getNameWithoutExtension(image) + "." + InsecureBankUtils.getFileExtension(image);
99+
// download
100+
response.setHeader( "content-disposition", "attachment;fileName=" + downLoadImgFileName);
101+
URL u = new URL(image);
102+
writeResponse(u.openStream(),response.getOutputStream());
103+
}
104+
105+
94106
@RequestMapping(value = "/userDetail/avatar/update", method = RequestMethod.POST)
95107
public String updateAvatar(@RequestParam("imageFile") final MultipartFile imageFile, final Principal principal,
96108
final RedirectAttributes redirectAttributes) {

src/main/java/org/hdivsamples/util/InsecureBankUtils.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package org.hdivsamples.util;
22

3+
import com.google.common.base.Preconditions;
4+
5+
import java.io.File;
6+
37
public abstract class InsecureBankUtils {
48

59
public static double round(double value, final int places) {
@@ -11,4 +15,17 @@ public static double round(double value, final int places) {
1115
long tmp = Math.round(value);
1216
return (double) tmp / factor;
1317
}
18+
public static String getFileExtension(String fullName) {
19+
Preconditions.checkNotNull(fullName);
20+
String fileName = (new File(fullName)).getName();
21+
int dotIndex = fileName.lastIndexOf('.');
22+
return dotIndex == -1 ? "" : fileName.substring(dotIndex + 1);
23+
}
24+
25+
public static String getNameWithoutExtension(String file) {
26+
Preconditions.checkNotNull(file);
27+
String fileName = (new File(file)).getName();
28+
int dotIndex = fileName.lastIndexOf('.');
29+
return dotIndex == -1 ? fileName : fileName.substring(0, dotIndex);
30+
}
1431
}
4.93 KB
Loading
4.89 KB
Loading
2.54 KB
Loading

src/main/webapp/WEB-INF/jsp/userDetail.jsp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,22 @@
159159
<c:forEach items="${creditAccounts}" var="credit">
160160
<tr>
161161
<td>
162-
<c:if test="${fn:contains(credit.description, 'Visa')}">
163-
<i class="fa fa-cc-visa"></i>
164-
</c:if>
165-
<c:if test="${fn:contains(credit.description, 'AmEx')}">
166-
<i class="fa fa-cc-amex"></i>
167-
</c:if>
168-
<c:if test="${fn:contains(credit.description, 'Master')}">
169-
<i class="fa fa-cc-mastercard"></i>
170-
</c:if>
162+
<c:if test="${fn:contains(credit.description, 'Visa')}">
163+
<spring:url value="/dashboard/userDetail/creditCardImage" var="cardIcon" htmlEscape="true" >
164+
<spring:param name="url" value="classpath:creditCards/visa.png"></spring:param>
165+
</spring:url>
166+
</c:if>
167+
<c:if test="${fn:contains(credit.description, 'AmEx')}">
168+
<spring:url value="/dashboard/userDetail/creditCardImage" var="cardIcon" htmlEscape="true" >
169+
<spring:param name="url" value="classpath:creditCards/amex.png"></spring:param>
170+
</spring:url>
171+
</c:if>
172+
<c:if test="${fn:contains(credit.description, 'Master')}">
173+
<spring:url value="/dashboard/userDetail/creditCardImage" var="cardIcon" htmlEscape="true" >
174+
<spring:param name="url" value="classpath:creditCards/mastercard.png"></spring:param>
175+
</spring:url>
176+
</c:if>
177+
<img id="card-ico" src="${cardIcon}" class="img-thumbnail" alt="card" style="border:solid 1px grey;cursor:pointer;" />
171178
<c:out value="${credit.number}"/></td>
172179
<td><c:out value="${credit.description}"/></td>
173180
</tr>

0 commit comments

Comments
 (0)