Guía práctica para hackear las páginas del Congreso

Según Wikipedia, un hacker es:

«A person who enjoys exploring the details of programmable systems and stretching their capabilities, as opposed to most users, who prefer to learn only the minimum necessary.»

Algunos creen equivocadamente que hacker = malechor, delincuente. Pero lo cierto es que hay varios tipos de hackers.

  • Aquel que infringe medidas de seguridad con fines maléficos, también se le conoce como «cracker».
  • Un miembro de la comunidad Unix de programas de computación libre y «open source», o alguien que usa este principio para desarrollo de software o hardware.

Además individuos considerados como hackers de la subcultura de programadores pueden hacer tareas repititivas de 100 a 1,000 veces más rapido que usuarios que no son hackers (gracias a que usan de técnicas de computación avanzadas).

El congreso peruano ha aprobado una ley de delitos informáticos recontra ridícula que ha sido criticada por muchos, por ejemplo en el blog http://iriartelaw.com y http://www.hiperderecho.org, además de ser considerada una ley Frankenstein. Esto evidencia que el congreso legisla sobre temas que desconoce.

Para demostrar qué tan mal redactada está la ley ex-beingolea. He decidido hackear las páginas web del Congreso de la República. Y aquí detallo el procedimiento.

Quiero hacer uso de programas informáticos para averiguar cúantos proyectos de ley ha propuesto cada congresista durante este año 2013.

Hay que buscar la página web del congreso que tiene la lista de los proyectos de ley emitidos este año:

Buscar la página con los proyectos de ley.

Buscar la página con los proyectos de ley.

Listado de proyectos de ley por fecha.

Listado de proyectos de ley por fecha.

Si vemos el código original HTML de esa página (hacer CTRL-U, si están en Mozilla Firefox) veremos que está compuesta de 4 «frames». Cada «frame» corresponde a una parte de la página. Me interesa el último «frame», el que contiene la lista de links a los proyectos de ley.

Código HTML de la página del congreso

Código HTML de la página del congreso

Si hacemos click al último «frame» nos encontramos con esta página:

"Frame" conteniendo la lista de proyectos de ley.

«Frame» conteniendo la lista de proyectos de ley.

Esta página lista 100 proyectos de ley, y al ver la dirección URL de esta página, nos damos cuenta que basta con cambiar el último parámetro Start=1 por Start=100 para obtener los siguientes 100 proyectos de ley.

Osea cambiar:

http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2011.nsf/PAporNumeroInverso?OpenView&Start=1

por:

http://www2.congreso.gob.pe/Sicr/TraDocEstProc/CLProLey2011.nsf/PAporNumeroInverso?OpenView&Start=100

Puedo escribir un hack (osea script) que me colecte rápidamente todas las páginas que contienen los links. En lugar de bajarme documento por documento (lo cual me tomaría muuuuucho tiempo), lo puedo hacer al toque si hago uso de las tecnologías de información y comunicación que tanto miedo causa a los congresistas:

Hay 812 proyectos de ley para examinar. Necesitamos descargar cada proyecto de ley y copiar la lista de autores para contar cuántos proyectos ha sido emitido por cada congresista. Obviamente hacer esto manualmente me demoraría una eternidad. Para eso he creado un segundo hack. Es un script in Python que examina cada link, y extrae los nombres de los congresistas que son autores de cada proyecto de ley. Junta todos los nombres y hace un gráfico para poder visualizar los datos (el código de programación está al final de este post).

Bueno, el script estaba demorando mucho, me cansé de esperar y cancelé el programa por lo que no pude colectar toda la info. Pero la idea se entiende no?

Número de proyectos de ley presentado por cada congresista durante el 2013

Número de proyectos de ley presentado por cada congresista durante el 2013

Aquí se pueden descargar la dichosa ley http://www.hiperderecho.org/wp-content/uploads/2013/09/nuevaleybeingolea.pdf.

Hagamos recuento de las veces que he faltado a la ley:

Artículo 3. Atentado a la integridad de datos informáticos

El que, a través de las tecnologias de la información o de la comunicación, introduce,
borra, deteriora, altera, suprime o hace inaccesibles datos informáticos
, será reprimido
con pena privativa de libertad

-> Al escribir este post he introducido datos informáticos al servidor de WordPress usando tecnologías de la comunicación.

Articulo 6. Tráfico ilegal de datos

