elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: [1] 2
1  Programación / Scripting / Matkix - Escalonar matrices en: 12 Diciembre 2014, 23:00 pm
Hace poco he acabado un trabajo de matemáticas y vengo para compartirlo con vosotros. Hace lo que dice el titulo: escalonar matrices.

Fiel a mis principios: Bash.

Código
  1. #!/bin/bash
  2.  
  3. #################################################################
  4. #                                                               #
  5. # # -*- ENCODING: UTF-8 -*-                                     #
  6. # Este script es software libre. Puede redistribuirlo y/o       #
  7. # modificar-lo bajo los términos de la Licencia Pública General #
  8. # de GNU según es publicada por la Free Software Foundation,    #
  9. # bien de la versión 3 de dicha Licencia o bien (según su       #
  10. # elección) de cualquier versión posterior.                     #
  11. #                                                               #
  12. # Si usted hace alguna modificación en esta aplicación,         #
  13. # deberá siempre mencionar al autor original de la misma.       #
  14. #                                                               #
  15. # Autor: Script creado por vk496                                #
  16. #                                                               #
  17. # Un saludo                                                     #
  18. #                                                               #
  19. #################################################################
  20.  
  21.  
  22. # Lo que hace este script es escalonar una matriz. No está optimizado para que la escalone ni mas rapido ni mas
  23. # eficiente, pero hace su trabajo (o eso me ha parecido después del debug.) A lo largo del programa habrá muchisimos
  24. # comentario para intentar explicar que hace cada cosa y como lo consigue, ya que el principal problema de esto es
  25. # que Bash no permite la declaración de arrays multidimensionales y es un poco lio. Vamos al grano
  26.  
  27.  
  28. if [ $# = 0 ]; then #Si no hay ningun parametro de entrada, muestra la ayuda y se sale
  29. echo "matkix v0.1 by vk496"
  30. echo "Uso: matkix [FILAS] [COLUMNAS] -R"
  31. echo
  32. echo "  [FILAS]      Numero de filas"
  33. echo "  [COLUMNAS]   Numero de columnas"
  34. echo "  -R|-r        Generar una matriz aleatoriamente"
  35. exit
  36. fi
  37.  
  38. # Existen tres funciones principales en el programa que toman datos de entrada para devolver una salida
  39. #
  40. # es_un_numero nos devuelve un {1,0} dependiendo de la entrada que le demos
  41. function es_un_numero {
  42. posible_numero=($1) #Cogemos el primer parametro y lo declaramos en forma de array
  43. # con la variable $posible_numero
  44. var=$(echo $posible_numero | sed 's/-//g' | sed 's/ //g') #Hacemos uso de 'sed' para eliminar cualquier
  45. # posible signo de numero negativo o espacio, y lo declaramos como $var
  46.  
  47. if [ "$var" -eq "$var" ] 2>/dev/null; then #Hacemos un poco de "trampa" en Bash. Aprovechamos los operadores
  48. # aritmeticos para igualar un numero a si mismos. Si es numero, siempre será igual a si mismo. Por el
  49. # contrario, si no lo es, nos devolverá un error en stderr, el cual ocultaremos con una redirección al
  50. # "vacio" (/dev/null)
  51. echo 1 #Es un numeros, devolvemos un 1
  52. else
  53. echo 0 #No es un numero, devolvemos un 0
  54. fi
  55. }
  56. # Es una funcion que siempre devolverá un resultado. Luego nos será util
  57.  
  58. # Por otra parte, esta nos devolverá la cantidad de ceros que hay en una fila si los contamos de izquierda a derecha
  59. function contador0 {
  60. declare -a ceros=($@) #Declaramos un array que tendrá como contenido todos los parametros que recibe contador0.
  61. # Esto se debe a que cada uno de los elementos de la matriz lo interpreta como parametros, por eso no
  62. # podemos coger solo el primero, tenemos que coger todos los de la fila. Cada elemento de la columna
  63. # se identifica como un elemento distinto en el array
  64.  
  65. total=0 #Consideramos que nuestra fila desde el principio no tiene nigún cero a la izquierda
  66.  
  67. for x in $(seq 0 $COLUMNAS); do #Un for para usar la x como identificador de cada elemento en el array. Como
  68. # sabemos seguro la cantidad de columnas que tiene nuestra fila, nos basta con una secuencia
  69.  
  70. if [ "${ceros[$x]}" = 0 ]; then #Si el elemento x de la array $ceros equivale a 0, significa que hemos
  71. # encontrado el primero cero. Se lo sumamos a $total
  72. let total=$total+1
  73. else
  74. break #De lo contrario, nos salimos de la iteracion
  75. fi
  76. done
  77.  
  78. # Analizamos nuestra variable $total. Si es mayor que cero, devolvemos como salida de contador0 la cantidad de 0
  79. if [ $total -gt 0 ]; then
  80. echo $total
  81. else
  82. echo "0" #Si no lo es, devolvemos un 0
  83. fi
  84. }
  85.  
  86. #Algoritmo para calcular el mcd de dos numeros. Se usará posteriormente en otra funcion
  87. function mcd {
  88. u=$1 #Primer numero como parametro
  89. v=$2 #Segundo numero como parametro
  90.  
  91. #Si el segundo parametro es vacio, tomará el valor del primero. Es decir, un mcd con dos numeros iguales
  92. if [ -z $v ]; then
  93. v=$u
  94. fi
  95.  
  96. if [ $v = 0 ]; then #Tenemos que tener en cuenta los 0, y evitarlos. De esta forma, solo manejamos los que
  97. # no sean 0
  98. v=$u
  99. fi
  100.  
  101. if [ $u = 0 ]; then #Lo mismo que la condicion de arriba pero para el otro parametro
  102. u=$v
  103. fi
  104.  
  105. while [ ! $u = $v ]; do #Mientras no sean iguales, repetir la accion hasta que lo sean
  106. if [ $u -lt $v ]; then #Si $u es menor que $v, restamos a $v el valor de $u
  107. let v=$v-$u
  108. elif [ $v -lt $u ]; then #Viceversa
  109. let u=$u-$v
  110. fi
  111.  
  112. done
  113.  
  114. echo $u #Es indiferente que valor devuelvolver ($u o $v). En cualquier caso, siempre será un valor distinto de
  115. # 0 mientras que ambos parametros no sean 0
  116.  
  117. }
  118.  
  119. #Dada una fila, esta funcion devolverá la fila simplificada. Muy util para evitar numeros gigantescos en los resultados
  120. function simplificar {
  121. valores=$@ #Guardamos en $valores todos los elementos de la fila
  122.  
  123. declare -a entrada=($valores) #Asignamos esos valores en un array.
  124. ceros=0 #Iniciamos variable del contador de ceros en la fila
  125. total=0 #Contamos todos los elementos de la fila
  126.  
  127. for x in "${entrada[@]}"; do #Para cada elemento del array...
  128. if echo $x | grep -q "-"; then #Comprobamos si es negativo o no
  129. entrada[total]=$(echo ${entrada[$total]}|sed 's/-//g') #En caso de serlo, eliminamos el signo
  130. # por ahora
  131. negativos="$negativos,$total" #Almacenos la posicion del array al que corresponde ese numero
  132. fi
  133.  
  134. if [ $x = 1 ]; then #Si tiene un 1, sabemos que no se puede simplificar. Devolvemos la fila tal como
  135. # está en en el parametro de entrada y nos salimos de la funcion
  136. echo $valores
  137. exit
  138. elif [ $x = 0 ]; then # en caso de ser un 0, añadimos una unidad al contador de ceros
  139. let ceros=$ceros+1
  140. fi
  141.  
  142. let total=$total+1 #Contamos los elemento totales
  143.  
  144. done
  145.  
  146. # Si $total es igual a $negativos, significa que toda la fila son ceros. No hay nada que hacer, nos salimos...
  147. if [ $total = $ceros ]; then
  148. echo $valores
  149. exit
  150. fi
  151.  
  152. # Tratamos cada elemento de la fila para encontrar un divisor comun
  153. for valor in "${entrada[@]}"; do
  154. # Conforme avancemos, vamos haciendo mcd del elemento actual con el resultado de su antecesor
  155. #
  156. comun=$(mcd $valor $comun) #La propiedad de mcd permite hacerlo de esta forma mediante iteracion sin
  157. # tener que hacer una funcion para n elementos. Cuanto mas facil, mejor :)
  158. done
  159. # En el peor de los casos, no hay ningun numero comun a todos los de la fila. En ese caso, $comun vale 1
  160.  
  161. if [ $comun = 1 ]; then #Si $comun es 1, no tiene sentido seguir. Nos salimos...
  162. echo $valores
  163. exit
  164. fi
  165.  
  166. y=0 #Necesitamos un contador para definir cada uno de los elementos de la array segun la posicion en la misma
  167. for valor in "${entrada[@]}"; do
  168. entrada[y]=$(echo "$valor/$comun"|bc) #Dividimos cada uno de los elementos por su numero comun a
  169. # todos ellos
  170. let y=$y+1
  171. done
  172.  
  173. # Devolvemos los signos a los numeros que lo tuviesen. Hacemos iteracion para cada uno de los elementos de
  174. # la lista
  175. for posicion in $(echo $negativos | sed 's/,/ /g'); do
  176. entrada[posicion]=$(echo "-${entrada[$posicion]}") #Reasignamos el elemento del array segun
  177. # corresponde a la lista de los negativos. Recordemos que $negativos no almacena el valor, sino
  178. # la posicion de dichos elementos
  179. done
  180.  
  181. echo "${entrada[@]}" #Si hemos llegado hasta este punto
  182. }
  183.  
  184. # Esta es la funcion central de este programa. Ella es la que se encarga de escalonar las matrices. Como parametros
  185. # de entrada tenemos dos matrices. Mediante calculos, nos devolverá otra matriz, que será la reducida en base a las
  186. # dos de entrada
  187. function reducir {
  188. total=$@ #La variabe total, al igual que en "es_un_numero{}", toma todos los parametros (las dos filas)
  189. numero=$(echo $total | awk -F' ' '{print NF}') # Al estar las dos filas juntas tenemos que separarlas.
  190. # Para ello, sacamos el numero total de elementos que hay (los delimitadores son espacios en una array)
  191.  
  192. # ----------------------------------------------
  193. # |     Usamos bc para operaciones basicas     |
  194. # ----------------------------------------------
  195. #   |
  196. #     |
  197. #     v
  198. f1=$(echo $total | cut -d" " -f-$(echo $numero/2 | bc)) #Como sabemos el numero total de elementos, y SIEMPRE
  199. # va a ser par, cogemos los primeros n/2 elementos, que corresponden a la primera fila. Para ellos,
  200. # usamos cut y como delimitador el espacio, cogiendo desde el elemto 1 hasta el n
  201.  
  202. f2=$(echo $total | cut -d" " -f$(echo $numero/2+1 | bc )-$numero) #Exactamente lo mismo pero para la segnda
  203. # fila. Sin embargos, cogemos a partir del elemento posterior a n (n+1) hasta $numero (ultimo elemento)
  204.  
  205.  
  206. declare -a trozo0=($f1) #Tenemos a $f1 como variable. La declaramos como matriz en $trozo0
  207. declare -a trozo1=($f2) #Lo mismo para $f2
  208.  
  209. x=${trozo0[$fila]} #El pivote de la fila que cogeremos para operar cumple una relacion con el numero de la
  210. # fila en el que nos encontramos. Por ejemplo: Si cogemos la tercera fila, sabemos que el que hará de
  211. # pivote será el tercer de dicha fila. Por tanto, cogemos exclusivamnete ese elemento
  212.  
  213. y=${trozo1[$fila]} # El mismo caso para la fila que será operada.
  214.  
  215. if [ $y = 0 ]; then # Si en el elemento de la fila que será operada tenemos un 0 (el elemento que está debajo
  216. # del pivote), devolvemos la fila operada tal cual y nos salimos
  217. echo $f2
  218. exit
  219. fi
  220.  
  221. IFS=" "
  222. for ((i=0;i<=$COLUMNAS;i++)); do #Para cada uno de los elementos de la fila
  223. F1=$(echo $y*${trozo0[$i]}|bc) #Multiplicamos el elemento de abajo por el pivote de arriba
  224. F2=$(echo $x*${trozo1[$i]}|bc) #Multiplicamos el pivote por el elemento de abajo
  225. OPERADA=$(echo "$OPERADA $(echo "$F1 - $F2"|bc)") #Dejamos la resta de ambos en la variable OPERADA. Es
  226. # importante mencionar que esta variable es creciente, y que aunque en la primera iteracion
  227. # no tenga ningun valor, se representa como un espacio vacio. Esto nos permite añadir elementos
  228. # a la fila de forma consecutiva hasta concluir con la fila operada por las dos filas de entrada
  229. # (fila y fila_posterior)
  230. done
  231.  
  232. echo $OPERADA #Devolvemos la fila operada de la funcion
  233. unset OPERADA #Debido a que es incrementativa, borramos su contenido para su posible posterior uso.
  234. }
  235.  
  236. #Obligamos a definir un numero concreto de filas. Si no está como parámetro, nos salimos con error
  237. if [ -z $1 ]; then
  238. echo No hay filas
  239. exit 1
  240. else
  241. FILAS=$1 #De lo contrario, definimos $FILAS y continuamos
  242. fi
  243.  
  244. # Restamos una unidad a la variabe filas. Esto se debe a que el primer elemento de un array se identifica con
  245. # un 0, mientras que los "humanos" empezamos por el 1
  246. FILAS=$(echo $FILAS-1 |bc)
  247.  
  248. # Exactamente lo mismo que con las filas...
  249. if [ -z $2 ]; then
  250. echo No hay columnas
  251. exit 1
  252. else
  253. COLUMNAS=$2
  254. fi
  255.  
  256. # Mas de lo mismo....
  257. COLUMNAS=$(echo $COLUMNAS-1 |bc)
  258.  
  259. if $(echo $@ | grep -qi "\-r"); then #Si tenemos el parámetro "-r", generamos aleatoriamente numeros positivos 0-9
  260. for fila in $(seq 0 $FILAS); do #Para cada una de las filas
  261. for columna in $(seq 0 $COLUMNAS); do #Para cada columna de cada fila
  262. subfila[columna]="$(shuf -i 0-9 -n 1)" #Creamos una array para la fila con numeros aleatorios
  263. done
  264.  
  265. matriz[fila]=${subfila[@]} #Cuando acabamos con una fila, todos los elementos de la array "subfila"
  266. # pasan a ser solo un elemento de la array "matriz"
  267. done
  268. echo
  269. else #Si no tenemos el parametro "-r", nosotros mismos introducimos la matriz
  270. IFS="\t" #Hacemos que el delimitador de la iteración sea un salto de linea en vez del espacio. Es importante
  271. # hacer esto por que no sabemos cual es la longitud de la matriz hasta que el usuario no pulse
  272. # ENTER para escribir la siguiente fila
  273. z=0
  274. while true; do #Entramos en el loop para leer las filas
  275. while true; do #Entramos en otro loop, pero esta vez para verificar lo que introduce el usuario
  276. echo -n "F$(echo $z+1 |bc): " #Formalidades... Simplemente para saber cual es la fila que
  277. # estamos escribiendo
  278. read -a linea #Leemos lo que introduce el usuario
  279.  
  280. # Hacemos uso de awk para contar los espacios (empieza a contar a partir del 1, por lo que
  281. # nos devuelve la cantidad de elementos). Obligamos a que el numero total de elementos
  282. # equivalga a la cantidad de columnas predefinidas por el usuario
  283. if [ ! $(echo $linea | awk -F' ' '{ print NF }') = $(echo $COLUMNAS+1|bc) ]; then
  284. echo No coinciden las columnas
  285. echo
  286. continue #Como no coincide, regresamos al verificador para que haga la fila otra vez
  287. fi
  288.  
  289. # Hacemos uso de la funcion es_un_numero() para saber cuando tenemos que salir del verificador
  290. if [ $(es_un_numero $linea) = 1 ]; then #Si es un numero, salimos del verificador
  291. break
  292. else
  293. echo No es un numero
  294. echo
  295. fi
  296. done
  297.  
  298. subfila=($linea) #Exactamente lo mismo que con el parámetro "-r". Solo que esta vez usamos la variabe
  299. # que ha escrito el usuario y no una matriz
  300. matriz[z]=${subfila[@]} #Mas de lo mismo para crear la matriz
  301.  
  302. #
  303. if [ $z = $FILAS ]; then #Cuando se han introducido todas las fila que ha definido el usuario, podemos
  304. # salir del loop, por lo que habremos terminado la creación de la matriz
  305. break
  306. fi
  307.  
  308. let z=$z+1
  309. done
  310. unset IFS #En adelante, no nos interesa tener como delimitador de la iteraciones un salto de linea, por lo que
  311. # borramos esa variabe
  312. clear #Borramos todo lo anterior de la pantalla
  313. fi
  314.  
  315. echo
  316. # Imprimimos en pantalla la matriz que tenemos actualmente mediante una iteracion
  317. for fila in $(seq 0 $FILAS); do
  318. echo "${matriz[fila]}"
  319. backup[fila]="${matriz[fila]}" #creamos una copia de la matriz sin escalonar
  320. done
  321. echo
  322. echo -n "SAGE_Original=matrix(QQ,["
  323. for num in $(seq 0 $FILAS); do
  324.  
  325. echo -n "[$(echo ${backup[$num]}| tr " " , )]"
  326. if [ ! $num = $FILAS ]; then #No ponemos coma cuando estamos en la ultima fila
  327. echo -n ","
  328. fi
  329. done
  330.  
  331. echo "]); SAGE_Original.echelon_form()"
  332. echo
  333. echo ------------------
  334. echo
  335.  
  336. matriz[0]=$(simplificar ${matriz[0]}) #Tratamos al primer elemento, ya que posteriormente no se toca a lo largo de la
  337. # iteracion
  338.  
  339. for fila in $(seq 0 $FILAS); do #Para cada una de las filas...
  340. matriz[fila]=$(simplificar ${matriz[$fila]})
  341.  
  342. # A continuacion, hacemos la segunda iteracion que nos permitirá "recorrer" la matriz de forma que podamos
  343. # operar con ella. Como tenemos que escalonar las filas de la matriz, sabemos que jugamos con la variabe filas,
  344. # por lo que $COLUMNAS pasa a un segundo plano. De antemano nos encontramos en una fila concreta ($fila), por
  345. # lo que nuestro objetivo es recorrer todas las demas filas "por debajo" de esta. Es por ello que el recorrido
  346. # se realiza desde la fila posterior ($fila+1) hasta la última fila declarada por el usuario
  347. for fila_posterior in $(seq $(echo $fila+1 | bc) $FILAS); do
  348.  
  349. if [ "$fila" -gt "$COLUMNAS" ]; then #Cuando la fila actual supera la COLUMNAS TOTALES de la matriz,
  350. # nos salimos de esta iteracion para evitar errores. Esto pasa cuando hay mas filas que columnas
  351. break
  352. fi
  353.  
  354. matriz[fila_posterior]=$(simplificar ${matriz[$fila_posterior]}) #Simplificamos la matriz posterior
  355. # que será operada con la actual para escalonar
  356.  
  357. # Si nos encontramos en el caso en el que la fila posterior está escalonada respecto a la actual
  358. # (comparando sus cantidades de ceros a partir de la izquierda), simplemente tenemos que intercambiarlas
  359. if [ "$(contador0 ${matriz[$fila]})" -gt "$(contador0 ${matriz[$fila_posterior]})" ]; then
  360.  
  361. #Lo hacemos mediante una variable de deshecho "$basura"
  362. basura="${matriz[$fila]}"
  363. matriz[fila]="${matriz[$fila_posterior]}"
  364. matriz[fila_posterior]="$basura"
  365. # echo "Cambio F$fila  con F$fila_posterior"
  366. fi
  367.  
  368. matriz[$fila_posterior]=$(reducir ${matriz[$fila]} ${matriz[$fila_posterior]}) #Escalonamos
  369. done
  370. done
  371.  
  372. for num in $(seq 0 $FILAS); do #Mostramos la matriz
  373. echo "${matriz[num]}"
  374. done
  375.  
  376. # echo
  377. # echo -n "declare -a matriz=("
  378. # for num in $(seq 0 $FILAS); do
  379. # echo -n "'${backup[$num]}'"
  380. # if [ ! $num = $FILAS ]; then
  381. # echo -n " "
  382. # fi
  383. # done
  384. # echo ")"
  385. # echo
  386. # Esto de arriba es util durante el desarrollo cuando una mtriz hace cosas raras, para cogerla y ver donde falla.
  387.  
  388. echo
  389. echo -n "SAGE_Resuleta=matrix(QQ,["
  390. for num in $(seq 0 $FILAS); do
  391.  
  392. echo -n "[$(echo ${matriz[$num]}| tr " " , )]"
  393. if [ ! $num = $FILAS ]; then #No ponemos coma cuando estamos en la ultima fila
  394. echo -n ","
  395. fi
  396. done
  397.  echo "]); SAGE_Resuleta.echelon_form()"

Salu2
2  Seguridad Informática / Hacking Ético / Post explotacion router desde el exterior en: 28 Junio 2014, 17:16 pm
Siempre he tenido curiosidad por saber que se puede hacer después de ganar acceso a un router...

Suponiendo que he conseguido entrar en la interfaz web del router (en mi caso, un TP-Link), que puedo hacer si estoy, por ejemplo, en casa de un amigo?

Puedo ver a mis dispositivos conectados en la red (con su IP privada y su MAC) desde las estadísticas del DHCP, pero... eso es todo?

Se puede comprometer equipos teniendo exclusivamente acceso a la webUI de un router?

Salu2
3  Seguridad Informática / Hacking Ético / Vulnerar sistema de router ZTE y subirle archivos en: 29 Mayo 2014, 17:12 pm
Buenas a todos. Actualmente me encuentro en el desarrollo de OpenWRT para darle soporte a este dispositivo: ZTE MF10

Se trata de una base wifi, que a mi parecer, puede tener mucho mas potencial del que le otorgan las compañías. Unas fotos:





El router tiene una memoria Flash de 4 Mb y una RAM de 16Mb. No es que sea potente, pero puede ser muy interesante tener uno de estos con OpenWRT por su puerto USB, ya que es posible utilizar una memoria como parte del sistema.

Las vistas por dentro del dispositivo son estas:




Vayamos al grano...

La carga del dispositivo (bootlog):

Código:
U-Boot 1.1.3 (Feb 26 2009 - 13:21:58)

Board: Ralink APSoC DRAM:  16 MB
relocate_code Pointer at: 80fac000
mips_cpu_feq=320000000
flash_protect ON: from 0xBF000000 to 0xBF0202E3
protect on 0
protect on 1
protect on 2
protect on 3
protect on 4
protect on 5
protect on 6
protect on 7
protect on 8
protect on 9
flash_protect ON: from 0xBF030000 to 0xBF03FFFF
protect on 10
*** Warning - bad CRC, using default environment

============================================
ZTE UBoot Version: 1.0.1
--------------------------------------------
ASIC 3052_MP2 (Port5<->None)
DRAM COMPONENT: 128Mbits
DRAM BUS: 16BIT
Total memory: 16 MBytes
Date:Feb 26 2009  Time:13:21:58
============================================
icache: sets:256, ways:4, linesz:32 ,total:32768
dcache: sets:128, ways:4, linesz:32 ,total:16384

freq = 320000000 MHZ

 ##### The CPU freq = 320 MHZ ####

SDRAM bus set to 16 bit
 SDRAM size =16 Mbytes
PHY0 and PHY1 are used ,and other PHYS are powered down


Please choose the operation:
   1: Load system code to SDRAM via TFTP.
   2: Load system code then write to Flash via TFTP.
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
   9: Load Boot Loader code then write to Flash via TFTP.                     0

3: System Boot system code via Flash.
## Booting image at bf050000 ...
   Image Name:   Linux Kernel Image
   Created:      2009-12-10  13:52:52 UTC

 System Control Status = 0x00400000
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    3104704 Bytes =  3 MB
   Load Address: 80000000
   Entry Point:  802d5000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
No initrd
## Transferring control to Linux (at address 802d5000) ...
## Giving linux memsize in MB, 16

Starting kernel ...


LINUX started...

 THIS IS ASIC
Linux version 2.6.21 (root@localhost.localdomain) (gcc version 3.4.2) #57 Thu Dec 10 08:52:33 EST 2009

 The CPU feqenuce set to 320 MHz
CPU revision is: 0001964c
Determined physical RAM map:
 memory: 01000000 @ 00000000 (usable)
Built 1 zonelists.  Total pages: 4064
Kernel command line: console=ttyS1,115200n8 root=/dev/mtdblock4
Primary instruction cache 32kB, physically tagged, 4-way, linesize 32 bytes.
Primary data cache 16kB, 4-way, linesize 32 bytes.
Synthesized TLB refill handler (20 instructions).
Synthesized TLB load handler fastpath (32 instructions).
Synthesized TLB store handler fastpath (32 instructions).
Synthesized TLB modify handler fastpath (31 instructions).
Cache parity protection disabled
cause = 9080000c, status = 1100ff00
PID hash table entries: 64 (order: 6, 256 bytes)
calculating r4koff... 00138800(1280000)
CPU frequency 320.00 MHz
Using 160.000 MHz high precision timer.
Dentry cache hash table entries: 2048 (order: 1, 8192 bytes)
Inode-cache hash table entries: 1024 (order: 0, 4096 bytes)
Memory: 13116k/16384k available (2413k kernel code, 3268k reserved, 483k data, 120k init, 0k highmem)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Time: MIPS clocksource has been installed.
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 512 (order: 0, 4096 bytes)
TCP bind hash table entries: 512 (order: -1, 2048 bytes)
TCP: Hash tables configured (established 512 bind 512)
TCP reno registered
squashfs: version 3.2-r2 (2007/01/15) Phillip Lougher
squashfs: LZMA suppport for slax.org by jro
io scheduler noop registered (default)
FLASH_API: MAN_ID=C2 DEV_ID=22CB SIZE=8MB
Ralink gpio driver initialized
spidrv_major = 217
HDLC line discipline: version $Revision: 1.1.1.1 $, maxframe=4096
N_HDLC line discipline registered.
Serial: 8250/16550 driver $Revision: 1.3 $ 2 ports, IRQ sharing disabled
serial8250: ttyS0 at I/O 0xb0000500 (irq = 37) is a 16550A
serial8250: ttyS1 at I/O 0xb0000c00 (irq = 12) is a 16550A
loop: loaded (max 8 devices)
rdm_major = 254
GDMA1_MAC_ADRH -- : 0x00000000
GDMA1_MAC_ADRL -- : 0x00000000
Ralink APSoC Ethernet Driver Initilization. v1.60  64 rx/tx descriptors allocated, mtu = 1500!
GDMA1_MAC_ADRH -- : 0x00000016
GDMA1_MAC_ADRL -- : 0x0026ed2b
PROC INIT OK!
PPP generic driver version 2.4.2
PPP BSD Compression module registered
NET: Registered protocol family 24
ralink flash device: 0x1000000 at 0xbf000000
Ralink SoC physically mapped flash: Found 1 x16 devices at 0x0 in 16-bit bank
 Amd/Fujitsu Extended Query Table at 0x0040
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
Creating 5 MTD partitions on "Ralink SoC physically mapped flash":
0x00000000-0x00030000 : "Bootloader"
0x00030000-0x00040000 : "Config"
0x00040000-0x00050000 : "Factory"
0x00050000-0x00140000 : "Kernel"
0x00140000-0x00800000 : "RootFS"
block2mtd: version $Revision: 1.1.1.1 $
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver usbserial
drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
drivers/usb/serial/usb-serial.c: USB Serial Driver core
drivers/usb/serial/usb-serial.c: USB Serial support registered for GSM modem (1-port)
usbcore: registered new interface driver option
drivers/usb/serial/option.c: USB Driver for GSM modems: v0.7.1
usbcore: registered new interface driver usb-pcm
drivers/usb/serial/usb-pcm.c: usb to pcm Driver: V2.4.20_uC0_1B12
nf_conntrack version 0.5.0 (128 buckets, 1024 max)
GRE over IPv4 tunneling driver
ip_tables: (C) 2000-2006 Netfilter Core Team, Type=Restricted Cone
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 10
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
drivers/flash/flash_ioctl.c 538
drivers/flash/flash_ioctl.c 390
drivers/flash/flash_ioctl.c 396
drivers/flash/flash_ioctl.c 401
drivers/flash/flash_ioctl.c 415

DDNSPassword=simcard_roam=HT_MpduDensity=5PktAggregate=1CountryRegion=5wan_l2tp_user=l2tp_user
44444e5350617373776f72643d0073696d636172645f726f616d3d0048545f4d70647544656e736974793d3500506b744167677265676174653d3100436f756e747279526567696f6e3d350077616e5f6c3274705f757365723d6c3274705f7573657200

drivers/flash/flash_ioctl.c 440
drivers/flash/flash_ioctl.c 390
drivers/flash/flash_ioctl.c 396
drivers/flash/flash_ioctl.c 401
the [first:ff].[second:ff].[the last but one:ff].[last:ff], return
drivers/flash/flash_ioctl.c 390
drivers/flash/flash_ioctl.c 396
drivers/flash/flash_ioctl.c 401
the [first:ff].[second:ff].[the last but one:ff].[last:ff], return
drivers/flash/flash_ioctl.c 540
VFS: Mounted root (squashfs filesystem) readonly.
Freeing unused kernel memory: 120k freed
init started: BusyBox v1.12.1 (2009-12-10 08:42:55 EST)
starting pid 602, tty '': '/etc_ro/rcS'
Algorithmics/MIPS FPU Emulator v1.5
devpts: called with bogus options
mount: mounting none on /proc/bus/usb failed: No such file or directory
 * * * * * * * * *     * * * * * * * * * * *     * * * * * * * * *
 * * * * * * * * *     * * * * * * * * * * *     * * * * * * * * *
             * *               *   *             *   *
           * *                 *   *             *   *
         * *                   *   *             *   * * * * * * *
       * *                     *   *             *   * * * * * * *
     * *                       *   *             *   *
   * * * * * * * *             *   *             *   * * * * * * *
 * * * * * * * * *             * * *             * * * * * * * * *

  * *          *  * * * * *     * *        *     *            *
*     *      *            *    *   *      * *   * *         *
*     *    *             *    *     *    *   * *   *       *
* * *     * * *          *    *     *   *     *     *     * * *
*        *     *         *    *     *   *           *    *     *
*        *     *         *     *   *    *           *    *     *
*          * *           *      * *     *           *      * *
ralink_gpio SETPID_CDZERO
ralink_gpio statedect_pid.pid=612
ralink_gpio statedect_pid.use=1
RALINK_GPIO_SET_DIR_OUT cpu_to_le32(tmp)=dfbefe
 internet.sh
Password for 'admin' changed
/sbin/internet.sh: line 257: wc: not found
[: 0: unknown operand
lm: no version for "struct_module" found: kernel tainted.
config usb otg
dwc_otg: version 2.72a 24-JUN-2008
DWC_otg: Core Release: 2.66a
DWC_otg: Periodic Transfer Interrupt Enhancement - disabled
DWC_otg: Multiprocessor Interrupt Enhancement - disabled
DWC_otg: Using DMA mode
DWC_otg: Device using Buffer DMA mode
dwc_otg lm0: DWC OTG Controller
dwc_otg lm0: new USB bus registered, assigned bus number 1
dwc_otg lm0: irq 18, io mem 0x00000000
DWC_otg: Init: Port Power? op_state=1
DWC_otg: Init: Power Port (0)
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
insmod: bridge.ko: module not found
insmod: mii.ko: module not found
insmod: raeth.ko: module not found

phy_tx_ring = 0x009e6000, tx_ring = 0xa09e6000, size: 16 bytes

phy_rx_ring = 0x009e7000, rx_ring = 0xa09e7000, size: 16 bytes
GDMA1_FWD_CFG = 10000
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
ifconfig: ioctl 0x8913 failed: No such device
rmmod: rt2860v2_ap: No such file or directory
rmmod: rt2860v2_sta: No such file or directory
rt2860v2_ap: module license 'unspecified' taints kernel.
2860 version : 2.0.0.0 (Dec 10 2009)


=== pAd = c11f8000, size = 84120 ===

rmmod: nf_nat_pptp: No such file or directory
rmmod: nf_conntrack_pptp: No such file or directory
rmmod: nf_nat_proto_gre: No such file or directory
rmmod: nf_conntrack_proto_gre: No such file or directory
RX DESC a0b76000  size = 1024
1. Phy Mode = 9
2. Phy Mode = 9
3. Phy Mode = 9
MCS Set = ff 00 00 00 01
The primary RSNIE: c11fbcea, len = 22
0x0000 : 00 50 f2 01 01 00 00 50 f2 02 01 00 00 50 f2 02
0x0010 : 01 00 00 50 f2 02
zhaoyong isRadioOff==0
Main bssid = 00:26:ed:2b:40:24
The UUID Hex string is:2880288028801880a8800026ed2b4024
The UUID ASCII string is:28802880-2880-1880-a880-0026ed2b4024!
0x1300 = 00064380
insmod: 8021q.ko: module not found
BusyBox v1.12.1 (2009-12-10 08:42:55 EST) multi-call binary

Usage: ifconfig [-a] interface [address]

ifconfig: ioctl 0x8913 failed: No such device
brctl: bridge br0: No such device or address
iptables v1.4.0rc1: can't initialize iptables table `mangle': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
device ra0 entered promiscuous mode
##### restore RT3052 to dump switch #####
switch reg write offset=14, value=5555
switch reg write offset=40, value=1001
switch reg write offset=44, value=1001
switch reg write offset=48, value=1001
switch reg write offset=4c, value=1
switch reg write offset=50, value=2001
switch reg write offset=70, value=ffffffff
switch reg write offset=98, value=7f7f
switch reg write offset=e4, value=0
device eth2 entered promiscuous mode
br0: port 2(eth2) entering learning state
br0: port 1(ra0) entering learning state
route: ioctl 0x890c failed: No such process
route: ioctl 0x890b failed: Invalid argument
br0: port 2(eth2) entering disabled state
br0: port 1(ra0) entering disabled state
br0: port 2(eth2) entering learning state
br0: port 1(ra0) entering learning state
ifconfig: ioctl 0x8914 failed: Cannot assign requested address
ifconfig: ioctl 0x8914 failed: Cannot assign requested address
/sbin/lan.sh: line 63: hostname: not found
Set: phy[0].reg[0] = 3900
Set: phy[0].reg[0] = 3100
Set: phy[1].reg[0] = 3900
Set: phy[1].reg[0] = 3100
Warning in PHY reset script
Warning in PHY reset script
Warning in PHY reset script
ifconfig: ioctl 0x8913 failed: No such device
killall rt2860apd 1>/dev/null 2>&1
iptables -F -t filter 1>/dev/null 2>&1
iptables -D FORWARD -j macipport_filter 1>/dev/null 2>&1
iptables -F macipport_filter 1>/dev/null 2>&1
iptables -D FORWARD -j web_filter  1>/dev/null 2>&1
iptables -F web_filter  1>/dev/null 2>&1
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t filter -N web_filter 1>/dev/null 2>&1
iptables -t filter -N macipport_filter 1>/dev/null 2>&1
iptables -t filter -A FORWARD -j web_filter 1>/dev/null 2>&1
iptables -t filter -A FORWARD -j macipport_filter 1>/dev/null 2>&1
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 1>/dev/null 2>&1
iptables -t filter -F INPUT
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -j DROP
iptables -t filter -A INPUT -i ppp0 -p icmp -j DROP
save index:0
iptables -t nat -D PREROUTING -j port_forward 1>/dev/null 2>&1
iptables -t nat -F port_forward  1>/dev/null 2>&1; iptables -t nat -X port_forward  1>/dev/null 2>&1
iptables -t nat -D PREROUTING -j DMZ 1>/dev/null 2>&1
iptables -t nat -F DMZ 1>/dev/null 2>&1; iptables -t nat -X DMZ  1>/dev/null 2>&1
iptables -t nat -N port_forward 1>/dev/null 2>&1; iptables -t nat -I PREROUTING 1 -j port_forward 1>/dev/null 2>&1
iptables -t nat -N DMZ 1>/dev/null 2>&1; iptables -t nat -I PREROUTING 2 -j DMZ 1>/dev/null 2>&1
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
ip_table: set wan_name=ppp0
echo 1 > /proc/sys/net/ipv4/ip_forward
ntp.sh
greenap.sh init
ddns.sh
route delete 239.255.255.250 1>/dev/null 2>&1
killall wscd 1>/dev/null 2>&1
killall -9 wscd 1>/dev/null 2>&1
iwpriv ra0 set WscConfMode=0 1>/dev/null 2>&1
iwpriv ra0 set WscConfMode=0 1>/dev/null 2>&1
killall -q klogd
killall -q syslogd
syslogd -C8 1>/dev/null 2>&1
klogd 1>/dev/null 2>&1
killall -q zebra
killall -q ripd
webs: Listening for HTTP requests at address 192.168.0.1
SG device open error, it is not a auto setup modem.
br0: topology change detected, propagating
br0: port 2(eth2) entering forwarding state
br0: topology change detected, propagating
br0: port 1(ra0) entering forwarding state
starting pid 1253, tty '/dev/ttyS1': '/bin/sh'


BusyBox v1.12.1 (2009-12-10 08:42:55 EST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

-> filename:options,path:/var/ppp/options
uaUserNameSvr:vodafone,uaPassWordLoc:vodafone
filename:wcdma_chat,path:/var/ppp/wcdma_chat
uaUserNameSvr:vodafone,uaPassWordLoc:vodafone
filename:pap-secrets,path:/var/ppp/pap-secrets
uaUserNameSvr:vodafone,uaPassWordLoc:vodafone
filename:chap-secrets,path:/var/ppp/chap-secrets
uaUserNameSvr:vodafone,uaPassWordLoc:vodafone
CreateSoftTimer index 0 success:
usTimerID = 4,
ucFlag = 1,
ulCurInterval = 25,
ulNextInterval = 25,
procCallBack = 0x00000000,
args = 0x00000000.
CreateSoftTimer index 1 success:
usTimerID = 1,
ucFlag = 1,
ulCurInterval = 25,
ulNextInterval = 25,
procCallBack = 0x00000000,
args = 0x00000000.
fac Server start
wait...
start accept......
mkdir: cannot create directory '/var/lock': File exists
mkdir: cannot create directory '/var/log': File exists

Un primer analisis del dispositivo me revela un backdoor en el puerto 4719 (telnet, acceso por defecto con admin.):

Código:
Starting Nmap 6.46 ( http://nmap.org ) at 2014-05-08 21:10 CEST
NSE: Loaded 118 scripts for scanning.
NSE: Script Pre-scanning.
Initiating ARP Ping Scan at 21:10
Scanning 192.168.0.1 [1 port]
Completed ARP Ping Scan at 21:10, 0.01s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 21:10
Completed Parallel DNS resolution of 1 host. at 21:10, 13.00s elapsed
Initiating SYN Stealth Scan at 21:10
Scanning 192.168.0.1 [65535 ports]
Discovered open port 80/tcp on 192.168.0.1
Discovered open port 4719/tcp on 192.168.0.1
Discovered open port 3535/tcp on 192.168.0.1
Completed SYN Stealth Scan at 21:10, 16.85s elapsed (65535 total ports)
Initiating Service scan at 21:10
Scanning 3 services on 192.168.0.1
Completed Service scan at 21:12, 126.17s elapsed (3 services on 1 host)
Initiating OS detection (try #1) against 192.168.0.1
NSE: Script scanning 192.168.0.1.
Initiating NSE at 21:12
Completed NSE at 21:13, 30.11s elapsed
Nmap scan report for 192.168.0.1
Host is up (0.0012s latency).
Not shown: 65532 closed ports
PORT     STATE SERVICE VERSION
80/tcp   open  http    GoAhead httpd (WAP http config)
|_http-favicon: Unknown favicon MD5: F0990331A8F325ED616BEE55FFD6359D
|_http-methods: No Allow or Public header in OPTIONS response (status code 400)
|_http-title: Wireless Broadband Router
3535/tcp open  unknown
4719/tcp open  telnet  BusyBox telnetd
MAC Address: 00:26:ED:2B:40:24 (zte)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.13 - 2.6.32
Uptime guess: 0.005 days (since Thu May  8 21:05:45 2014)
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=195 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: Device: WAP

TRACEROUTE
HOP RTT     ADDRESS
1   1.23 ms 192.168.0.1

NSE: Script Post-scanning.
Read data files from: /usr/bin/../share/nmap
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 192.67 seconds
           Raw packets sent: 65555 (2.885MB) | Rcvd: 65551 (2.623MB)


Estando dentro del dispositivo, puedo ver que usa BusyBox, lo que me limita el manejo del dispositivo.

Los datos mas relevantes:


Todos los comandos existentes

Código:
[                ethtool                   lan.sh                 ripd
[[                         expr                      lld2d                   rm
ash                       facSvr                   logger                 rmmod
at                          firewall.sh             login                   route
at-server                flash                     logread                rt2860apd
ated                       free                      ls                       sed
automount.sh          global.sh               lsmod                   sh
brctl                       goahead                macgo                  sigmon
busybox                  gpio                     mainControl            sleep
cat                         greenap.sh            mii_mgr               startpppd
cdzero                    grep                     mkdir                   statedect
cfg                         halt                      mount                   switch
chat                       ifconfig                  mtd_write             syslogd
chkSvr                    igmpproxy             nat.sh                   telnetd
chpasswd                igmpproxy.sh         net2tty_dload.sh     test
chpasswd.sh            inadyn                  net2tty_qxdm.sh      touch
close                       init                       ntp.sh               ttyswitch
comgt                     insmod                  ntpclient            udhcpc
config-3g-ppp.sh      internet.sh             nvram_daemon         udhcpc.sh
config-dns.sh           iptables                 nvram_get            udhcpd
config-igmpproxy.sh  ipupdown              nvram_set            upnp_xml.sh
config-l2tp.sh           iwconfig                ping                 upnpd
config-pppoe.sh        iwevent                 poweroff             uptime
config-pptp.sh          iwgetid                 pppd                 vconfig
config-udhcpd.sh      iwlist                   pptp                 vi
config-vlan.sh           iwpriv                  pptp.sh              vpn-passthru.sh
config.sh                  iwspy                  ps                   wan.sh
cp                           kill                      qos_run              wifi_unload.sh
daemon_zte              killall                   radvd                wscd
date                        klogd                   ralink_init          zebra
ddns.sh                   l2tp-control           reboot               zte_wlan.sh
dnsmasq                 l2tp.sh                 reg
echo                       l2tpd                    remserial

mount output:


Código:
-> mount
rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro)
proc on /proc type proc (rw)
none on /var type ramfs (rw)
none on /etc type ramfs (rw)
none on /tmp type ramfs (rw)
none on /media type ramfs (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw)

Free output:
Código:
-> free
              total         used         free       shared      buffers
  Mem:        13236        12304          932            0         1124
 Swap:            0            0            0
Total:        13236        12304          932

/dev:

Código:
video0     ttyUSB0    random     ptyp0      mtdblock3  mtd3       mem        flash0
urandom    ttyS1      ram3       pts        mtdblock2  mtd2ro     kmem       console
ttyp1      ttyS0      ram2       ptmx       mtdblock1  mtd2       i2cM0      acl0
ttyp0      swnat0     ram1       ppp        mtdblock0  mtd1ro     hwnat0     ac0
ttyUSB3    spiS0      ram0       null       mtd4ro     mtd1       gpio       PCM
ttyUSB2    sg0        ram        mtr0       mtd4       mtd0ro     flash2     I2S
ttyUSB1    rdm0       ptyp1     mtdblock4  mtd3ro     mtd0       flash1

Si nos fijamos en el bootlog, podemos ver que tiene 5 particiones:

Citar
Creating 5 MTD partitions on "Ralink SoC physically mapped flash":
0x00000000-0x00030000 : "Bootloader"
0x00030000-0x00040000 : "Config"
0x00040000-0x00050000 : "Factory"
0x00050000-0x00140000 : "Kernel"
0x00140000-0x00800000 : "RootFS"

Para hacer el backup de estas particiones he utilizado el comando mount en la carpeta /dev

Código:
mount --bind /dev /etc_ro/web/

Y posteriormente las he descargado accediendo a cada archivo desde la ip del router. Por ejemplo:

Código:
http://192.168.0.1/mtd2

Esto me ha servido para "engañar" al servidor web y cambiar las rutas para mi beneficio (en este caso bajar archivos que me interesan).

El problema que se me plantea ahora es conseguir subir archivos al router. Como habréis visto, solo tiene telnet, un protocolo que no permite transferencia de archivos. El USB que tiene no puede ser usado, porque al parecer no tiene los módulos del kernel necesarios para detectar y montar unidades USB (o eso parece).

Lo que necesito es subirle el firmware OpenWRT (que ya he compilado) y utilizar el comando mtd_write (que ya viene incluido), pero no sé como subir el archivo.

Alguna idea?

Salu2
4  Seguridad Informática / Wireless en Linux / LINSET 0.8 - WPA/2 Hack sin Fuerza Bruta en: 11 Diciembre 2013, 21:46 pm
Antes de nada, comento que este es un proyecto con fines educativos que me han servido a mi (y espero que a otros) para estar mas en contacto con todo el mundo de programación y Wireless. Queda prohibido bajo cualquier circunstancia el uso de dicha herramientas contra Redes Wireless en las que no se haya autorizado su uso!

LINSET > Linset Is Not a Social Enginering Tool



Bueno, antes de nada, presentar la herramienta. Para los que no la sepan, es una herramienta de ingeniería social, basada en el MITM para comprobar la seguridad (o ignorancia) de los clientes de nuestra red. Los pasos que realiza son:

1. Escanea la red.
2. Selecciona la red.
3. Busca handshake (se puede usar sin handshake)
4. Se elige una de las varias interfaces web adaptadas por mi (gracias a la colaboración de los users)
5. Se monta un FakeAP imitando al original
6. Se crea un servidor DHCP sobre el FakeAP
7. Se crea un servidor DNS para redirigir todas las peticiones al Host
8. Se lanza el servidor web con la interface seleccionada
9. Se lanza el mecanismo para comprobar la validez de las contraseñas que se van a introducir
10. Se desautentifica a todos los usarios de la red, esperando que se conecten al FakeAP e introduzcan la contraseña.
11. Se detiene el ataque tras la comprobación correcta de la contraseña

Para probar su funcionamiento, es necesario que tengais instaladas diversas dependencias, las cuales LINSET comprobará y indicará si están instaladas o no.

También es preferible que tengais el patch para el canal negativo, ya que si no es así, tendréis complicaciones para poder relizar el ataque de forma correcta

Tambien dejo unos apartados sobre cosas que he visto y que me gustaría ir resolviendo poco a poco para las proximas versiones... :

-Solucionar bucle infinito de la web cuando se entra a través de una subURL muy rara. [Suprimido temporalmente]
-Implementar redireccionamiento en lighttpd que no provoque ese bucle
-La carga de la web por primera vez se hace muy lenta aveces (probado solo desde movil) [Solucionado]
-Mejorar el sistema encargado de gestionar la comprobacion del handshake [Solucionado]
-Titulo al script...  ;D [Solucionado]
-Interfaz mas bonita al script....  ;D [Solucionado]
-Colores y dialogos...  ;D [Solucionado]
-Interface neutral basado en popup de jquerry
-Comprobacion de Handshake en segundo plano


Changelog:

Citar
########## 06-11-2013 LINSET 0.1
##
## #Fecha de Salida
##
########## 07-11-2013 LINSET 0.1b
##
## #Cambiado el Fakeweb a Inglés
## #Añadida funcion para quitar el modo monitor al salir
## #Arreglado Bucle para no colapsar la pantalla con información
## #Colocada opción de seleccionar otra red
## #Eliminado mensaje sobrante de iwconfig
##
########## 10-11-2013 LINSET 0.2
##
## #Añadido Changelog
## #Reestructurado el codigo
## #Cambiada la posición de ventanas xterm
## #Eliminada creacion extra del archivo route
## #Movido pantalla de comprobacion de handshake a una ventana xterm
## #Añadido menu durante el ataque
## #Añadida comprobacion de dependencias
##
########## 22-11-2013 LINSET 0.3
##
## #Arreglado mensaje de Handshake (no se mostraba bien)
## #Añadida interface de routers Telefonica y Jazztel (Xavi y Zyxel)
## #Fix cuando se usaba canales especificos (exit inesperado)
## #Mejorado DEBUG (function_clear y HOLD)
## #Migración de airbase-ng a hostapd
## #Reestructurado mas codigo
## #Añadido header
## #Añadida funcion para eliminar interfaces en modo monitor sobrantes
##
########## 30-11-2013 LINSET 0.4
##
## #Agregado soporte a airbase-ng junto a hostapd
## #Capacidad para comprobar pass sin handshake (modo Airlin"
## #Arregladas problemas con variables
## #Fix espacio Channel
## #Eliminada seleccion con multiples tarjetas de red
## #Arreglado error sintactico HTML de las interfaces Xavi
## #Implementada interface Zyxel (de routers de Telefonica también)
##
########## 07-12-2013 LINSET 0.5
##
## #Arreglado bug que impide usar mas de una interface
## #Migración de iwconfig a airmon-ng
## #Añadida interface HomeStation (Telefonica)
## #Arregladas llamadas PHP a error2.html inexistente
## #Arreglado bug que entraba en seleccion de Objetivos sin que se haya creado el CSV correspondiente
## #Opcion Salir en el menu de seleccion de webinterfaces
## #Arreglado bug que entraba en seleccion de Clientes sin que los haya
## #Arreglado bug que entraba en seleccion de Canal sin que haya interface valida seleccionada
##
########## 11-12-2013 LINSET 0.6
##
## #Bug al realizar deauth especifico sin que haya airodump en marcha
## #Modificadas variables que gestionan los CSV
## #Modificada estetica a la hora de seleccionar objetivo
## #Añadidos colores a los menus
## #Modificado funcionamiento interno de seleccion de opciones
## #Arreglado bug de variables en la comprobacion de dependencias
## #Añadida dependencia para ser root
##
########## 15-12-2013 LINSET 0.7
##
## #Añadido intro
## #Mejoradas variables de colores
## #Añadida interface de los routers Compal Broadband Networks (ONOXXXX)
## #Mejorada la gestion de la variable de Host_ENC
## #Arreglado bug que entraba en modo de FakeAP elegiendo una opcion inexistente
## #Modificado nombre de HomeStation a ADB Broadband (según su MAC)
## #Agregada licencia GPL v3
##
########## 27-12-2013 LINSET 0.8
##
## #Modificada comprobación de permisos para mostrar todo antes de salir
## #Añadida funcion para matar software que use el puerto 80
## #Agregado dhcpd a los requisitos
## #Cambiado titulo de dependecia de PHP (php5-cgi)
## #Modificado parametro deauth para PC's sin el kernel parcheado
## #Añadida funcion para matar software que use el puerto 53
## #Funcion para remontar los drivers por si se estaba usando la interface wireless
## #Modificada pantalla que comprueba el handshake (mas info) y mejoradas las variables
## #Mejorado menu de comprobacion de password con mas información
## #Añadida lista de clientes que se muestran en el menu de comprobacion de password
## #Cambiado ruta de guardado de password al $HOME
## #Reestructuracion completa del codigo para mejor compresion/busqueda
## #El intro no aparecerá si estas en modo desarrollador
## #No se cerrará el escaneo cuando se compruebe el handshake
##
##########

Bueno, sin mas palabrerias, os dejo el link

Última modificacion: 27-12-2013

http://goo.gl/z1YQKy

Para usarlo, le damos permisos con:

chmod +x linset

y ejecutamos:

./linset

Para los que quieran colaborar enviando la interface/formulario de su router:

http://foro.seguridadwireless.net/aplicaciones-y-diccionarios-linux/(peticion)-router-interfaces-para-linset/

Espero ver vuestras opiniones!   :) :P

Salu2
5  Seguridad Informática / Wireless en Linux / ChaMAC 0.9-5: Cambia todas tus MAC en: 12 Noviembre 2013, 22:28 pm
Buenas a todos, os dejo un script que hice ya algún tiempo para seguridadwireless.net pero que vengo a compartir con este grandisimo foro.

Es muy simple, pero me ha llevado mucho (muchisimo) tiempo hacerlo, pues no soy muy amigo de la programación y este ha sido mi primer script  ;D

El funcionamiento es muy simple: Cuando abramos el chamac , detectará todas nuestras interfaces, y les cambiará la MAC por una aleatoria. Después relanzará el cliente DHCP (o daemon) para volver a tener conexión a Internet (en el caso de que estuviésemos conectados)



#################################
#               Link Oficial del Proyecto                   #
#################################



Aquí el script: (ultima modificación: 09-10-2013)

Código:
#!/bin/bash


########## Modo DEBUG ##########
##       ##
          CHAMAC_DEBUG=0
##       ##
################################

########## 08-09-2013 Chamac 0.1
##
## #Fecha de Salida
##
########## 10-09-2013 Chamac 0.2
##
## #Detección de clientes DHCP
## #Optimización del código
## #Detección de deaemons de red
## #Aviso de macchanger desactualizado
## #Comprobar permisos root
##
########## 11-09-2013 Chamac 0.3
##
## #Añadido menu de ayuda
## #Posibilidad de ejecutar script con el sistema
## #Eliminada dependencia macchanger, puede funcionar sin el
## #Añadidda posibilidad de usar macchanger si se quisiese
##
########## 12-09-2013 Chamac 0.4
##
## #Corregido bug cuando wicd esta off (gracias a @USUARIONUEVO)
## #Corregido fallo de colores cuando se pedia ser root
## #Añadido menu para restaurar las MAC
## #Añadido menu para ver las MAC actuales
## #Fixedo el archivo que se genera para --autoboot
## #Pequeñas mejoras en el codigo
##
########## 16-09-2013 Chamac 0.5
##
## Reducido información del script ( mas minimalista)
## Modificado representacion de las interfaces
## Añadidas varias rutas alternativas para MAC Permanente
## Corregido codigo de peticion de permisos Root
## Pequeños cambios en el codigo
##
########## 19-09-2013 Chamac 0.6
##
## Arreglado problema de cambios de MAC fallidos
## Añadido comprobador de ruta de chamac
## Optimizado deteccion de daemon
## Agregada salida DEBUG en consola
## Pequeñas optimizaciones en el codigo
## Bug interno de rutas en la opcion -r para autoejecutarse
##
########## 21-09-2013 Chamac 0.7
##
## Eliminadas rutas de /run/udev/data/nX para extraer la MAC Original
## Mejorada función --autostart para sistemas con SUDO
## Añadida opcion para MAC personalizada
## Optimizados mensajes informativos
##
########## 26-09-2013 Chamac 0.8
##
## Corregido bug que no eliminaba la entrada de /etc/sudoers
## Añadido OUI para mostrar el Vendor
## Añadida funcion --update para actualizar la base de deatos OUI
## Añadida database de OUI
## Optimizados mensajes informativos
## Estructurado codigo fuente para mejor comprension
##
########## 03-10-2013 Chamac 0.9
##
## Corregido bug "-i used with no filenames on the command line, reading from STDIN" (@USUARIONUEVO y @alister)
## Mejorado el parseo de datos
## Reducida información que se muestra sobre los Vendor (mas dinamica)
## Añadida opcion --list para mostrar todos los Vendor
## Añadida opcion --ending para mantener los bytes del Fabricante
## Añadida opcion --another para elegir otro Fabricante Aleatorio
## Reducida cantidad de repeticiones para el cambio de MAC de 6 a 3 (parece estable...)
##
########## 09-10-2013 Chamac 0.9-5
##
## Arreglado bug de duplicidad del comando -a
## Arreglado bug de variables en el parametro --another
##
##########


########## Agradecimientos
##
## Me gustaría dar las gracias al equipo de www.seguridadwireless.net por el maravilloso trabajo que estan haciendo.
## En especial, quiero dar las gracias a @USUARIONUEVO por sus inmediatos informes sorbre los bugs del script y consejos
## para el proyecto, a @warcry por el consejo de adaptar el script a mas distros linux, a @geminis_demon por sus ayudas con
## el bash y por ultimo a @alister, por mostrarme datos muy tecnicos de Linux (y necesarios) para desarrollar mi script y
## darme muy buenas ideas para que pueda seguir innovando
##
##########

ruta=$(which $0)
if [ $CHAMAC_DEBUG = 1 ]; then
    ## set to /dev/stdout when in developer/debugger mode
    export chamac_output_device=/dev/stdout
  else
    ## set to /dev/null when in production mode
    export chamac_output_device=/dev/null
fi

function conditional_clear() {
    if [[ "$chamac_output_device" != "/dev/stdout" ]]; then clear; fi
}

#Detectar interfaces
readarray -t interfaces &lt; &lt;(ip link | grep "&lt;" | cut -d " " -f 2 | cut -d ":" -f 1 | grep -v lo)
#Comprobar estado del autoboot
anothermode=0
endingmode=0
macchangermode=0
custommacmode=0
if [ -f /etc/xdg/autostart/autochamac.desktop ]; then
    autoboot=1
  else
    autoboot=0
fi
#Dar colores al estado del autobbot
if [ $autoboot = 1 ]; then
    autobootstatus='\e[1;32mOn\e[0m'
  else
    autobootstatus='\e[1;31mOff\e[0m'
fi
#Detectar base de datos actual
if [ -f /usr/share/chamac/manuf ]; then
    OUIruta="/usr/share/chamac/manuf"
    dbMAC=$(cat /usr/share/chamac/manuf |grep ^[0-9A-F] | wc -l)
elif [ -f /etc/manuf ]; then
    OUIruta="/etc/manuf"
    dbMAC=$(cat /etc/manuf |grep ^[0-9A-F] | wc -l)
elif [ -f /usr/share/wireshark/manuf ]; then
    OUIruta="/usr/share/wireshark/manuf"
    dbMAC=$(cat /usr/share/wireshark/manuf |grep ^[0-9A-F] | wc -l)
  else
    OUIruta="N/A"
    dbMAC="N/A"
fi

#Menu de ayuda
if [ "$1" = "-v" -o "$1" = "--version" ]; then
    echo 0.9-5
    exit
elif [ "$1" = "-m" -o "$1" = "--macchanger" ]; then
    macchangermode=1
elif [ "$1" = "-e" -o "$1" = "--ending" ]; then
    endingmode=1
elif [ "$1" = "-A" -o "$1" = "--another" ]; then
    anothermode=1
elif [ "$1" = "-l" -o "$1" = "--list" ]; then
if [ ! $OUIruta = "N/A" ]; then
cat $OUIruta | awk '{ gsub("-", "", $1); gsub(":", "", $1); gsub("/[00-99]+$","",$1 ); gsub(/^ */,"- ", $2); print}' | sed -r 's/\s\S+\s#//' | grep ^[0-9A-F] |grep -n ""| awk '{ gsub(":", " - ", $1); print }'| perl -lane '$F[2] =~ s/(..)(?!$)/$1:/g; print qq|@F|'
else
echo -ne "Chamac Database---&gt; "
echo -e "\e[1;33mNot installed\e[0m (use \e[1;31mchamac --update\e[0m)"
fi
exit
elif [ "$1" = "-u" -o "$1" = "--update" ]; then
if [ $(/usr/bin/id -u) != 0 ]; then
    echo -e "Privileges \e[0;31mroot\e[0m---&gt; \e[1;31mError\e[0m"
    exit
fi

conditional_clear
echo -ne "Check Internet Connection---&gt; "
if ping -c4 google.es&amp;&gt;$chamac_output_device; then
    echo -e "\e[1;32mOK!\e[0m"
    sleep 3
  if [ ! -d /usr/share/chamac/manuf ]; then
    mkdir /usr/share/chamac/ &amp;&gt;${chamac_output_device}
conditional_clear
   else
    rm -f /usr/share/chamac/manuf &amp;&gt;${chamac_output_device}
  fi
    wget -O /usr/share/chamac/manuf anonsvn.wireshark.org/wireshark/trunk/manuf |&amp; grep "%"
conditional_clear
    $0 -h
  else
    echo -e "\e[1;31mError\e[0m"
fi
exit
elif [ "$1" = "-s" -o "$1" = "--show" ]; then
conditional_clear
for INTERFACE in ${interfaces[@]}; do
    rutasecundaria=$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?&lt;=").*(?=")')
  if [ $rutasecundaria ]; then
      MAC_ORIGINAL=$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?&lt;=").*(?=")')
    else
if [ -e /sys/class/net/$INTERFACE/phy80211/addresses ]; then
    MAC_ORIGINAL=$(cat /sys/class/net/$INTERFACE/phy80211/addresses)
  else
    rutaultima=$(ethtool -P $INTERFACE | grep Permanent)
      if [ "ethtool -P $INTERFACE | grep Permanent" ]; then
  MAC_ORIGINAL=$(ethtool -P $INTERFACE | grep Permanent | awk '{print $3}')
else
  MAC_ORIGINAL="??:??:??:??:??:??"
      fi
fi
  fi
    MAC_ACTUAL="$(cat /sys/class/net/$INTERFACE/address)"
   
if [ ! $OUIruta = "N/A" ]; then
    MAC_O="$(echo $MAC_ORIGINAL| tr -d : | tr '[:lower:]' '[:upper:]')"
    MAC_A="$(echo $MAC_ACTUAL| tr -d : | tr '[:lower:]' '[:upper:]')"
    MAClist=$(cat $OUIruta | awk '$3 == "#"{ gsub("-", "", $1); gsub(":", "", $1); gsub("/[00-99]+$","",$1 ); gsub(/^ */,"", $1); {t=$1; $1=$2=$3=""; sub(/^[[:space:]]+/, ""); $0=t" "$0}; print}')
    i=6

while [ $i -le 12 ]; do
      SEARCHING_RESULT_o=$(echo "$MAClist" |grep ^${MAC_O:0:i})
      SEARCHING_EXITCODE_o=$?
      lineas_o=$(echo "$SEARCHING_RESULT_o" | wc -l)
     if [ "$lineas_o" = 1 ]; then
if [ "$SEARCHING_EXITCODE_o" = 0 ]; then
    FABRICANTE_MAC_ORIGINAL=$(echo "$SEARCHING_RESULT_o"|cut -d " " -f 2-22)
fi
     fi

SEARCHING_RESULT=$(echo "$MAClist" |grep ^${MAC_A:0:i})
      SEARCHING_EXITCODE=$?
      lineas=$(echo "$SEARCHING_RESULT" | wc -l)
     if [ "$lineas" = 1 ]; then
if [ "$SEARCHING_EXITCODE" = 0 ]; then
FABRICANTE_MAC_FALSA="(\e[1;34m$(echo "$SEARCHING_RESULT"|cut -d " " -f 2-22)\e[0m)"
fi
break
     fi
     
     
    let i=i+1
done

  else
      FABRICANTE_MAC_ORIGINAL="\e[1;31mN/A\e[0m"
      FABRICANTE_MAC_ORIGINAL="\e[1;31mN/A\e[0m"
fi
if [ -z "$FABRICANTE_MAC_ORIGINAL" ]; then
  FABRICANTE_MAC_ORIGINAL="unknown"
fi

if [ "$FABRICANTE_MAC_FALSA" = "($FABRICANTE_MAC_ORIGINAL)" ]; then
    FABRICANTE_MAC_FALSA=""
fi


    echo "======================================================\\"
echo -e "   INTERFACE:\e[1;35m $INTERFACE \e[0m"
echo -e "  FABRICANTE: \e[1;34m$FABRICANTE_MAC_ORIGINAL\e[0m"
echo -e "MAC ORIGINAL: $MAC_ORIGINAL "
echo -e "  MAC ACTUAL: \e[1;31m$MAC_ACTUAL\e[0m $FABRICANTE_MAC_FALSA"
echo "======================================================/"
done
exit
elif [ "$1" = "-r" -o "$1" = "--restore" ]; then
if [ $(/usr/bin/id -u) != 0 ]; then
    echo -e "Privileges \e[0;31mroot\e[0m---&gt; \e[1;31mError\e[0m"
    exit
fi
conditional_clear
#Definir clientes DHCP
if ps -A | grep dhcpcd &amp;&gt;${chamac_output_device}; then
    dhcpclientrestore=dhcpcd
fi

if ps -A | grep dhclient &amp;&gt;${chamac_output_device}; then
    dhcpclientrestore=dhclient
fi

if ps -A | grep pump &amp;&gt;${chamac_output_device}; then
    dhcpclientrestore=pump
fi

#Comprobar el daemon del sistema
readarray -t listadedaemons &lt; &lt;(echo "/etc/rc.d/rc.inet1
/etc/rc.d/wicd
/etc/rc.d/rc.wicd
/etc/rc.d/network-manager
/etc/rc.d/rc.network-manager
/etc/init.d/wicd
/etc/init.d/network-manager")

for comprobandodaemon in ${listadedaemons[@]}; do
if [ -e "$comprobandodaemon" ]; then
    chamac_detected_daemon="$comprobandodaemon"
    break
fi
done

if [[ "${chamac_detected_daemon}" != "" ]]; then
    "$chamac_detected_daemon" stop &amp;&gt;${chamac_output_device}
  else
    killall -9 wpa_supplicant &amp;&gt;$chamac_output_device
    killall -9 $dhcpclient &amp;&gt;$chamac_output_device
fi
#Comprobar las MAC


for INTERFACE in ${interfaces[@]}; do
    rutasecundaria=$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?&lt;=").*(?=")')
    if [ $rutasecundaria ]; then
    MAC_ORIGINAL=$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?&lt;=").*(?=")')
    else
    if [ -e /sys/class/net/$INTERFACE/phy80211/addresses ]; then
  MAC_ORIGINAL=$(cat /sys/class/net/$INTERFACE/phy80211/addresses)
    else
  rutaultima=$(ethtool -P $INTERFACE | grep Permanent)
    if [ "ethtool -P $INTERFACE | grep Permanent" ]; then
  MAC_ORIGINAL=$(ethtool -P $INTERFACE | grep Permanent | awk '{print $3}')
    else
  MAC_ORIGINAL="??:??:??:??:??:??"
    fi

    fi
     fi
   
    while [ "$MAC_ORIGINAL" != "$MAC_ACTUAL" ]; do
    ifconfig $INTERFACE down &amp;&gt;${chamac_output_device}
    ip link set $INTERFACE address $MAC_ORIGINAL &amp;&gt;${chamac_output_device}
    ifconfig $INTERFACE up &amp;&gt;${chamac_output_device}
    break &amp;&amp; $0 -r
    conditional_clear
done
done
#Reiniciar las daemons
if [ "$chamac_detected_daemon" != "" ]; then
    "$chamac_detected_daemon" start &amp;&gt;${chamac_output_device}
  else
    #Reiniciar posible servicio DHCP
      if [ "$chamac_detected_daemon" == "" ]; then
  if [ $dhcpclient ]; then
      sleep 2
      $dhcpclient &amp;&gt;${chamac_output_device}
  fi
      fi
fi
$0 -s
exit
elif [ "$1" = "-a" -o "$1" = "--autostart" ]; then
    conditional_clear
    echo -ne "Privileges \e[0;31mroot\e[0m---&gt; "
if [ $(/usr/bin/id -u) = 0 ]; then
    echo -e "\e[1;32mOK!\e[0m"
else
    echo -e "\e[1;31mError\e[0m"
    exit
fi
echo -ne "Chamac \e[0;31minstalldir\e[0m---&gt; "
if [ $ruta = /usr/bin/chamac ]; then
    echo -e "\e[1;32mOK!\e[0m"
else
    echo -e "\e[1;31mError\e[0m"
    echo
    echo -e "Use \e[1;33mcp chamac /usr/bin/\e[0m"
    exit
fi
echo -ne "Does \e[0;31mSUDO\e[0m system exist? ---&gt; "
if [ $autoboot = 1 ]; then
    rm -f /etc/xdg/autostart/autochamac.desktop
    sed -i '/\/usr\/bin\/chamac/d' /etc/sudoers
if [ -f /etc/sudoers ]; then
    echo -e "\e[1;32mYes\e[0m"
else
    echo -e "\e[1;31mNo\e[0m"
fi
elif [ $autoboot = 0 ]; then
    echo "[Desktop Entry]
    Exec=/usr/bin/chamac
    StartupNotify=true
    Terminal=false
    Type=Application
    X-GNOME-Autostart-enabled=true"&gt; /etc/xdg/autostart/autochamac.desktop
if [ -f /etc/sudoers ]; then
  echo -e "\e[1;32mYes\e[0m"
echo "$(logname) ALL=(root) NOPASSWD: /usr/bin/chamac" &gt;&gt;/etc/sudoers
  perl -pi -e 's/\/usr\/bin\/chamac/sudo \/usr\/bin\/chamac/g' /etc/xdg/autostart/autochamac.desktop
else
  echo -e "\e[1;31mNo\e[0m"
fi
fi
echo
$0 -h
echo
echo -e "Ten en cuenta que tendras que dar los permisos necesarios para que el script se ejecute como \e[1;31mroot\e[0m junto con el sistema, sino, no tendra efecto"
exit
elif [ "$1" = "-M" -o "$1" = "--MAC" ]; then
echo -ne "Privileges \e[0;31mroot\e[0m---&gt; "
if [ $(/usr/bin/id -u) = 0 ]; then
    echo -e "\e[1;32mOK!\e[0m"
else
    echo -e "\e[1;31mError\e[0m"
    exit
fi
custommac="$(echo $2 | grep -oiE '([0-9A-F]{2}:){5}[0-9A-F]{2}$')"
if [ $custommac ]; then
    custommacmode=1
elif [ -z $2 ]; then
    echo -e "No se ha especificado ninguna \e[1;31mMAC\e[0m"
    exit
  else
    echo -e "La MAC \e[1;31m$2\e[0m no es una \e[1;31mMAC\e[0m valida"
    exit
fi
elif [ "$1" = "-h" -o "$1" = "--help" ]; then
echo "Chamac v0.9-5 (Change all MAC)"
echo "Uso: chamac [options]"
echo
echo "  -a,  --autostart Inicia el script con el sistema"
echo -e " Estado actual: $autobootstatus"
echo "  -u,  --update Actualiza la Base de Datos MAC"
echo -e " Base Actual: \e[1;31m$dbMAC\e[0m"
echo "  -m,  --macchanger Usar macchanger para generar MAC"
echo "  -M,  --MAC XX:XX:XX:XX:XX:XX Usa la MAC XX:XX:XX:XX:XX:XX"
echo "  -e,  --ending Mantener bytes del fabricante"
echo "  -A,  --another Usar MAC de otro fabricante"
echo "  -r,  --restore Restaura las MAC Original"
echo "  -s,  --show Muestra todas las MAC"
echo "  -l,  --list Muestra todos los Fabricantes"
echo
echo "  -h,  --help Muestra la pantalla de ayuda"
echo "  -v,  --version Muestra la version de la herramienta"
echo
echo "Reporta los fallos a vk18496@gmail.com"
exit
fi
let totalmode=$anothermode+$endingmode+$macchangermode+$custommacmode
conditional_clear
echo -e "=========================================="
echo -e "|           \e[1;34mChaMAC\e[0m 0.9-5 by vk496        |"
echo -e "|                                        |"
echo -e "|          netenti.blogspot.com          |"
echo -e "|                                        |"
echo -e "|    Pequeño script para cambiar todas   |"
echo -e "|  las direcciones MAC de tu PC por unas |"
echo -e "|  aleatorias. Usa \e[1;32mchamac --help\e[0m para    |"
echo -e "|  mas info.                             |"
echo -e "|                                        |"
echo -e "|     Para \e[1;31mwww.seguridadwireless.net\e[0m     |"
echo -e "=========================================="
echo -e
echo
# Comprobar que macchanger esta actulizado
# 53 lineas = vieja
# 52 lineas = version Ubuntu
# 219 lineas =version 2013

echo -ne "Privileges \e[0;31mroot\e[0m---&gt; "
if [ $(/usr/bin/id -u) = 0 ]; then
    echo -e "\e[1;32mOK!\e[0m"
else
    echo -e "\e[1;31mError\e[0m"
    exit
fi
echo -ne "Chamac \e[0;31minstalldir\e[0m---&gt; "
if [ $ruta = /usr/bin/chamac ]; then
    echo -e "\e[1;32mOK!\e[0m"
else
    echo -e "\e[1;31mError\e[0m"
    echo
    echo -e "Use \e[1;33mcp chamac /usr/bin/\e[0m"
    exit
fi
echo -ne "Autoboot Status---&gt; "
if [ $autoboot = 1 ]; then
    echo -e "$autobootstatus"
elif [ $autoboot = 0 ]; then
    echo -e "$autobootstatus"
fi

echo -ne "Chamac Database---&gt; "
if [ $dbMAC = "N/A" ]; then
    echo -e "\e[1;33mNot installed\e[0m (use \e[1;31mchamac --update\e[0m)"
else
    echo -e "\e[1;32mOK!\e[0m"
    echo -e " Database: \e[1;31m$dbMAC\e[0m"
fi

echo -ne "Chamac Mode-------&gt; "
if [ $macchangermode = 1 ]; then
    echo -e "\e[1;32mMacchanger\e[0m"
if type macchanger &amp;&gt;${chamac_output_device}; then
echo -ne "\e[0;31mmacchanger\e[0m Status-&gt; "
if [ $(cat $(which macchanger) | wc -l) = 53 ]; then
    echo -e "\e[1;33mObsoleted\e[0m"
    macchangerviejo=1
  else
    echo -e "\e[1;32mOK!\e[0m"
    macchangerviejo=0
fi
else
    echo -e "\e[1;31mNot installed!\e[0m"
    exit
fi
elif [ $custommacmode = 1 ]; then
      echo -e "\e[1;32mCustom\e[0m"
elif [ $endingmode = 1 ]; then
      echo -e "\e[1;32mEnding\e[0m"
elif [ $anothermode = 1 ]; then
      echo -e "\e[1;32mAnother\e[0m"
if [ "$OUIruta" = "N/A" ]; then
  echo
          echo -e "\e[1;31mDatabase not installed!\e[0m"
  exit
fi
elif [ $totalmode = 0 ]; then
    echo -e "\e[1;32mNormal\e[0m"
    fi
#Buscar posibles clientes DHCP
clientesdhcp() {
if ps -A | grep dhcpcd &amp;&gt;${chamac_output_device}; then
    dhcpclient=dhcpcd
fi

if ps -A | grep dhclient &amp;&gt;${chamac_output_device}; then
    dhcpclient=dhclient
fi

if ps -A | grep pump &amp;&gt;${chamac_output_device}; then
    dhcpclient=pump
fi
}
#Comprobar el daemon del sistema
clientedaemon() {
readarray -t listadedaemons &lt; &lt;(echo "/etc/rc.d/rc.inet1
/etc/rc.d/wicd
/etc/rc.d/rc.wicd
/etc/rc.d/network-manager
/etc/rc.d/rc.network-manager
/etc/init.d/wicd
/etc/init.d/network-manager")

for comprobandodaemon in ${listadedaemons[@]}; do
if [ -e "$comprobandodaemon" ]; then
    chamac_detected_daemon="$comprobandodaemon"
    break
fi
done

if [[ "${chamac_detected_daemon}" != "" ]]; then
    "$chamac_detected_daemon" stop &amp;&gt;${chamac_output_device}
  else
    killall -9 wpa_supplicant &amp;&gt;$chamac_output_device
    killall -9 $dhcpclient &amp;&gt;$chamac_output_device
fi
detectarmac
}
detectarmac() {
lista=$(echo ${interfaces[@]} | wc -w)
echo
echo -e "Network inteface/s: \e[0;31m$lista\e[0m "
echo
echo -e "\e[1;31m${interfaces[@]}\e[0m"
echo
echo
sleep 3
cambiarmac
}
cambiarmac() {
mac() {
#Cambiar MAC con ifconfig
viaifconfig() {

for (( c=1; c&lt;=3; c++ ))
do

for INTERFACE in ${interfaces[@]}; do
    MAC_ACTUAL="$(cat /sys/class/net/$INTERFACE/address)"
   
  until [ -N $MAC_ACTUAL ]; do
      ifconfig $INTERFACE down &amp;&gt;${chamac_output_device}
      ip link set $INTERFACE down &amp;&gt;${chamac_output_device}     
    if [ $endingmode = 1 ]; then
rutasecundaria=$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?&lt;=").*(?=")')
    if [ $rutasecundaria ]; then
MAC_ORIGINAL=$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?&lt;=").*(?=")')
      else
  if [ -e /sys/class/net/$INTERFACE/phy80211/addresses ]; then
      MAC_ORIGINAL=$(cat /sys/class/net/$INTERFACE/phy80211/addresses)
    else
      rutaultima=$(ethtool -P $INTERFACE | grep Permanent)
if [ "ethtool -P $INTERFACE | grep Permanent" ]; then
    MAC_ORIGINAL=$(ethtool -P $INTERFACE | grep Permanent | awk '{print $3}')
  else
    MAC_ORIGINAL="??:??:??:??:??:??"
fi
  fi
    fi
   
ip link set dev $INTERFACE address $(echo "$(echo $MAC_ORIGINAL| tr -d : |cut -c 1-6)$(openssl rand -hex 3)"| sed 's/\(..\)/\1:/g; s/.$//') &amp;&gt;${chamac_output_device}

    fi
    if [ $custommacmode = 1 ]; then
      ip link set dev $INTERFACE address $custommac &amp;&gt;${chamac_output_device}
      echo $custommac &amp;&gt;${chamac_output_device}
      fi
    if [ $anothermode = 1 ]; then
        listado=$(cat $OUIruta | awk '{ gsub("-", "", $1); gsub(":", "", $1); gsub("/[00-99]+$","",$1 ); print $1}' | grep ^[0-9A-F] | grep -v ^FFFFFFFFFFFF | shuf -n 1)
let anotherMACrandom=12-$(echo $listado | wc -L)
ip link set dev $INTERFACE address $(echo "$(echo $listado)$(echo $(&lt; /dev/urandom tr -dc A-F0-9 | head -c$anotherMACrandom))"| sed 's/\(..\)/\1:/g; s/.$//') &amp;&gt;${chamac_output_device}
    fi
    if [ $totalmode = 0 ]; then
   ip link set dev $INTERFACE address $(openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//') &amp;&gt;${chamac_output_device}
  fi
  break
  conditional_clear
done
done

done

}

#Cmabar MAC con macchanger
viamacchanger() {
for interfaz in "${interfaces[@]}"; do
    ifconfig $interfaz down &amp;&gt;${chamac_output_device}
    ip link set $interfaz down &amp;&gt;${chamac_output_device}
    macchanger -r $interfaz &amp;&gt;${chamac_output_device}
done
}
if [ $macchangermode = 0 ]; then
    viaifconfig
elif [ $macchangermode = 1 ]; then
    viamacchanger
fi
conditional_clear
interfacesup
}
interfacesup() {
#Levantar interfaces
for curInterfaceup in "${interfaces[@]}"; do
    ifconfig $curInterfaceup up &amp;&gt;${chamac_output_device}
    ip link set $curInterfaceup up &amp;&gt;${chamac_output_device}
done
listo
}
mac
}
listo() {
for INTERFACE in ${interfaces[@]}; do
    rutasecundaria=$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?&lt;=").*(?=")')
  if [ $rutasecundaria ]; then
      MAC_ORIGINAL=$(cat /etc/udev/rules.d/70-persistent-net.rules | grep $INTERFACE | awk '{print $4}' | grep -o -P '(?&lt;=").*(?=")')
    else
if [ -e /sys/class/net/$INTERFACE/phy80211/addresses ]; then
    MAC_ORIGINAL=$(cat /sys/class/net/$INTERFACE/phy80211/addresses)
  else
    rutaultima=$(ethtool -P $INTERFACE | grep Permanent)
      if [ "ethtool -P $INTERFACE | grep Permanent" ]; then
  MAC_ORIGINAL=$(ethtool -P $INTERFACE | grep Permanent | awk '{print $3}')
else
  MAC_ORIGINAL="??:??:??:??:??:??"
      fi
fi
  fi
    MAC_ACTUAL="$(cat /sys/class/net/$INTERFACE/address)"
   
if [ ! $OUIruta = "N/A" ]; then
    MAC_O="$(echo $MAC_ORIGINAL| tr -d : | tr '[:lower:]' '[:upper:]')"
    MAC_A="$(echo $MAC_ACTUAL| tr -d : | tr '[:lower:]' '[:upper:]')"
    MAClist=$(cat $OUIruta | awk '$3 == "#"{ gsub("-", "", $1); gsub(":", "", $1); gsub("/[00-99]+$","",$1 ); gsub(/^ */,"", $1); {t=$1; $1=$2=$3=""; sub(/^[[:space:]]+/, ""); $0=t" "$0}; print}')
    i=6

while [ $i -le 12 ]; do
      SEARCHING_RESULT_o=$(echo "$MAClist" |grep ^${MAC_O:0:i})
      SEARCHING_EXITCODE_o=$?
      lineas_o=$(echo "$SEARCHING_RESULT_o" | wc -l)
     if [ "$lineas_o" = 1 ]; then
if [ "$SEARCHING_EXITCODE_o" = 0 ]; then
    FABRICANTE_MAC_ORIGINAL=$(echo "$SEARCHING_RESULT_o"|cut -d " " -f 2-22)
fi
     fi

SEARCHING_RESULT=$(echo "$MAClist" |grep ^${MAC_A:0:i})
      SEARCHING_EXITCODE=$?
      lineas=$(echo "$SEARCHING_RESULT" | wc -l)
     if [ "$lineas" = 1 ]; then
if [ "$SEARCHING_EXITCODE" = 0 ]; then
FABRICANTE_MAC_FALSA="(\e[1;34m$(echo "$SEARCHING_RESULT"|cut -d " " -f 2-22)\e[0m)"
fi
break
     fi
     
     
    let i=i+1
done

  else
      FABRICANTE_MAC_ORIGINAL="\e[1;31mN/A\e[0m"
      FABRICANTE_MAC_ORIGINAL="\e[1;31mN/A\e[0m"
fi
if [ -z "$FABRICANTE_MAC_ORIGINAL" ]; then
  FABRICANTE_MAC_ORIGINAL="unknown"
fi

if [ "$FABRICANTE_MAC_FALSA" = "($FABRICANTE_MAC_ORIGINAL)" ]; then
    FABRICANTE_MAC_FALSA=""
fi


    echo "======================================================\\"
echo -e "   INTERFACE:\e[1;35m $INTERFACE \e[0m"
echo -e "  FABRICANTE: \e[1;34m$FABRICANTE_MAC_ORIGINAL\e[0m"
echo -e "MAC ORIGINAL: $MAC_ORIGINAL "
echo -e "  MAC ACTUAL: \e[1;31m$MAC_ACTUAL\e[0m $FABRICANTE_MAC_FALSA"
echo "======================================================/"
done
echo
if [ $custommacmode = 1 ]; then
echo -e "Nota: Hay direcciones \e[1;31mMAC\e[0m que \e[1;31mNO\e[0m se pueden usar (si eso pasa, prueba con otra \e[1;31mMAC\e[0m)"
fi
echo
echo -e "\e[1;36mReiniciando interfaces y DHCP\e[0m ... "
sleep 3
echo -e "Mediante \e[1;33mifconfig\e[0m podras comprobar que la mac realmente ha cambiado."

if [ "$chamac_detected_daemon" != "" ]; then
echo -e "Iniciando servcio \e[1;31m${chamac_detected_daemon}\e[0m"
"$chamac_detected_daemon" start &amp;&gt;${chamac_output_device}
else
    #Reiniciar posible servicio DHCP
if [ "$chamac_detected_daemon" == "" ]; then
  if [ $dhcpclient ]; then
    sleep 2
    $dhcpclient &amp;&gt;${chamac_output_device}
    echo -e "Cliente \e[1;31m$dhcpclient\e[0m reiniciado"
  fi

fi
fi
echo
echo -e "Recuerda revisar las demas opciones con \e[1;32mchamac --help\e[0m"
echo
echo -e "Tareas realizadas ... Hasta pronto :)"
exit
}
clientesdhcp &amp;&amp; clientedaemon

Para instalarlo, tenemos que crear un archivo con el nombre chamac.
Después, darle permisos de ejecución:
Código:
chmod +x chamac

Y por ultimo, copiar el script a /usr/bin con:

Código:
cp chamac /usr/bin/

Espero que puedan apreciar la obra maestra de un novato  ;D ;D

Salu2
6  Seguridad Informática / Hacking Ético / Bypass Firewall/DNS en: 7 Octubre 2013, 19:43 pm
Buenas a todos. Actualmente, en la red de mi instituto, tengo un servidor proxy (y un DNS también si no me equivoco) que regula las conexiones. He estado investigando sobre como poder saltármelo (por que el bypass de las networks me interesa mucho), pero no encuentro la forma.

El servidor proxy (que también es la puerta de enlace) no permite el flujo de datos TCP (nose si me he explicado bien). Me refiero, a que si yo hago un ping a google.es, me devuelve la IP, pero obtengo un 100% de paquetes perdidos. Sin embargo, si hago lo mismo para la red interna, no hay ningún problema.

He intentado con SSH Tunneling y VPN, pero no consigo establecer conexión con mi servidor (supongo que es debido a lo que mencioné anteriormente). Por el contrario, si intento conectarme via ssh al servidor proxy (tiene unos cuantos puertos abiertos, entre ellos el 22), recibo petición de conexión.

Hay alguna cosa que se me escape para conseguirlo?

Salu2
7  Programación / Scripting / [Bash] Asignar una variable a cada output en: 7 Septiembre 2013, 20:42 pm
Benas a todos, estoy conociendo el mundo del bash, y creando un pequeño script para cambiar todas las MAC de mi PC...

Con el comando
Código:
ip link | awk '/</ { print $2 }' | awk -F: '!/lo/ {print $1}'
imprimo todas las tarjetas de red (esta es la salida):

Citar
eth0
wlan0

Ahora me gustaría saber como puedo crear algún tipo de función o algo que le asigne una variable a cada una de las salidas. Algo así como:

var1=eth0
var2=wlan0
...

Luego, tengo que conseguir que un comando pase todas esas variables por el macchanger (pero eso mas adelante, si sobrevivo a esto  :xD )

Espero que alguien me pueda decir si se puede hacer esto, y si es posible... como?

Salu2
8  Seguridad Informática / Hacking Ético / MITM Cookie de aplicación móvil Tuenti en: 4 Septiembre 2013, 18:47 pm
Hola, buenas a todos, estoy tonteando estos dias con mi red y haciendo pruebas, y me ha dado por probar con el sniffing... He conseguido algunas cosillas a través de las cookies, y lo que me gustaría saber es como usar esto que obtengo cuando me logueo a través de la aplicación de Tuenti para móviles:

Citar
{"version":"0.7.1","requests":[["getChallenge",{"type":"login"}]]}
Citar
{"version":"0.7.1","requests":[["getSession",{"passcode":"444bcc876b85a15716249050f5ef72d5","seed":"hfOc2PvTCvVu+kvZUIAIt0KTlA4L29aZWtcCG2GJgtw=","email":"pepe@gmail.com","timestamp":1378322678,"application_key":"MDI3VDFmZjU4MGExNWM0YmEyYjA5MzRkODlmMjg0MTU6MC43NzQ4ODAwMCAxMjP1NDcyNjgz"}],["getVersion",{}]]}

Que puedo hacer con esto¿?   :rolleyes:

Salu2
9  Seguridad Informática / Análisis y Diseño de Malware / Contagiar el email en: 10 Septiembre 2012, 13:26 pm
Bueno, vi mucho por internet el tema de los virus por email, y mas precisamente la frase "si ves un email sospechoso, no lo abras"

Pues venia a preguntar como consiguen eso? es decir, esta claro que puedes meterlo como adjunto, pero hacer que se ejecute cuando abras el email.... como?

Me gustaria descubrir como se aprovechan los virus de este mundillo....

Salu2
10  Seguridad Informática / Hacking Ético / Problema tras actualizar Metasploit en: 26 Mayo 2012, 14:21 pm
Buenas, vengo a preguntaros sobre un problema que tengo en mi Ubuntu 12.04 LTS

Recientemente instalé Metasploit con sus dependencias y no hubo ningun problema para usarlo, pero cuando lo actualicé con msfupdate no me deja arrancarlo y me saca este error:

Código:
root@vk496:/# sudo msfconsole
/usr/lib/ruby/vendor_ruby/1.8/rubygems.rb:1177:in `remove_method': method `gem' not defined in Kernel (NameError)
from /usr/lib/ruby/vendor_ruby/1.8/rubygems.rb:1177
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /opt/metasploit-4.1.4/msf3/lib/packetfu/packetfu.rb:11
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /opt/metasploit-4.1.4/msf3/lib/packetfu.rb:3
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /opt/metasploit-4.1.4/msf3/lib/msf/core/db.rb:26
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /opt/metasploit-4.1.4/msf3/lib/msf/core/db_manager.rb:4
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /opt/metasploit-4.1.4/msf3/lib/msf/core/framework.rb:68
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /opt/metasploit-4.1.4/msf3/lib/msf/core.rb:33
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /opt/metasploit-4.1.4/msf3/lib/msf/ui/console/driver.rb:1
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /opt/metasploit-4.1.4/msf3/lib/msf/ui/console.rb:10
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /opt/metasploit-4.1.4/msf3/lib/msf/ui.rb:10
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `fastlib_original_require'
from /opt/metasploit-4.1.4/msf3/lib/fastlib.rb:368:in `require'
from /usr/local/bin/msfconsole:128

Intenté reinstalar el rubygems pero me sigue dando el mismo problema....

Alguna sugerencia¿

Gracias a todos de antemano, Salu2
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines