Zanimljive programerske fore

3

Zanimljive programerske fore

offline
  • Pridružio: 25 Jan 2004
  • Poruke: 2784
  • Gde živiš: Niš

@E.L.I.T.E.

Ne znam da li se pojašnjenje nalazi na linku koji si podlednji ostavio jer se ne otvara, ali neko može samo da pilji u citiran kod i da mu ništa nije jasno Very Happy ... pa da pokušam da objasnim ukratko...

Ovo se manje više smatra jednim od načina exploita format string funkcija jer takav tip funkcija prima varijabalan broj parametara i preuzima ih sa stack-a. Te ako funkcija očekuje 2 parametara, drugi parametar možeš da gurneš u stack na adresu memorije koju možeš da vidiš gde se nalazi nakon što kompajliraš prvi put program, te tako i ovo parče koda koje si gore citirao će raditi samo na toj jednoj mašini i plus samo na Linux AMD64 bit sistemu uz GCC kompajler verzije 4.8.2. Very Happy (izvor Tinyhack: Implementing a web server in a single printf() call).

A shellcode je izvučen iz sledećeg C koda:

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #include<sys/socket.h> #include<arpa/inet.h> #include<netdb.h> #include<signal.h> #include<fcntl.h>   int main(int argc, char *argv[]) {     int sockfd = socket(AF_INET, SOCK_STREAM, 0);     struct sockaddr_in serv_addr;     bzero((char *)&serv_addr, sizeof(serv_addr));         serv_addr.sin_family = AF_INET;         serv_addr.sin_addr.s_addr = INADDR_ANY;         serv_addr.sin_port = htons(8080);     bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));     listen(sockfd, 5);     while (1) {         int cfd  = accept(sockfd, 0, 0);         char *s = "HTTP/1.0 200\r\nContent-type:text/html\r\n\r\n<h1>Hello world!</h1>";         if (fork()==0) {             write(cfd, s, strlen(s));             shutdown(cfd, SHUT_RDWR);             close(cfd);         }        }       return 0; }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4564

Upravo na tom linku koji si naveo se nalazi objašnjenje - neko reče kako je potrebno da se promene dve adrese jer je rađeno za drugu arhitekturu, e sad ne znam da li je na TH ili na Quora-i gde sam našao ovo.

A taj link koji sam postavio je nešto na foru Chuck Norris facts samo za Jeff Dean-a Mr. Green



offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4564

Tražeći nešto naleteo sam baš na ono što mi je trebalo, a što je uvedeno tek u Javi 8 - StringJoiner.

StringJoiner sj = new StringJoiner(":", "[", "]"); sj.add("George").add("Sally").add("Fred"); String desiredString = sj.toString();
[George:Sally:Fred]

Ovo mi je baš bilo potrebno obzirom da sam niz stringova hteo da ponovo spojim dodavajući delimiter između njih, ali klasičnim pristupom delimiter uvek ostane na poslednjem stringu. Ovo je mnogo praktičniji način.

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4564

func reverse(string: String) -> String {     let strlen: Int = string.characters.count     var reversedString: String = ""     for i in stride(from: strlen, to: 0, by: -1) {         reversedString += String(string[string.index(string.startIndex, offsetBy: i-1)])     }     return reversedString }
Verovali ili ne, u Swift-u nije moguće pristupati karakterima u stringu preko [] već preko String.Index. Ovo je funkcija koju sam napisao jer nisam hteo da koristim reverse() funkciju. Nije ni čudo da u rešenjima za ovaj primer nema nijednog ponuđenog rešenja za Swift; mora da su nesrećnici koji su pokušali brzo odustali : >

Ovako to izgleda sa reverse() funkcijom:
String("Neki string".characters.reverse())

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

extension String {   subscript (i: Int) -> Character {     return self[self.characters.index(self.startIndex, offsetBy: i)]   }   subscript (i: Int) -> String {     return String(self[i] as Character)   } }

Sada možeš da napišeš:
"Neki string"[3]

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4564

Probao sam to već Srki Wink



A i ovo je trebalo da bude rešenje bez modifikovanja ugrađenih tipova Very Happy

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4564

Ako pravite neku laganu aplikaciju možete koristiti Google Sheets kao bazu podataka kupeći informacije preko JSON-a Smile

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4564

Napisano: 03 Jan 2018 15:55

Kada dizajnirate bilo kakav API, uvek šaljite neki rezultat nazad.

Možda je ovo seniorima već odavno poznato, ali ja lično nisam imao pojma da pregledači nakon što prođe određeno vreme od slanja zahteva, šalju zahtev i drugi put ukoliko ne dobiju nikakav odgovor od servera jer pretpostavljaju da je došlo do greške pri slanju.

https://tools.ietf.org/html/rfc2616#section-8.2.4

U slučaju da radite sa Express, dovoljno je samo:

res.end()
Ukoliko ne šaljete nazad nikakve podatke Smile

Dopuna: 03 Maj 2020 13:56

Nije fora ali vest: Microsoft je omogućio rad sa Windows API-em iz Rust koda.

https://blogs-windows-com.cdn.ampproject.org/c/s/b.....eview/amp/

Ko je trenutno na forumu
 

Ukupno su 688 korisnika na forumu :: 34 registrovanih, 8 sakrivenih i 646 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Albin0, bato, bigfoot, cenejac111, crnitrn, dika69, dragan_mig31, helen1, HogarStrashni, hyla, ikan, ivica976, Mercury, mkukoleca, Orc from Russia, Polemarchoi, procesor, promajauglavi, punto, RecA, royst33, sasa1, Smiljke, Srle993, stegonosa, Van, vathra, VJ, Vlada1389, vladetije, zastavnik, ZoranB., Živković