El que, crea, ingresa, o utiliza indebidamente una base de datos sobre una persona natural o jurídica, identificada o identificable, para comercializar; traficar, vender, promover, favorecer o facilitar información relativa a cualquier ámbito de la esfera personal, familiar, patrimonial, laboral, financiera u otro de naturaleza análoga, creando o no perjuicio, será reprimido con pena privativa de libertad no menor de tres ni mayor de cincó años.

-> Al bajarme la lista de proyectos de Ley del Congreso he ingresado a su base de datos para facilitar la información relativa al ámbito laboral de cada congresista sin crear perjuicio (ojo que no es necesario causar perjuicio para ir en contra de la ley).

Artículo 1O. Abuso de mecanismos y dispositivos informáticos

El que fabrica, diseña, desarrolla, vende, facilita, distribuye, importa u obtiene para su utilización, uno o más mecanismos, programas informáticos, dispositivos, contraseñas, códigos de acceso o cualquier otro dato informático, específicamente diseñados para la comisión de los delitos previstos en la presente Ley, o el que ofrece o presta servicio que contribuya a ese propósito, será reprimido con pena privativa de libertad no menor de uno
ni mayor de cuatro años y con treinta a noventa días-multa.

-> En este post publico el programa informático que he fabricado, diseñado y desarrollado con el fin de específicamente incumplir los artículos 3 y 6 de la presente Ley.

Conclusión

He violado la ley de delitos informáticos (ley ex-beingolea) 3 veces

Señores congresistas métanme preso. Quiero cárcel dorada como Antauro y Fujimori. Gracias.

Sección para geeks

Aqui está el código para bajarse los nombres de los congresistas que fueron autores de proyectos de ley durante el 2013:


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socks
import cookielib
import socket
from bs4 import BeautifulSoup
import requests
import sys
import re
from os import listdir
import codecs
import urllib2
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
def extract_doc_links(soup):
our_links = []
for link in soup.find_all("a"):
if re.search("201[0-9]-CR$", link.get_text()):
href = link.get("href")
if href.endswith("ocument"):
our_link = "http://www2.congreso.gob.pe" + "/" + href
our_link = re.sub("//Sicr","/Sirc", our_link)
our_links.append(our_link)
return our_links
def parse_names(string):
"""
Parse string of names. Output only family name as list.
"""
names = []
for i in string.split(","):
i = re.sub("\s{2}.+", "", i)
names.append(i)
return names
def get_authors_from_project(document_link):
"""
input: link to project page
output: list of author names as list
Using tor, found help here:
http://stackoverflow.com/questions/10967631/how-to-make-http-request-through-a-tor-socks-proxy-using-python
"""
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders = [('Accept-Charset', 'utf-8')]
request = urllib2.Request(document_link)
request.add_header('Cache-Control','max-age=0')
response = opener.open(request)
proyecto = BeautifulSoup(response.read().decode("utf-8"))
del request
del response
for i in proyecto.find_all("input"):
if i.get("name") == "NomCongre":
return parse_names(i.get("value"))
## ————————————————
def main():
all_links = []
for file in listdir("."):
if file.startswith("PA"):
print file
f = open(file, "r")
html_doc = f.read()
f.close()
soup = BeautifulSoup(html_doc)
all_links += extract_doc_links(soup)
print "Numero de proyectos de ley: %i " % len(all_links)
# Save names to file
f = codecs.open("all_authors.csv", "w", "utf-8")
f.write("Congresista\n")
f.close()
f = codecs.open("all_authors.csv", "a", "utf-8")
for link in all_links:
authors = get_authors_from_project(link)
for author in authors:
f.write(author + "\n")
f.close()
if __name__ == "__main__":
main()

Y aquí el código para plotear los datos:


# -*- coding: utf-8 -*-
import codecs
import prettyplotlib as ppl
import numpy as np
from prettyplotlib import plt
import csv
x = []
y = []
with open("all_authors.csv_bak", "rb") as csvfile:
f = csv.reader(csvfile, delimiter=",")
for row in f:
x.append(row[1].decode("utf-8"))
y.append(row[0])
y = map(int, y)
plt.rc('font', **{'family': 'DejaVu Sans'})
fig, ax = plt.subplots(1, figsize=(20,6))
width = 0.35
ind = np.arange(len(y))
xdata = ind + 0.05 + width
ax.bar(ind, y)
ax.set_xticks(ind + 0.5)
ax.set_xticklabels(x, rotation="vertical")
ax.autoscale()
ax.set_title(u'Ranking de proyectos de ley por congresista',
fontdict = {'fontsize':24}
)
plt.ylabel(u'Número de proyectos de ley', fontdict={'fontsize':18})
plt.xlabel(u'Congresista', fontdict={'fontsize':22})
ppl.bar(ax, np.arange(len(y)), y, grid="y")
fig.tight_layout()
fig.savefig("ranking_congresista.png")

