Anti-armenia.ORG - Forumlar - Nest JS vulnerable skript



Istifadəçi
    2023-05-21 21:22 GMT                 

AWS_ENJOYER



İstifadəçi
Mesaj Sayı : 8
Mövzu Sayı :
Rep Ver : 
Rep Sayı :   0  
Indi Saytda : Durum
Cinsiyyət : Oğlan
Şəhər :
Ölkə :
Məslək : Cloud engineer
Yaş :
Mesaj :

Mövzunu Paylaş!


Tessevur eleyinki NESTJS yada NODEJSde bele ORM model var.

Kod:
@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: string
 
  @Column()
  name: string

  @Column({default: false})
  admin: boolean
}


create-user.dto.ts

Kod:
export class CreateUserDto {
  name: string;
}


burda only user nameni gonderirik user yarananda admin default false; useri yanliz diger admin admin ede biler.

indi bunun request den gelen hissesine baxaq.

Kod:
...
const userDto: CreateUserDto = birsey // tessevur eleyin apiden gelir bu
this.userRepository.save(userDto)
...


bu kod ne edir:
1. Normalda app bizde User yaradir.
mueyyen adli

siz postman yada curldan { "name": "sigma" } gondersez, DBda goresisizki random idli adi sigma olan admin olmayan user elave edilib.

Indi sual: men niye bunlari deyirem?

burda bir vuln vardir. biz indi { "name": "sigma2", "admin": true } gonderek ve dbya baxsaq gorerikki dbde admin yaranib, bu o demekdiki bu emeliyyati eden sexs sitemizin tum accesslerine hal hazirda sahibdir, bes bu niye bas verdi?

bunu anlamaq ucun js/ts basicsine qayitmaq lazimdir.

jsde hersey object tipine aiddir, ne varsa. yeni json

tsdede beledir, amma js ile ts ferqinde siz object icinde ne olacagini bilmirsiz ve qaranti edenmirsiz, amma ts de qaranti edirsizki, bu objectde filan key de value movcuddur. meselen numunede app mecbur teleb edecekki, request bodyde name olmalidir. Cunki dto bunu teleb edir (DATA TRANSFER OBJECT). lakin bu odemek deyilki, o request bodyde name olacaq ancaq, xeyr. TSde Code editorda baxsaniz o objectin (yuxarda userDto) deyecekki IDE burda only name var amma cap etdikde goresisiniz ki hem name var, hemde admin truedir. cunki ts demir bu objectde filan key var, typescript deyirki: "men bu objecti cox bilmirem amma qaranti ediremki burda name var amma tek name olduguna qaranti etmirem. Buna gore DBde bizde sigma2 admin oldu

Indi qarsini nece alaq.
cox sade codeye qayidaq

Kod:
...
const userDto: CreateUserDto = birsey // tessevur eleyin apiden gelir bu
this.userRepository.save(userDto)
...


gelin ne edek, userDtodan yanliz ve yanliz nameni goturek bununcun spread lazimdir

Kod:
...
const {name}: CreateUserDto = birsey // tessevur eleyin apiden gelir bu
this.userRepository.save({name})
...


indi bu deyisiklikde ne bas verir, user requestin bodysinin tekce name ni goturur atir dbye, artiq dbde baxsaniz, user admin true gondersede admin olanmir.

JS/TS de bele seyler coxdur. Gelen defe bunun kimi melumat isteyirsinizse altdan yaza bilersiniz.

Oxudugunuz Ucun cox tessekur edirem AntiArmenia team, suallariniz sexsi chatboxdan yonelde bilersiniz.

Mən kiməm:
Mən cloud, devops və web dev üzrə mütəxəssisəm (web dev olaraq işləmişəm, devops və cloud üzrə praktikam vardır), suallarınıza sevə-sevə cavab verə bilərəm. Bir çox AWS və Google cloud toolları işlətmişəm və startuplarım vardır ki yardım edirəm bu his
Anti-armenia.ORG