H1RD SECURITY

Lenguaje de programación Lua Parte 1

Lua es un lenguaje de programación bastante ligero. Fue creado en 1993 por un grupo de universitarios de Rio de Janeiro. Es un lenguaje bastante interesante de aprender ya que Wireshark y Nmap usan Lua como lenguaje para sus scripts. Fue creado para ofrecer una tecnologia extensible,fue sobre todo para integrarse con C, tiene una sintaxis sencilla, es eficiente y portable. La pagina web del proyecto es Lua.org alli podras ver como descargarte Lua, funciona tanto en Windows, Linux o Mac.

##Cualidades interesantes

  • Es un lenguaje de script muy rapido
  • Puede correr en cualquier lado donde haya un compilador de C
  • Meta focused
  • Pequeño, solo 20k lineas de codigo en C.
  • Gratuito

Tipos de variables en Lua

Hay 8 basicos:

  • nil: es parecido a Null
  • boolean: igual que en otros muchos lenguajes, puede ser verdadero o falso, true o false.
  • number: en Lua todos los numeros son double, numeros reales con decimales.
  • string: igual que en otros muchos lenguajes, son una secuencia de caracteres, y es inmutable, cada vez que se cambia un string, se crea un nuevo con el nuevo valor.
  • userdata: este tipo permite guardar codigo en C dentro de variables de Lua.
  • function: en Lua, las funciones son variables.
  • thread: tipo especial en Lua para la programación en multithreading.
  • table: este tipo especial de lua, implementa arrays asociativos que permite almacenar cualquier tipo de datos de Lua excepto nil.

Asignación de variables en Lua

Igual que pasa en python la asignación de variables es dinamica. En el ejemplo de abajo un ejemplo basico de un Hello World.

Hello World en Lua.
1
2
msg = "hello world"
print(msg)

Una de las primeras cosas que llama la atención de Lua, es que las variables no inicializadas, al usarse, no lanzan una excepción, simplemente, devuelven el tipo nil.

Print de una variable no inicializada en Lua.
1
print(message)
Por cierto, los comentarios en lua son mediante dos guiones \-\-

Operadores

Como en muchos lenguajes de programación, en Lua los operadores son bastante similares, en casi todos, tiene sus cosas especiales.

  • Aritmeticos (+, -, *, /…)
  • Relacionales (< , >, <=,=>,== y ~= que es diferente en Lua)
  • Logicos (and, not, or)
  • Unir Strings, en Lua es mediante .. ejemplo “Hola” .. “Mundo”
  • Para saber la longuitud de un string o de un array, seria asi #frase
Para sacar la virgulilla de la eñe o ~ en windows es alt + 126 del teclado numerico, en linux es ALTGR + Ñ

If / Then / Else en Lua

Como en otros lenguajes de programación, Lua logicamente tiene un If/else/then,

Ejemplo de If/else/then en Lua.
1
2
3
4
5
6
7
   if answer < number then
print "too low"
elseif answer > number then
print "too high"
else
print "perfect"
end

Bucles en Lua

En Lua hay 4 bucles, muy parecidos al resto de lenguajes de programación.

  • while, igual que los while en c#, primero comprueba la condicion, si esta es correcta, sigue si es falsa termina,
Ejemplo de while en Lua.
1
2
3
4
5
  local i = 1
while i<10 do
print(a[i])
i = i + 1
end
  • repeat .. until, es un inverso a while, algo parecido a un do..while, se ejecuta al menos una vez.
Ejemplo de repeat .. until en Lua.
1
2
3
4
  repeat
line = os.read()
until line ~= ""
print(line)
  • for (numerico), es algo parecido a un for en c# o en java. En el ejemplo siguiente, es un for que imprimira 10 veces el valor i.
Ejemplo de for (numerico) en Lua.
1
 for i =1,10 do print(i) end
  • for (generico) es parecido a un foreach.
Ejemplo de for (generico) en Lua.
1
 for i,v in ipairs(a) do print(v) end
Siempre se puede salir de un loop con un break.

Scope en Lua

En Lua, por defecto todas las variables son globales, esto puede llegar a ser bastante horrible, por lo que para que una variable sea local, es decir solo exista dentro de un for, o una funcion es recomendable usar la key local

Ejemplo de variable local en Lua.
1
 local name = "h1rd"

Proximamente

Para seguir con el curso, el proximo articulo sera sobre funciones en Lua

  • Injection (7)
  • Hacker (39)
  • Owasp (17)
  • Intro (10)
  • Hijacking (5)
  • Protocolos (6)
  • Http (5)
  • Telnet (1)
  • Xss (5)
  • Fiddler (2)
  • Programacion (2)
  • Lua (2)
  • Pentesting (16)
  • Nmap (9)
  • Firewall (1)
  • Ids (1)
  • Recon-ng (3)
  • Protocolos (3)
  • Articulos (1)
  • Metasploit (5)
  • Metasploitable2 (5)
  • Hydra (1)