view raw

plot.py

hosted with ❤ by GitHub

24 comentarios en “Guía práctica para hackear las páginas del Congreso

  1. Pingback: ¿Promulgarán la Ley de Delitos Informáticos? | Globalizado

  2. aniversarioperu, Antes que nada tengo el agrado de dirigirme a ti para felicitarte, muy buenos posts. Pero, tambien queria darte mi punto de vista en el que discrepo con algunas afirmaciones tuyas, para puntualizar en la que mencionas que este proceso que haz descrito muy detalladamente, sea un hacking propiamente dicho. Me explico, este termino (actualmente) tiene muchas acepciones, me voy a enfocar a dos definiciones la que se refiere a la acción de explorar y buscar las limitantes ya sea en sistemas, hardware, software, scripts, etc. con buenos o malos fines. Asimismo, el término hackear se usa para referice a la acción de irrumpir o entrar de manera forzada a un sistema informatico o a una red, etc. Este ultimo concepto yo lo considero cracking pero no viene al caso pues ya se le acuño el concepto a la palabra hacking. Pues bien en el titulo mencionas Guía práctica para hackear las páginas del Congreso, yo lo concideraria errado pues no estas haciendo nada reference a un hacking simplemente estas haciendo peticiones web con el comando wget y procesando esa info. Yo titularia este post como «Guía práctica de como obtener informacion de las páginas del Congreso» ya que no haz realizado ningun hackeo. Disculpame no quiero que me tomes a mal simplemente creo este post tan bueno no deberia caer en el mal uso de un termino. Todo trabajo que realiza el hombre es como, decian los griegos, Plus ultra, osea se puede ir más allá, todo es perfectible.Y con esa premisa en mente es que te hago este comentario.
    Disculpame tambien las faltas hortograficas pero estoy en el movil. Saludos de Corea del Sur.

    • @Teocci según lo que explicas la palabra hackear tiene diferentes significados y más aún según el contexto dónde o quién lo use y uno de ellos son los que se usan aquí. 🙂

      • Esto no es un hackeo, es como que digas voy a sacar dinero del ATM, sacas dinero del ATM y tu amigo te dice estas robando al banco y lo que le dirias no estoy robando estoy retirando mi dinero del bando es el mismo sentido. Aca estas sacando informacion, y la estas acomodando como quieres con tus scripts, y hacer un script no es una hack, es hacer un script. Mi punto es que este proceso descrito aqui, es muy bueno informativo , ademas queremos (eso es lo qu ecreo) que le queremos dar el buen uso a la palabra HACKING o HACKER, que se refieren a un contexto mucho mas amplio, es como yo que te diga si en el elvador presionas el boton para cerrar la puerta luego el boton del piso al que quieres ir hasta que el elevador se mueva y este ira sin detenerse hasta el piso seleccionado, wow soy un hacker, no es el procedimiento que se usan los policias o bomberos en casos de emergencia. MI unica intencion era que se use mejor la palabra. Gracias

    • gracias por comentar! discrepar es saludable, y como dices, el término hacking tiene varias acepciones.

      Por ejemplo una vez se rompió una tubería de cobre del líquido de frenos de una de las llantas de mi carro. Para no seguir perdiendo líquido de frenos tuve que hackear mi carro. Le desconecté la manguera de cobre y cerré un extremo golpeando con dos piedras. Llegué al mecánico más cercano con freno en 3 llantas.

      • Nah, un placer gracias por responder, siga adelante con los post que estn muy buenos y bien redactados un abrazo compatriota.

    • ola yo quiero aprender a hackear, veo que eres un genio en esto tu comentario esta de lo mejor lo he terminado de leer todo, pero necesesito que alguien me ayude a hackerar, que alguien sea mi maestro y yo su aprendiz, que el que me enseñe me diga todo lo que sabe y que trabaje para el.

      MI FACEBOOK: https://www.facebook.com/darck.vaszquezvasquez

      Yo pienso que corea del sur es un pais muy intekigente y opor eso me gustaria que me enseñe alguien, lo publico en tu comentario porque me centro mas en ti, pero si alguien se ofrece a ayudarme estare dispuesto a aprender..

      VIVO EN PERÙ

Deja un comentario