Flubber Posted September 4, 2010 Report Posted September 4, 2010 (edited) OK, urmand tutorialul lui Peter Van Eeckhoutte, am dat de un mic punct de practica in care trebuia sa faci un script care sa scrie 10k "\x41" (fiind in hexadecimal insemnand "A") intr-un fisier ".m3u" care era "incarcat" (open file) de catre aplicatia vulnerabila. Dupa ce am incercat aseara sa imi imbunatatesc programelul si am esuat, azi intrand pe Linux mi-am propus sa incerc din nou, si asa au trecut ~4 ore pana am reusit sa il fac cum vreau eu si sa-i "dau de cap". Problema pe care o aveam, era ca, incercam sa iau input-ul user-ului de la optiuni (valoarea cunoscuta sub drept de argument) cu sys.argv[] (folosindu-ma de modulul "sys"), si aveam ceva de genul:import sysusage = """Usage:-f numele fisierului-j gunoi-m de cate ori se va efectua multiplicarea (ex: de 10 ori => 10 * junk -- daca junk-ul este sa zicem \x41 rezulta in 10 de "A")"""if len(sys.argv) < 4: print "[-] Executare gresita." print usagedef procesulmamei(): fisier = sys.argv[1] gunoi = sys.argv[2] multiplicare = sys.argv[3] gm = str(gunoi) * int(multiplicare) data = open(fisier, "w") data.write(gm) data.close() print "OK."Ma rog, ceva de genul, scriptul l-am rescris aici, acum, din cauza ca l-am sters pe cel initial. Bineinteles, probabil am folosit sys.argv gresit (foarte probabil, 99,9%), DAR cineva mi-a recomandat "optparse".Probleme pe care le-am intalnit scriind programul final:- a durat ceva pana am invatat optparse, articole despre acest modul gasiti jos daca doriti sa-l invatati- nu reuseam sa scriu hexadecimalul ca fiind caracter convertit in string (A), scria in fisier hexadecimalul (\x41 spre exemplu) + am gasit inca un modul foarte frumos: binascii pentru a convertii din hexadecimal in string# Adaugare:## INCEPUTAm uitat sa mentionez ceva in legatura cu modulul optparse si anume, ca sa luati valoarea user-ului ce o introduce (input) si sa o stocati in variabila va veti folosii de (in cazul codului de mai jos) opts.variabila. De ce?Avem:[...]Line #1: parser.add_option("-m", "--milf", help="mothers i like to.... felicitate", [B]dest="pr0n"[/B], type="string")Line #2:Line #3: (opts, args) = parser.parse_args()Ceea ce ne intereseaza este "dest" (destination). Destination creeaza o variabila pe care o definiti voi si acolo va stoca input-ul user-ului, este ceva de genul la:kfc = raw_input("Ce iti place sa mananci? ")Variabila "kfc" va avea valoarea pe care voi o scrieti, sa zicem "Mc Donalds". Linia a 3-a ne foloseste pentru a stoca toate aceste "variabile" facute de catre parser (modul) intr-o lista (a nu se intelege lista: ['item1','item2'] ci tuple: ('item1','item2') care nu poate fi editata fata de lista). Aici putem folosii movies = opts.pr0n.Valorile din opts ar arata asa (mai mult ca un dictionar): {pr0n: argument}. Daca user-ul da:script.py -m SavannaSamsonIn acest moment "pr0n" din "opts" ar fii ceva de genul: {pr0n: SavannaSamson}, iar variabila "movies" ar avea ca valoare "SavannaSamson"Nu stiu daca am explicat foarte bine si daca ati inteles mare lucru, s-ar putea sa fi gresit in legatura cum se stocheaza datele in variabile la optiunea "dest" din add_option, s-ar putea sa ma fi contrazis intr-un fel, iar daca da, rog pe cineva sa ma corecteze (chiar sunt curios cum este defapt, daca ma insel), dar sper ca v-a fost de ajutor.## SFARSITIn fine, per total am si invatat (module noi, program care poate fi apelat din command line - ex: terminal -, cum sa tratez anumite 'exceptii', etc.), dar a fost si bataie de cap si mult timp dedicat.Codul:#!/usr/bin/python# Python version used to code this program: 2.6.5 on Ubuntu Linux 10.04.1 LTS# Coded by Flubber on 04.09.2010 / 15:10import sysimport binasciifrom optparse import OptionParserparser = OptionParser()parser.add_option("-f", "--file", help="filename (e.g.: milf.m3u -- default: music.m3u)", dest="filename", type="string", default="music.m3u")parser.add_option("-j", "--junk", help="junk to write (e.g.: \\x41 -- default: \\x41)", dest="junk", type="string", default="\\x41")parser.add_option("-m", "--multiply", help="times to multiply the junk (default: 10000)", dest="multiply", type="int", default="10000")(opts, args) = parser.parse_args()def process(): try: filename = opts.filename if filename.find(".m3u") == -1: print "[*] Adjusting file name - adding extension \".m3u\" ... [OK]" filename = filename + ".m3u" else: print "[+] Filename ... [OK]" junk = opts.junk if junk.find("\\") == -1: print "[*] Adjusting junk data ... [OK]" junk = "\\" + junk else: print "[+] Junk ... [OK]" multiply = opts.multiply junksecond = junk.replace("\\x", "") somelittlestuff = binascii.unhexlify(junksecond) littlestuff = str(somelittlestuff) * int(multiply) data = open(filename, "w") data.write(littlestuff) data.close() print """\n\n[+] Job completed successfully. Information:\n [*] Filename: %s [*] Junk: %s [*] Times the junk was multiplied by: %s\n""" % (filename, junk, multiply) except: print "[-] Unexpected error:", sys.exc_info()[0] raise else: print "[+] Exiting. Have a nice day!"process()Codepad: Python code - 46 lines - codepadArticole:Python’s optparse for human beings de "Alex on linux""Tratarea" exceptiilor - documentatia oficiala PythonDespre modulul "optparse" - documentatia oficiala PythonModulul binascii - link-ul la care am ajuns in urma cautarilor pe Google si s-a dovedit a fi folositor in cazul meuBinascii - documentatia oficiala de pe site-ul Python.orgRevin mai tarziu cu completari.Bafta, sper sa ajute pe cineva. Edited September 4, 2010 by Flubber Alte mici adaugari 2 Quote
Paul4games Posted September 4, 2010 Report Posted September 4, 2010 Flubber am o intrebare de ce programezi in python si nu alt limbaj de programare? Quote
cmiN Posted September 4, 2010 Report Posted September 4, 2010 Paul4games am o intrebare de ce ar programa in alt limbaj de programare si nu in python ?Pentru ca de tot ce are nevoie gaseste aici ?Fiindca e over platform ?Deoarece e prea usor de inteles ca sa se chinuie in alte moduri pentru a rezolva si a face lucruri destul de marunte, nesemnificative, cat si proiecte adevarate ? Quote
Paul4games Posted September 4, 2010 Report Posted September 4, 2010 Paul4games am o intrebare de ce ar programa in alt limbaj de programare si nu in python ?Pentru ca de tot ce are nevoie gaseste aici ?Fiindca e over platform ?Deoarece e prea usor de inteles ca sa se chinuie in alte moduri pentru a rezolva si a face lucruri destul de marunte, nesemnificative, cat si proiecte adevarate ?Nush plm poate pentru ca sa poti folosi orice program scris in python trebuie sa instalezi python,oricum eu sunt fan delphi! Quote
pyth0n3 Posted September 4, 2010 Report Posted September 4, 2010 Nush plm poate pentru ca sa poti folosi orice program scris in python trebuie sa instalezi python,oricum eu sunt fan delphi!Un sistem de tipul Unix/Linux il are instalat de default Quote
cmiN Posted September 5, 2010 Report Posted September 5, 2010 Oricum poti ingheta sursa alaturi de dependente si nu mai e nevoie de py.ON: in script te-ai dus pe calea mai grea , mai stufoasa dar abia mai inveti din librarii si alte lucruri. Quote