Jump to content

MrGrj

Active Members
  • Posts

    1419
  • Joined

  • Last visited

  • Days Won

    45

Posts posted by MrGrj

  1. Pentru practica, recomand platforme destinate acestui scop + sa urmaresti oameni care au video-uri in care explica ce si cum se intampla. Cateva exemple clasice ar fi:

     

    - Hack the Box (https://www.hackthebox.com/)

    - TryHackMe (https://tryhackme.com/)

    - picoCTF (https://picoctf.org/)

    - OverTheWire https://overthewire.org/wargames/

     

    Ca si canale, pe vremuri il urmaream pe tipu' asta: https://www.youtube.com/@_JohnHammond insa sunt sigur ca poti gasi multi altii pe placul / stilul tau.

     

    Spor la invatat :) 

    • Upvote 2
  2. Uhm, ar fi misto daca am avea mai multe dezbateri de genu' asta. Chiar m-a tinut prins vreo 7 minute :))

     

    Adevaru' e probabil undeva la mijloc, iar problema principala cu aplicatiile astea moderne (d.p.m.d.v) este lipsa de educatie si increderea in servere.

     

    @koteri3692 - are dreptate din perspectiva existentei unei vulnerabilitati potentiale în aplicatiile E2EE care nu educa utilizatorii sa verifice manual cheile publice. Totusi, aceasta vulnerabilitate nu este o problema a criptografiei in sine, ci a implementarii și utilizarii acesteia. Intr-adevar, dacă Fane Pedala nu verifica manual cheile publice, un server compromis poate introduce o cheie falsa ==> atac MiTM. MiTM este posibil daca serverele sunt rau intentionate sau obligate sa colaboreze cu agentiile guvernamentale.

    @Nytro - este corect in teorie (exista mecanisme ex. certificare, verificare manuala care pot preveni atacurile MiTM). Insa aceste mecanisme nu sunt întotdeauna implementate sau utilizate corect în practica.

     

    Ceva exemple concrete:

     

    Signal permite verificarea manuala prin scanarea codurilor QR intre utilizatori. Verificarea asta face ca atacurile MiTM sa fie aproape imposibile, dar majoritatea utilizatorilor ignora acest pas. WhatsApp oferă opțiuni limitate de verificare a cheilor.

     

    Aplicatiile E2EE precum Signal nu utilizeaza CA-uri pentru a verifica cheile publice. In schimb, Signal se bazeaza pe trust local și pe verificari manuale. Așadar argumentul lui Nytro nu se aplica direct aplicatiilor de mesagerie.

     

    Legat de faptul ca NSA poate face MiTM pe TLS: este posibil în anumite conditii ex. compromiterea DigiNotar sau alte incidente legate de BGP hijacking bla bla. In ziua de azi, browser-ele moderne includ masuri ca HSTS (HTTP Strict Transport Security) și Certificate Transparency Logs pentru a preveni asta

    In aplicatiile de mesagerie astea  nu exista, iar încrederea se bazeaza mai mult pe server.

     

    So my humble opinion: ce zice koteri3692 este un scenariu tehnic real, dar oarecum teoretic. Nytro subliniaza soluții valide, dar neaplicabile complet în lumea reala fara eductia corespunzatoare a userilor.

     

    pwp jos hacerii mei preferatzi :*

     

    PS: io nu-s hacer si imi place shaorma cu de toate 

     

    • Upvote 2
  3.  

    A few days ago, a user contacted me on LinkedIn with a job offer, the message seemed very direct to me, but when I checked his profile and the company he worked for, everything seemed quite normal, and after answering the messages, and starting a process  the interview went pretty straight forward (personal interview about my technical background, personal projects, etc), everything very normal up to that point.

     

    At the time of the technical interview, this person gave me the link to a repository where the challenge was (a backend/frontend project with a README in the root with the instructions).

     

    Maybe it was nerves, or maybe I was too confident, but I didn't review the code before running the project on my machine, but when I started the backend, I notice that although the terminal showed me that the server was running with no errors, I notice that when making any request no log appears, and that caught my attention.
    After making a review of the code I notice this weird line hidden at the end of a file (Picture 1 and 2)

    That was the line that prevented the server from running, when I checked that file I found this (Picture 3)

    The file is obfuscated, but at first glance you can tell it's an IIFE, and using an online tool I tried to decrypt it as much as I could and I found this kind of things (Picture 4, 5, 6, 7, 😎

    Clearly that script was gathering information from my computer and sending it to that IP, and from what I can see the information it is trying to retrieve is related to crypto wallets.

     

    Obviously, all the responsibility here falls on me for not having reviewed the code at the beginning, or running the project on a virtual machine, as I said at the beginning, perhaps it was the nerves of the "interview" and I forgot about that.

    Another detail that I noticed after looking at the code more closely is that the folder where the script is is ".svn" (something very familiar to those who used Subversion), but the detail here is that many folders that start with a "." gets hidden by VSCode on the file explorer, so it was harder to notice if I hadn't found the reference in the code.

     

    Luckily they haven't been able to take any information from my computer since I don't have anything related to crypto, but I have had to change all my passwords, so lesson learned.

     

    1733330443424?e=1736380800&v=beta&t=Brnl4W2zla4YjW91IPdpYEUwSgG-cUY0aobsw7RFRr41733330443351?e=1736380800&v=beta&t=h_UoF4pylW8NQMmEwRfXUTX9f5vQ2OSSgBtGNrFUoRo1733330443366?e=1736380800&v=beta&t=AX-xWP0IVZBj_3WQNSsCWn5nxvv14HcREHmqsA112RY
    1733330443520?e=1736380800&v=beta&t=TMMbmAuptCsZyT-tmhYQXGR1mP1OxN5owEU9jYRrKAE

    1733330443579?e=1736380800&v=beta&t=DLDj6vJam5TWAWeGUhcklvBxQdHKtQY7zsk3rU2uo3g

    1733330443565?e=1736380800&v=beta&t=YQvgpDOV1LNizHh4KancSu1vyrnX0XchDyYf8sol-kQ

    1733330443577?e=1736380800&v=beta&t=fz36XTDj1aCNF3cvPM3RlnK61Ur64dYsgCA-U5lfWqo

    1733330443634?e=1736380800&v=beta&t=U6TGziOIKppr-pRwEpK9kxQMuSqQiUyl9uY0mzgjNo4

     

    Source

    • Thanks 1
  4. using System;
    using System.Diagnostics;
    using System.IO;
    using System.Windows.Forms;
    
    namespace MyNamespace
    {
        public partial class MyForm : Form
        {
            private Process cmdProcess;
    
            public MyForm()
            {
                InitializeComponent();
                InitializeCmd();
            }
    
            private void InitializeCmd()
            {
                cmdProcess = new Process();
                cmdProcess.StartInfo.FileName = "cmd.exe";
                cmdProcess.StartInfo.CreateNoWindow = true;
                cmdProcess.StartInfo.UseShellExecute = false;
                cmdProcess.StartInfo.RedirectStandardInput = true;
                cmdProcess.StartInfo.RedirectStandardOutput = true;
                cmdProcess.StartInfo.RedirectStandardError = true;
    
                // ascunde bara de titlu si butoanele
                cmdProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    
                cmdProcess.Start();
                StreamWriter cmdStreamWriter = cmdProcess.StandardInput;
                StreamReader cmdStreamReader = cmdProcess.StandardOutput;
                StreamReader cmdErrorReader = cmdProcess.StandardError;
    
                // adaugă controlul la form
                TextBox cmdControl = new TextBox();
                cmdControl.Multiline = true;
                cmdControl.Dock = DockStyle.Fill;
                cmdControl.ScrollBars = ScrollBars.Vertical;
                cmdControl.Font = new System.Drawing.Font("Courier New", 10);
                Controls.Add(cmdControl);
    
                // afișează output-ul din terminal în control
                cmdStreamReader.BaseStream.BeginRead(new byte[1], 0, 0, null, null);
                cmdStreamReader.DataReceived += (s, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data))
                    {
                        cmdControl.Invoke(new Action(() =>
                        {
                            cmdControl.AppendText(e.Data + Environment.NewLine);
                        }));
                    }
                };
    
                // citește input de la utilizator și trimite la terminal
                cmdControl.KeyDown += (s, e) =>
                {
                    if (e.KeyCode == Keys.Enter)
                    {
                        cmdStreamWriter.WriteLine(cmdControl.Text);
                        cmdControl.Clear();
                    }
                };
    
                // afișează erorile în consolă
                cmdErrorReader.BaseStream.BeginRead(new byte[1], 0, 0, null, null);
                cmdErrorReader.DataReceived += (s, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data))
                    {
                        Debug.WriteLine(e.Data);
                    }
                };
            }
    
            private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
            {
                cmdProcess?.Kill();
            }
        }
    }

     

    • Like 1
    • Upvote 1
  5. Raspunsul e foarte simplu: pare ca ai ajuns intr-un mediu toxic de care trebuie sa scapi cat mai repede. Cu cat stai mai mult cu atat vei deveni mai frustrat si te vei consuma pentru astfel de nimicuri. 

     

    Cat despre ce ziceai tu cu:

    33 minutes ago, 0xStrait said:

    pt. ca daca as renunta brusc si m-as angaja altundeva mi-ar afecta cumva imaginea.

    ... nu cred ca e cazul sa iti faci griji. Poate era o problema acum 10 ani inainte sa explodeze piata IT. In ziua de azi, angajatorilor le trebuie oameni si nu prea le mai pasa cat ai stat prin companii. Cu atat mai mult cu cat ai avut un motiv intemeiat sa pleci. 

  6. Cred ca asta e mot-a-mot cu ce ai tu acolo desi b-ul ala nush de ce nu e float:

     

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
        int n, a, b;
        cout << "n = "; cin >> n;
        
        a = 1;
        b = 1;
        
        while (a*a + b*b <= n) {
            if (a*a + b*b == n) {
                cout << "a = "; cin >> a;
                cout << "b = "; cin >> b;
            }
            a += 1;
            b = sqrt(n - a*a);
        }
        
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
        
        return 0;
    }

     

    // LE. Sunt platit foarte bine ca sa ajut lumea la teme. That could be you :( Learn and you'll get rich

    • Upvote 5
  7. 1 hour ago, Wav3 said:

    Ai depus efort mai mult de 5 secunde ca sa numeri cuvintele.

    len("Acum cativa ani cand umblam pe aici era o activitate mare acum este intr-un punct mai greu, ma gandesc ca sa formam echipe mici sa revitalizam comunitatea dinou , 3 membri bunicei evident si cineva din staff de aici sa ne ocupam sa facem un grup puternic pe facebook Romanian Security Team unde acolo se creste foarte usor si foarte repede grupul. Sunt multi pasionati de informatica , iar pagina rst sa se ocupe alti 3 membri pentru revitalizare , trebuie sa cautam sa fim undeva in pas cu modul de expunere a comunitati cu timpul , parerea mea ca daca ne facem echipe de cate 3 , 3 pe un grup care garantat in 1 luna 2 face sigur 10.000 membri o spun din proprie experienta ca am crescut grup in scurt timp la 11.000 iar apoi 3 se ocupa de pagina rst acolo nu este munca multa doar daca se posteaza odata pe zi din 3 insi cate 1 post de fiecare in tema informatica plus noutatile in tehnologie etc iar avem de castigat ,iar unul pasionat de informatica din grup de aici care este pasionat si de tik tok poate face un cont de tik tok gen Rst, si tot asa pe diferite retele mai vechi si mai noi iar toate sa duca la acest forum , sursa mama si tata unde cine vor pe celelalte comunitati ale noastre sa dezvolte proiecte sa se inscrie aici si de aici facut un chat frumos unde sa dezbatem fel si fel de teme, vreau pareri si opinii".split())

    Aproximativ 5 secunde, da, ca se incarca greu zsh. Se pare ca am gresit: sunt 258. Prima fraza am omis-o & inclus-o in count :( 

  8. M-am uitat la ei pe lib si nu suporta timeout ca parametru. Ca workaround poti face ceva de genu':

     

    import requests
    import yfinance as yf
    import functools
    
    session = requests.Session()
    session.request = functools.partial(session.request, timeout=30)
    
    # replace requests library in yfinance
    yf.base._requests = session
    yf.utils._requests = session
    yf.ticker._requests = session

     

    The above should do the trick

    • Thanks 1
    • Upvote 1
  9. 58 minutes ago, Che said:

    Cum faci atunci cand conexiunea ramane blocata? Adica internet este, ping catre google este dar conexiunea yfinance ramane blocat pur si simplu fara sa arate vreo eroare, fara nimic, doar astepti sa ia rezultatele si astepti si tot astepti dar nu se mai intampla nimic fiindca conexiunea este cumva inghetata.

    Setezi `timeout=<cat_vrei_tu>` pe fiecare request (e.g. `requests.get(url, timeout=10)`), dai retry de 3 ori sau cat vrei si treci mai departe daca resursa respectiva e busita (eventual stochezi in logs ca sa vezi ce se intampla si de ce nu merge). De asemenea, e posibil sa ai ceva antibots mechanism si sa iti dea block pentru cateva secunde/minute/ani etc...caz in care tre' sa folosesti proxies / socks. Uneori merge doar daca pui un mic sleep intre requesturi (e posibil sa le omori serveru') + schimbi User-Agent.

  10. E destul de usor ce vrei tu sa faci si poti combina solutiile de mai sus. Intr-adevar, pentru a fi sigur ca scriptul isi reia treaba de unde a ramas iti trebuie un Queuing mechanism in care sa stochezi statusul si id-ul fiecarui request in parte. Iti va fi usor sa reiei taskurile de unde au ramas.

     

    Ca sa rezolvi problemele cu no internet connection, curent nema, apocalipsa etc e ceva mai interesant (intra cumva in categoria de disaster recovery - multa teorie). Dar pe scurt, cu cateva try / except-uri ar trebui sa o rezolvi (e.g. poti face initial un HEAD request catre yfinance + retry de cateva ori in cazul in care requestul faileaza. Daca dupa cateva retry-uri nu primesti nimic de la url-ul respectiv, treci la urmatorul si pui in queue url-ul precedent pentru a-l incerca mai tarziu bla bla e mult de scris). Poti incerca urmatorul stack:

     

    - Python (il folosesti deja)

    - RabbitMQ (message broker)

    - Ceva DB (ceva cum ar fi Mongo cred ca ar merge perfect din moment ce nu pare ca ai vreo relatie intre datele de care ai nevoie)

     

    Ideea generala pentru a scapa de acel "retrieving..." e ca trebuie sa faci mereu sanity request check-uri care sa te asigure ca urmatoarele reqs vor merge. In caz contrar, tratezi acolo ce e de tratat. E.g:

     

    try:
        import httplib
    except:
        import http.client as httplib
    
    def i_have_internet():
        conn = httplib.HTTPConnection("www.google.com", timeout=5)
        try:
            conn.request("HEAD", "/")
            conn.close()
            return True
        except:
            conn.close()
            return False
          
    
    def main():
        if i_have_internet():
            # do your stuff (process yfinance bla bla)
        else:
            # wait, retry, check internet settings or w/e u want
            
            
    main()

     

    Mai sus e un exemplu simplu de check insa tu ar trebui sa tratezi tot ce ai nevoie. Asta se rezolva pe parcurs dupa ce intampini toate problemele.

    • Thanks 1
    • Upvote 2
×
×
  • Create New...