[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.78,0:00:05.79,Default,,0000,0000,0000,,[Translated by Jouko Voutilainen (KYBS2001 course assignment at JYU.FI)] Dialogue: 0,0:00:18.23,0:00:29.30,Default,,0000,0000,0000,,Vasemmallani on Omer Gull, ja hän puhuu meille aiheesta "SELECT code_execution FROM * USING SQLite". Dialogue: 0,0:00:29.30,0:00:33.38,Default,,0000,0000,0000,,Omer, Omer Gull, sinun esityksesi, sinun lavasi, pidä hauskaa! Dialogue: 0,0:00:33.38,0:00:34.73,Default,,0000,0000,0000,,Kiitos. Kiitos. Dialogue: 0,0:00:34.73,0:00:39.23,Default,,0000,0000,0000,,[Yleisö taputtaa] Dialogue: 0,0:00:39.26,0:00:40.46,Default,,0000,0000,0000,,Hei kaikille. Dialogue: 0,0:00:40.46,0:00:46.33,Default,,0000,0000,0000,,Tervetuloa esitykseeni "SELECT code_execution FROM * USING SQLite", Dialogue: 0,0:00:46.33,0:00:51.85,Default,,0000,0000,0000,,jossa saavutamme koodin suorittamisen (code execution) haavoittuvaisia SQLite-tietokantoja käyttäen. Dialogue: 0,0:00:52.11,0:00:55.85,Default,,0000,0000,0000,,Nimeni on Omer Gull. Olen haavoittuvuuksien tutkija Tel Avivista. Dialogue: 0,0:00:55.85,0:01:00.90,Default,,0000,0000,0000,,Olen työskennellyt Check Point Researchissa viimeiset kolme vuotta Dialogue: 0,0:01:00.90,0:01:05.35,Default,,0000,0000,0000,,ja olen äskettäin siirtynyt uuteen startupiin nimeltä Hunters.AI. Dialogue: 0,0:01:05.74,0:01:07.55,Default,,0000,0000,0000,,Agendamme tänään: Dialogue: 0,0:01:07.55,0:01:12.33,Default,,0000,0000,0000,,Aloitamme pienellä motivaatiolla ja taustatarinan kertomisella tästä tutkimuksesta. Dialogue: 0,0:01:12.33,0:01:21.10,Default,,0000,0000,0000,,Sen jälkeen meillä on lyhyt SQLite-johdanto ja tutkimme haitallisten tietokantojen hyökkäyspintaa. Dialogue: 0,0:01:21.48,0:01:28.56,Default,,0000,0000,0000,,Käsittelemme myös aiempaa työtä SQLite-hyödyntämisessä ja mietimme, Dialogue: 0,0:01:28.56,0:01:33.95,Default,,0000,0000,0000,,miten käyttää muistin korruptiohäiriöitä pelkästään SQL:n avulla. Dialogue: 0,0:01:33.95,0:01:41.01,Default,,0000,0000,0000,,Sitten esittelemme oman innovatiivisen tekniikkamme nimeltä "Query Oriented Programming" tai QOP, Dialogue: 0,0:01:41.01,0:01:44.24,Default,,0000,0000,0000,,ja demonstroimme sitä muutamassa esimerkissä. Dialogue: 0,0:01:44.32,0:01:50.51,Default,,0000,0000,0000,,Käärimme asiat yhteen tulevaisuuden mahdollisuuksien ja johtopäätösten kanssa. Dialogue: 0,0:01:50.60,0:01:55.42,Default,,0000,0000,0000,,Motivaatio tälle tutkimukselle on melko ilmeinen. Dialogue: 0,0:01:55.42,0:02:00.35,Default,,0000,0000,0000,,SQLite on yksi eniten käytetyistä ohjelmistoista. Dialogue: 0,0:02:00.35,0:02:04.53,Default,,0000,0000,0000,,Olipa kyse PHP 5:stä, PHP 7:stä, Androidista, iOS:stä, Dialogue: 0,0:02:04.53,0:02:08.01,Default,,0000,0000,0000,,Mac OS:stä, se on nyt sisäänrakennettu Windows 10:een. Dialogue: 0,0:02:08.01,0:02:10.95,Default,,0000,0000,0000,,Sitä on Firefoxissa ja Chromessa. Dialogue: 0,0:02:11.52,0:02:13.70,Default,,0000,0000,0000,,Tämä luettelo voisi jatkua loputtomiin. Dialogue: 0,0:02:13.70,0:02:16.92,Default,,0000,0000,0000,,Kuitenkin SQLite-tietokannan kyselyä pidetään Dialogue: 0,0:02:16.92,0:02:21.04,Default,,0000,0000,0000,,turvallisena. Toivottavasti tämän puheen lopussa tajuat, Dialogue: 0,0:02:21.04,0:02:23.86,Default,,0000,0000,0000,,miksi tämä ei välttämättä ole totta. Dialogue: 0,0:02:24.41,0:02:27.92,Default,,0000,0000,0000,,Kaikki alkoi salasanavarkaista, Dialogue: 0,0:02:27.92,0:02:35.28,Default,,0000,0000,0000,,mikä on melko outoa, ja niitä on paljon, paljon vapaana, mutta tarina on yleensä sama. Dialogue: 0,0:02:35.57,0:02:38.60,Default,,0000,0000,0000,,Ensinnäkin tietokone saa tartunnan. Dialogue: 0,0:02:39.31,0:02:42.50,Default,,0000,0000,0000,,Sitten haittaohjelma kerää tallennettuja käyttäjätunnuksia, Dialogue: 0,0:02:42.50,0:02:45.45,Default,,0000,0000,0000,,sillä niitä on tallennettuna eri asiakasohjelmistoihin. Dialogue: 0,0:02:45.64,0:02:50.78,Default,,0000,0000,0000,,Jotkut näistä asiakasohjelmista tallentavat salaisuutesi SQLite-tietokantoihin. Dialogue: 0,0:02:51.43,0:02:59.93,Default,,0000,0000,0000,,Haittaohjelma lähettää SQLite-tietokantoja C2-palvelimelle, jossa salaisuudet\Npoimitaan Dialogue: 0,0:02:59.93,0:03:02.30,Default,,0000,0000,0000,,ja tallennetaan yhteiseen tietokantaan Dialogue: 0,0:03:02.30,0:03:03.88,Default,,0000,0000,0000,,muun saaliin kanssa. Dialogue: 0,0:03:04.60,0:03:12.28,Default,,0000,0000,0000,,Eräänä päivänä kollegani Omri ja minä tutkimme erittäin tunnetun salasanavarkaan vuodattamia lähdetiedostoja. Dialogue: 0,0:03:12.61,0:03:20.12,Default,,0000,0000,0000,,Ajattelimme: "Nämä kaverit vain keräävät tietokantojamme ja parsivat ne omaan back-endiinsä. Dialogue: 0,0:03:20.33,0:03:27.45,Default,,0000,0000,0000,,Voimmeko todella hyödyntää luotettamattoman tietokannan latausta ja kyselyä?" Dialogue: 0,0:03:27.45,0:03:31.22,Default,,0000,0000,0000,,Ja jos voimme, sillä voisi olla paljon suuremmat vaikutukset, Dialogue: 0,0:03:31.22,0:03:40.65,Default,,0000,0000,0000,,koska SQLiteä käytetään lukemattomissa skenaarioissa. Ja niin alkoi tähänastisen elämäni pisin CTF-haaste. Dialogue: 0,0:03:42.09,0:03:50.09,Default,,0000,0000,0000,,SQLite. Toisin kuin useimmat SQL-tietokannat, SQLite:llä ei ole asiakas-palvelinarkkitehtuuria. Dialogue: 0,0:03:50.09,0:03:55.53,Default,,0000,0000,0000,,Sen sijaan se lukee ja kirjoittaa tiedostoja suoraan tiedostojärjestelmään. Dialogue: 0,0:03:55.53,0:04:02.26,Default,,0000,0000,0000,,Joten sinulla on yksi täydellinen tietokanta, jossa on useita taulukoita, indeksejä, laukaisimia ja näkymiä, Dialogue: 0,0:04:02.26,0:04:11.79,Default,,0000,0000,0000,,ja kaikki sisältyvät yhteen tiedostoon. Tutkitaan siis hyökkäyspintaa, jonka potentiaalisesti haitallinen SQLite-tietokanta antaa. Dialogue: 0,0:04:12.14,0:04:17.07,Default,,0000,0000,0000,,Tämä on palanen koodia erittäin tunnetusta salasanavarkaasta, Dialogue: 0,0:04:17.07,0:04:23.39,Default,,0000,0000,0000,,ja meillä on kaksi tärkeintä kiinnostuksen kohdetta: Ensinnäkin meillä on sqlite3_open, Dialogue: 0,0:04:23.39,0:04:26.94,Default,,0000,0000,0000,,jossa potentiaalisesti haitallisen tietokanta ladataan, Dialogue: 0,0:04:26.94,0:04:29.49,Default,,0000,0000,0000,,ja jotain parsimista tapahtuu. Dialogue: 0,0:04:29.49,0:04:34.36,Default,,0000,0000,0000,,Ja ilmeisesti meillä on itse kysely. SELECT-lauseke. Dialogue: 0,0:04:34.36,0:04:37.43,Default,,0000,0000,0000,,Huomaa kuitenkin, että meillä ei ole hallintaa siitä lausekkeesta. Dialogue: 0,0:04:37.43,0:04:39.78,Default,,0000,0000,0000,,Se on kovakoodattu kohteeseemme. Dialogue: 0,0:04:39.78,0:04:42.91,Default,,0000,0000,0000,,Se yrittää poimia salaisuudet tietokannastamme. Dialogue: 0,0:04:42.91,0:04:48.99,Default,,0000,0000,0000,,Mutta me hallitsemme sisältöä, joten meillä voi olla vaikutusta siihen, mitä siellä tapahtuu. Dialogue: 0,0:04:49.86,0:04:53.28,Default,,0000,0000,0000,,Ensimmäinen asia on sqlite3_open, Dialogue: 0,0:04:53.28,0:04:56.40,Default,,0000,0000,0000,,joka on vain joukko asetus- ja kokoonpanokoodia. Dialogue: 0,0:04:56.40,0:05:01.69,Default,,0000,0000,0000,,Seuraavaksi siirrymme suoraviivaiseen otsikkotiedoston parsimiseen, Dialogue: 0,0:05:01.69,0:05:05.42,Default,,0000,0000,0000,,otsikkotiedosto itse ei ole kovin pitkä, vain 100 tavua. Dialogue: 0,0:05:05.42,0:05:09.44,Default,,0000,0000,0000,,Kolmanneksi, se on jo fuzzattu kuoliaaksi AFL:llä. Dialogue: 0,0:05:09.44,0:05:13.78,Default,,0000,0000,0000,,Joten se ei ehkä ole kovin lupaava polku jatkaa. Dialogue: 0,0:05:14.48,0:05:18.94,Default,,0000,0000,0000,,Mutta Sqlite3_query saattaa olla hieman mielenkiintoisempi, Dialogue: 0,0:05:18.94,0:05:27.18,Default,,0000,0000,0000,,koska SQLite:n tekijän mukaan "SELECT-lauseke on SQL-kielen monimutkaisin käsky". Dialogue: 0,0:05:28.14,0:05:33.79,Default,,0000,0000,0000,,Voit tietää, että taustalla SQLite on virtuaalikone. Dialogue: 0,0:05:33.79,0:05:39.75,Default,,0000,0000,0000,,Joten jokainen kysely on ensin käännettävä joksikin tavukoodin muotoon. Dialogue: 0,0:05:39.75,0:05:42.97,Default,,0000,0000,0000,,Tätä kutsutaan myös valmisteluvaiheeksi. Dialogue: 0,0:05:43.28,0:05:46.85,Default,,0000,0000,0000,,Joten sqlite3_prepare kulkee ja laajentaa tuon kyselyn. Dialogue: 0,0:05:46.85,0:05:50.17,Default,,0000,0000,0000,,Esimerkiksi joka kerta, kun valitset asteriskin, Dialogue: 0,0:05:50.17,0:05:53.68,Default,,0000,0000,0000,,se kirjoittaa tämän asteriskin kaikkien sarakkeiden nimiksi. Dialogue: 0,0:05:56.00,0:05:59.76,Default,,0000,0000,0000,,Joten sqlite3LocateTable() varmistaa, Dialogue: 0,0:05:59.76,0:06:06.45,Default,,0000,0000,0000,,että kaikki kyselyssä käytetyt taulut ja sarakkeet todella olemassa ja sijaitsevat muistissa. Dialogue: 0,0:06:06.45,0:06:08.41,Default,,0000,0000,0000,,Mistä se löytää ne? Dialogue: 0,0:06:08.41,0:06:12.92,Default,,0000,0000,0000,,Jokaisella SQLite-tietokannalla on taulu nimeltään sqlite_master, Dialogue: 0,0:06:12.92,0:06:17.98,Default,,0000,0000,0000,,joka määrittelee tietokannan skeeman. Dialogue: 0,0:06:17.98,0:06:19.99,Default,,0000,0000,0000,,Ja tämä on sen rakenne. Dialogue: 0,0:06:19.99,0:06:23.53,Default,,0000,0000,0000,,Joten jokaiselle tietokannan objektille sinulla on merkintä, Dialogue: 0,0:06:23.53,0:06:33.02,Default,,0000,0000,0000,,jossa on sen tyyppi, taulu tai näkymä, sen nimi ja aivan alareunassa jotain, jota kutsutaan SQL:ksi. Dialogue: 0,0:06:33.02,0:06:38.55,Default,,0000,0000,0000,,Ja SQL on itse asiassa DDL, joka kuvaa objektia. Dialogue: 0,0:06:38.98,0:06:46.02,Default,,0000,0000,0000,,DDL tarkoittaa datamäärittelykieltä, ja sitä voidaan verrata C-kielen otsikkotiedostoihin. Dialogue: 0,0:06:46.02,0:06:52.88,Default,,0000,0000,0000,,Ne määrittelevät tietokannan objektien rakenteen, nimet ja tyypit. Dialogue: 0,0:06:52.88,0:06:57.23,Default,,0000,0000,0000,,Lisäksi ne näkyvät selkokielisinä tiedostossa. Dialogue: 0,0:06:57.27,0:07:05.26,Default,,0000,0000,0000,,Annan esimerkin. Avasin SQLite-tulkin, loin taulun ja lisäsin siihen arvoja. Dialogue: 0,0:07:05.26,0:07:10.00,Default,,0000,0000,0000,,Sitten lopetin tulkin ja nyt avaamme tiedoston heksadesimaalimuodossa. Dialogue: 0,0:07:10.00,0:07:18.26,Default,,0000,0000,0000,,Voit nähdä keltaisella korostettuna näkyvän DDL-lauseke, joka on osa pääskeemaa. Dialogue: 0,0:07:18.26,0:07:21.00,Default,,0000,0000,0000,,Alhaalla voit myös nähdä arvot. Dialogue: 0,0:07:21.44,0:07:23.90,Default,,0000,0000,0000,,Palataan kyselyn valmisteluun. Dialogue: 0,0:07:24.38,0:07:33.22,Default,,0000,0000,0000,,Meillä on sqlite3LocateTable, joka yrittää löytää taulun rakenteen, jota haluamme kysellä. Dialogue: 0,0:07:33.22,0:07:39.03,Default,,0000,0000,0000,,Se lukee skeeman sqlite_masterista, jonka juuri kuvailimme. Dialogue: 0,0:07:39.03,0:07:41.53,Default,,0000,0000,0000,,Ja jos se tekee sen ensimmäistä kertaa, Dialogue: 0,0:07:41.53,0:07:47.10,Default,,0000,0000,0000,,sillä on joitakin takaisinkutsufunktioita jokaiselle näistä DDL-lausekkeista. Dialogue: 0,0:07:47.10,0:07:56.72,Default,,0000,0000,0000,,Takaisinkutsufunktio validoi DDL:n ja rakentaa sen jälkeen sisäiset rakenteet kyseisestä objektista. Dialogue: 0,0:07:56.72,0:08:00.94,Default,,0000,0000,0000,,Sitten ajattelimme DDL:n paikkaamista. Dialogue: 0,0:08:00.94,0:08:05.94,Default,,0000,0000,0000,,Entä jos vain korvaamme SQL-kyselyn DDL:ssä? Dialogue: 0,0:08:05.94,0:08:09.04,Default,,0000,0000,0000,,Tämä johtaa kuitenkin pieneen ongelmaan. Dialogue: 0,0:08:09.04,0:08:13.88,Default,,0000,0000,0000,,Tämä on aiemmin mainitsemani takaisinkutsufunktio, ja kuten näet, Dialogue: 0,0:08:13.88,0:08:23.16,Default,,0000,0000,0000,,DDL tarkistetaan ensin aloittavan "create ":lla. Vasta sen jälkeen valmistelu jatkuu. Dialogue: 0,0:08:23.16,0:08:25.25,Default,,0000,0000,0000,,Tämä on ehdottomasti rajoitus, eikö niin? Dialogue: 0,0:08:25.25,0:08:27.98,Default,,0000,0000,0000,,Meidän DDL:n on aloitettava "create ":lla. Dialogue: 0,0:08:27.98,0:08:31.75,Default,,0000,0000,0000,,Mutta tämä jättää jonkin verran tilaa joustavuudelle, Dialogue: 0,0:08:31.75,0:08:37.22,Default,,0000,0000,0000,,sillä SQLite-dokumentaation perusteella monia asioita voidaan luoda. Dialogue: 0,0:08:37.22,0:08:42.15,Default,,0000,0000,0000,,Voimme luoda indeksejä, taulukoita, laukaisimia, näkymiä ja jotain, Dialogue: 0,0:08:42.15,0:08:45.87,Default,,0000,0000,0000,,mitä emme vielä täysin ymmärrä, nimeltä virtuaaliset taulukot. Dialogue: 0,0:08:45.87,0:08:54.56,Default,,0000,0000,0000,,Niinpä ajattelimme "CREATE VIEW":ta, koska näkymä on vain esipakattu SELECT-lauseke, Dialogue: 0,0:08:54.56,0:08:58.64,Default,,0000,0000,0000,,ja näkymiä kysytään hyvin samalla tavalla kuin taulukoita. Dialogue: 0,0:08:58.64,0:09:05.67,Default,,0000,0000,0000,,Joten, taulukosta sarakkeen valitseminen on semanttisesti sama asia kuin sarakkeen valitseminen näkymästä. Dialogue: 0,0:09:06.51,0:09:10.26,Default,,0000,0000,0000,,Sitten, kun ajattelimme kyselyn kaappaamisen käsitettä. Dialogue: 0,0:09:10.26,0:09:15.34,Default,,0000,0000,0000,,Aiomme paikata sqlite_master DDL:n näkymillä taulukoiden sijaan. Dialogue: 0,0:09:15.34,0:09:20.07,Default,,0000,0000,0000,,Nyt paikatut näkymät voivat olla mitä tahansa SELECT-alilauseketta, jonka haluamme. Dialogue: 0,0:09:20.07,0:09:25.51,Default,,0000,0000,0000,,Ja nyt tällä alilausekkeella voin yhtäkkiä käyttää SQLite-tulkintaa. Dialogue: 0,0:09:25.51,0:09:30.99,Default,,0000,0000,0000,,Ja tämä on valtava askel eteenpäin! Muutimme juuri hallitsemattoman kyselyn joksikin, Dialogue: 0,0:09:30.99,0:09:32.100,Default,,0000,0000,0000,,jota voimme jonkin verran hallita. Dialogue: 0,0:09:32.100,0:09:36.78,Default,,0000,0000,0000,,Joten anna minun näyttää sinulle esimerkki kyselyn kaappaamisesta. Dialogue: 0,0:09:36.78,0:09:41.14,Default,,0000,0000,0000,,Sanotaan, että joissakin alkuperäisissä tietokannoissa oli yksi taulu, Dialogue: 0,0:09:41.14,0:09:46.54,Default,,0000,0000,0000,,ja tämä on DDL, joka määrittelee sen. Joten se on nimeltään "dummy" ja sillä on kaksi saraketta. Dialogue: 0,0:09:46.54,0:09:51.62,Default,,0000,0000,0000,,Joten ilmeisesti mikä tahansa kohdesovellus yrittäisi kysyä sitä seuraavasti: Dialogue: 0,0:09:51.62,0:09:55.59,Default,,0000,0000,0000,,Se vain yrittäisi valita nämä sarakkeet taulukosta, eikö niin. Dialogue: 0,0:09:55.59,0:09:59.20,Default,,0000,0000,0000,,Mutta seuraava näkymä voi todella kaapata tämän kyselyn. Dialogue: 0,0:09:59.20,0:10:04.10,Default,,0000,0000,0000,,Luon näkymän, se on juuri samanniminen ja sillä on sama määrä sarakkeita, Dialogue: 0,0:10:04.10,0:10:07.22,Default,,0000,0000,0000,,ja jokainen sarake on nimetty samalla tavalla, ja voit nähdä, Dialogue: 0,0:10:07.22,0:10:10.25,Default,,0000,0000,0000,,että nyt jokainen sarake voi sisältää minkä tahansa alilausekkeen, Dialogue: 0,0:10:10.25,0:10:13.79,Default,,0000,0000,0000,,jonka haluan, korostettuna sinisellä alareunassa. Dialogue: 0,0:10:13.79,0:10:16.51,Default,,0000,0000,0000,,Joten anna minun näyttää sinulle käytännön esimerkki siitä. Dialogue: 0,0:10:16.51,0:10:20.69,Default,,0000,0000,0000,,Tässä olen luonut näkymän nimeltä "dummy" col A ja col B:llä, Dialogue: 0,0:10:20.69,0:10:26.31,Default,,0000,0000,0000,,ja ensimmäinen sarake käyttää sqlite_version()-funktiota, ja se on sisäänrakennettu funktio, Dialogue: 0,0:10:26.31,0:10:29.14,Default,,0000,0000,0000,,joka palauttaa SQLite-version, ilmeisesti. Dialogue: 0,0:10:29.36,0:10:35.50,Default,,0000,0000,0000,,Toinen sarake käyttää SQLite:n omaa toteutusta printf:stä. Dialogue: 0,0:10:35.50,0:10:39.65,Default,,0000,0000,0000,,Juuri näin, niillä on kaikki nämä todella yllättävät ominaisuudet ja kyvyt. Dialogue: 0,0:10:39.65,0:10:44.01,Default,,0000,0000,0000,,Joten katsotaan sitä nyt oletetusti - kohdesivulta. Dialogue: 0,0:10:44.01,0:10:47.99,Default,,0000,0000,0000,,Joten kuka tahansa, joka yrittää valita näistä sarakkeista, Dialogue: 0,0:10:47.99,0:10:50.97,Default,,0000,0000,0000,,suorittaa yhtäkkiä meidän funktioitamme. Dialogue: 0,0:10:50.97,0:10:56.63,Default,,0000,0000,0000,,Vasemmalla voit nähdä SQLite-version, ja oikealla voit nähdä printf:n, Dialogue: 0,0:10:56.63,0:11:01.81,Default,,0000,0000,0000,,joka suoritettiin kohdesivulla. Joten taas tämä on valtava edistysaskel. Dialogue: 0,0:11:01.81,0:11:05.51,Default,,0000,0000,0000,,Me saavutimme juuri jonkin verran kontrollia sen kyselyn yli, eikö niin? Dialogue: 0,0:11:05.51,0:11:10.02,Default,,0000,0000,0000,,Ja kysymys kuuluu, mitä voimme tehdä tällä kontrollilla. Dialogue: 0,0:11:10.02,0:11:13.26,Default,,0000,0000,0000,,Onko SQLite:llä mitään järjestelmäkomentoja? Dialogue: 0,0:11:13.26,0:11:18.45,Default,,0000,0000,0000,,Voimmeko ehkä lukea ja kirjoittaa jotain muita tiedostoja tiedostojärjestelmässä? Dialogue: 0,0:11:21.27,0:11:26.46,Default,,0000,0000,0000,,Joten tämä oli hyvä kohta pysähtyä ja tarkastella jo tehtyä työtä alalla, Dialogue: 0,0:11:26.46,0:11:29.22,Default,,0000,0000,0000,,koska ilmeisesti emme ole ensimmäiset, Dialogue: 0,0:11:29.22,0:11:34.12,Default,,0000,0000,0000,,jotka ovat huomanneet SQLite:n valtavan potentiaalin hyväksikäytössä. Dialogue: 0,0:11:34.12,0:11:37.76,Default,,0000,0000,0000,,Järkevä paikka aloittaa on SQLite-injektio, Dialogue: 0,0:11:37.76,0:11:40.50,Default,,0000,0000,0000,,koska tämä on jonkinlainen vastaava tilanne, eikö niin? Dialogue: 0,0:11:40.50,0:11:45.11,Default,,0000,0000,0000,,Jollakulla haitallisella on jonkinlainen kontrolli SQL-kyselyssä. Dialogue: 0,0:11:45.11,0:11:50.44,Default,,0000,0000,0000,,Joten, on olemassa muutama tunnettu temppu SQL-injektiossa SQLite:llä. Dialogue: 0,0:11:50.44,0:11:54.42,Default,,0000,0000,0000,,Ensimmäisellä on tekemistä toisen tietokannan liittämisen kanssa Dialogue: 0,0:11:54.42,0:11:58.46,Default,,0000,0000,0000,,ja sen jälkeen taulun luomisen ja joitain merkkijonoja sen sisään laittamisen. Dialogue: 0,0:11:58.46,0:12:03.16,Default,,0000,0000,0000,,Ja koska, kuten mainitsin aiemmin, jokainen tietokanta on vain tiedosto, Dialogue: 0,0:12:03.16,0:12:08.20,Default,,0000,0000,0000,,tämä on jonkinlainen mielivaltainen tiedosto, tiedostojärjestelmässä. Dialogue: 0,0:12:08.20,0:12:11.70,Default,,0000,0000,0000,,Kuitenkin meillä on tämä rajoitus, muistattehan, että emme voi liittää, Dialogue: 0,0:12:11.70,0:12:14.78,Default,,0000,0000,0000,,koska DDL:n on aloitettava "CREATE"-sanalla. Dialogue: 0,0:12:15.44,0:12:19.50,Default,,0000,0000,0000,,Toinen hieno temppu on käyttää load extension -funktiota väärin. Dialogue: 0,0:12:19.50,0:12:24.100,Default,,0000,0000,0000,,Ja tässä voit nähdä, kuinka voit mahdollisesti ladata etä-DLL:n. Dialogue: 0,0:12:24.100,0:12:26.86,Default,,0000,0000,0000,,Tässä tapauksessa meterpreter.dll, Dialogue: 0,0:12:26.86,0:12:31.29,Default,,0000,0000,0000,,mutta ilmeisesti tämä erittäin vaarallinen funktio on oletuksena pois käytöstä. Dialogue: 0,0:12:31.29,0:12:36.51,Default,,0000,0000,0000,,Joten se taas ei onnistu. Entä muistin korruptio SQLite:ssä, Dialogue: 0,0:12:36.51,0:12:41.85,Default,,0000,0000,0000,,koska SQLite on todella monimutkainen ja se on kaikki kirjoitettu C:llä. Dialogue: 0,0:12:42.48,0:12:47.34,Default,,0000,0000,0000,,Hänen hämmästyttävässä blogikirjoituksessaan "Virheiden löytäminen SQLite:ssä helposti", Dialogue: 0,0:12:47.34,0:12:50.10,Default,,0000,0000,0000,,Michal Zalewski, AFL:n tekijä, kuvasi, Dialogue: 0,0:12:50.10,0:12:55.64,Default,,0000,0000,0000,,kuinka hän löysi 22 bugia alle 30 minuutissa fuzzingilla Dialogue: 0,0:12:55.64,0:12:58.25,Default,,0000,0000,0000,,Ja itse asiassa, sen jälkeen, Dialogue: 0,0:12:58.25,0:13:01.58,Default,,0000,0000,0000,,kun kyseessä oli versio 3.8.10 vuonna 2015, Dialogue: 0,0:13:01.58,0:13:07.31,Default,,0000,0000,0000,,SQLite alkoi käyttää AFL:ää osana huomattavaa testisarjaa. Dialogue: 0,0:13:07.31,0:13:15.08,Default,,0000,0000,0000,,Nämä muistin korruptiovirheet osoittautuivat kuitenkin erittäin vaikeiksi hyödyntää ilman sopivaa ympäristöä. Dialogue: 0,0:13:15.08,0:13:19.83,Default,,0000,0000,0000,,Turvallisuustutkimusyhteisö löysi kuitenkin pian täydellisen kohteen, Dialogue: 0,0:13:19.83,0:13:22.40,Default,,0000,0000,0000,,ja se oli nimeltään WebSQL. Dialogue: 0,0:13:22.66,0:13:28.40,Default,,0000,0000,0000,,Joten WebSQL on periaatteessa API tietojen tallentamiseen tietokantoihin, Dialogue: 0,0:13:28.40,0:13:33.84,Default,,0000,0000,0000,,ja sitä kysytään JavaScriptistä, ja sillä on SQLite-tausta. Dialogue: 0,0:13:33.84,0:13:37.30,Default,,0000,0000,0000,,Lisäksi se on saatavana Chromessa ja Safarissa. Dialogue: 0,0:13:37.30,0:13:43.48,Default,,0000,0000,0000,,Tässä voit nähdä hyvin yksinkertaisen esimerkin siitä, miten voit käyttää WebSQL:ää JavaScriptistä. Dialogue: 0,0:13:46.52,0:13:49.52,Default,,0000,0000,0000,,Mutta toisin sanoen, mitä täällä luulen, on se, Dialogue: 0,0:13:49.52,0:13:53.25,Default,,0000,0000,0000,,että meillä on joitakin luottamattomia syötteitä SQLite:lle, Dialogue: 0,0:13:53.25,0:13:56.99,Default,,0000,0000,0000,,ja se on saavutettavissa mistä tahansa Internetin verkkosivustosta Dialogue: 0,0:13:56.99,0:13:59.60,Default,,0000,0000,0000,,kahdessa maailman suosituimmassa selaimessa. Dialogue: 0,0:13:59.60,0:14:02.26,Default,,0000,0000,0000,,Ja yhtäkkiä nämä virheet, Dialogue: 0,0:14:02.26,0:14:10.45,Default,,0000,0000,0000,,nämä muistin korruptiot, voidaan nyt hyödyntää JavaScript-hyväksikäytön tiedosta ja mukavuudesta. Dialogue: 0,0:14:10.50,0:14:14.88,Default,,0000,0000,0000,,JavaScript-tulkin hyväksikäyttö, jossa olemme tulleet varsin hyviksi vuosien varrella. Dialogue: 0,0:14:14.88,0:14:22.07,Default,,0000,0000,0000,,Joten WebSQL:stä on julkaistu useita vaikuttavia tutkimuksia, Dialogue: 0,0:14:22.07,0:14:23.87,Default,,0000,0000,0000,,jotka vaihtelevat todella helppoista kohteista, Dialogue: 0,0:14:23.87,0:14:26.93,Default,,0000,0000,0000,,kuten CVE-2015-7036, Dialogue: 0,0:14:26.93,0:14:31.56,Default,,0000,0000,0000,,joka oli luottamattoman osoittimen purku fts3_tokenizer()-funktiossa, Dialogue: 0,0:14:31.56,0:14:33.98,Default,,0000,0000,0000,,monimutkaisempiin hyökkäyksiin, Dialogue: 0,0:14:33.98,0:14:42.59,Default,,0000,0000,0000,,kuten Blackhat 2017:ssä esitelty Chaitin-tiimin löytämä tyyppisekoittumisongelma FTS-optimoinnissa, Dialogue: 0,0:14:42.59,0:14:46.22,Default,,0000,0000,0000,,sekä hiljattain Magellan-bugit, jotka Tencent löysi, Dialogue: 0,0:14:46.22,0:14:50.84,Default,,0000,0000,0000,,jotka löysivät kokonaisluvun ylivuodon FTS-segmentinlukijassa. Dialogue: 0,0:14:50.84,0:14:53.91,Default,,0000,0000,0000,,Ja jos kiinnität nyt edes hieman huomiota, Dialogue: 0,0:14:53.91,0:14:57.60,Default,,0000,0000,0000,,niin näet mielenkiintoisen kaavan nousevan esiin. Dialogue: 0,0:14:57.60,0:15:01.68,Default,,0000,0000,0000,,Kaikki nämä haavoittuvat funktiot alkavat FTS:llä. Dialogue: 0,0:15:01.68,0:15:03.09,Default,,0000,0000,0000,,Joten mikä on FTS? Dialogue: 0,0:15:03.09,0:15:04.57,Default,,0000,0000,0000,,En ole koskaan kuullut siitä. Dialogue: 0,0:15:04.57,0:15:05.83,Default,,0000,0000,0000,,Ja kun etsin sitä Googlesta, Dialogue: 0,0:15:05.83,0:15:08.06,Default,,0000,0000,0000,,se vain hämmensi minua vielä enemmän. Dialogue: 0,0:15:09.56,0:15:10.82,Default,,0000,0000,0000,,Jonkin ajan kuluttua tajusin, Dialogue: 0,0:15:10.82,0:15:19.10,Default,,0000,0000,0000,,että FTS tarkoittaa "täysi tekstihaku" ja se on jotain nimeltään virtuaalinen taulukkomoduuli, Dialogue: 0,0:15:19.10,0:15:23.100,Default,,0000,0000,0000,,joka mahdollistaa todella hienovaraisen tekstin haun dokumenttien joukosta. Dialogue: 0,0:15:23.100,0:15:27.27,Default,,0000,0000,0000,,Tai kuten SQLite-tekijät kuvasivat sitä, Dialogue: 0,0:15:27.27,0:15:29.75,Default,,0000,0000,0000,,se on "kuin Google SQLite-tietokannoillesi". Dialogue: 0,0:15:29.75,0:15:34.97,Default,,0000,0000,0000,,Joten virtuaalitaulukot mahdollistavat joitain todella hienoja toimintoja SQLite:ssa, Dialogue: 0,0:15:34.97,0:15:39.57,Default,,0000,0000,0000,,olipa kyseessä tämä vapaa tekstin haku tai virtuaalitaulukkomoduuli nimeltään RTREE, Dialogue: 0,0:15:39.57,0:15:42.65,Default,,0000,0000,0000,,joka tekee todella fiksua maantieteellistä indeksointia, Dialogue: 0,0:15:42.65,0:15:44.92,Default,,0000,0000,0000,,tai virtuaalitaulukko nimeltään CSV, Dialogue: 0,0:15:44.92,0:15:47.97,Default,,0000,0000,0000,,joka antaa sinun käsitellä tietokantaasi CSV-tiedostona. Dialogue: 0,0:15:47.97,0:15:52.40,Default,,0000,0000,0000,,Ja näitä virtuaalitaulukoita kysytään itse asiassa ihan kuin normaaleja taulukoita. Dialogue: 0,0:15:52.40,0:15:56.53,Default,,0000,0000,0000,,Kuitenkin taustalla tapahtuu joitain pimeitä taikoja. Dialogue: 0,0:15:56.53,0:16:01.11,Default,,0000,0000,0000,,Ja jokaisen kyselyn jälkeen, kutsutaan jonkinlaista takaisinkutsufunktiota, Dialogue: 0,0:16:01.11,0:16:05.74,Default,,0000,0000,0000,,joka toimii niin kutsuttua shadow-taulukkoa vastaan. Dialogue: 0,0:16:05.74,0:16:09.17,Default,,0000,0000,0000,,Varjotaulukot olisi parasta selittää esimerkin avulla. Dialogue: 0,0:16:09.17,0:16:15.77,Default,,0000,0000,0000,,Joten sanotaan, että luon virtuaalitaulukon käyttäen sitä FTS-virtuaalitaulukkomoduulia Dialogue: 0,0:16:15.77,0:16:18.08,Default,,0000,0000,0000,,ja lisään siihen merkkijonon. Dialogue: 0,0:16:18.08,0:16:22.97,Default,,0000,0000,0000,,Ilmeisesti tehokkaan haun sallimiseksi minulla täytyy olla joitain metatietoja, okei? Dialogue: 0,0:16:22.97,0:16:26.82,Default,,0000,0000,0000,,Minun täytyy olla joitain offsetteja tai indeksejä tai merkkejä tai jotain sellaista. Dialogue: 0,0:16:26.82,0:16:29.12,Default,,0000,0000,0000,,Ja ilmeisesti kaikki ne ovat tekstiä, eikö niin? Dialogue: 0,0:16:29.12,0:16:34.04,Default,,0000,0000,0000,,Joten yksi virtuaalitaulukko on itse asiassa raakatekstiä, Dialogue: 0,0:16:34.04,0:16:37.70,Default,,0000,0000,0000,,ja metatiedot tallennetaan kolmen varjoshadow-taulukon joukkoon. Dialogue: 0,0:16:37.70,0:16:43.34,Default,,0000,0000,0000,,Joten raakateksti menisi vt_contentiin ja metatiedot menisivät vt_segmentsiin ja vt_segdiriin. Dialogue: 0,0:16:44.08,0:16:49.38,Default,,0000,0000,0000,,Ajan myötä nämä varjotaulukot ovat liittymäpintoja, Dialogue: 0,0:16:49.38,0:16:51.52,Default,,0000,0000,0000,,jotka siirtävät tietoa toistensa välillä. Dialogue: 0,0:16:51.52,0:16:54.08,Default,,0000,0000,0000,,Koska metatieto tallentaa kaikki nämä osoittimet, Dialogue: 0,0:16:54.08,0:16:56.53,Default,,0000,0000,0000,,sinun on siirrettävä ne toistensa välillä. Dialogue: 0,0:16:56.53,0:16:59.46,Default,,0000,0000,0000,,Ja nämä liittymäpinnat osoittautuivat todella, Dialogue: 0,0:16:59.46,0:17:02.08,Default,,0000,0000,0000,,todella luottavaisiksi luonteeltaan. Dialogue: 0,0:17:02.08,0:17:06.100,Default,,0000,0000,0000,,Ja se tekee niistä todella otollisen maaperän bugin metsästykseen. Dialogue: 0,0:17:06.100,0:17:13.43,Default,,0000,0000,0000,,Näytän teille nyt bugin, jonka löysin RTREE-virtuaalitaulukkomoduulista. Dialogue: 0,0:17:14.64,0:17:18.84,Default,,0000,0000,0000,,RTREE-virtuaalitaulumoduuli on nyt saatavilla MacOS- ja iOS-laitteille, Dialogue: 0,0:17:18.84,0:17:22.50,Default,,0000,0000,0000,,ja se on todella hieno, koska se on nyt myös osa Windows 10:ää. Dialogue: 0,0:17:22.50,0:17:27.62,Default,,0000,0000,0000,,Ja kuten mainitsin, se tekee todella fiksua maantieteellistä indeksointia. Dialogue: 0,0:17:27.62,0:17:34.03,Default,,0000,0000,0000,,DDL:n tulisi olla seuraava. Minkä tahansa RTREE-virtuaalitaulun tulisi alkaa "id":llä, Dialogue: 0,0:17:34.03,0:17:39.45,Default,,0000,0000,0000,,jonka täytyy olla kokonaisluku. Sen jälkeen sinulla on joitakin X- ja Y-koordinaatteja. Dialogue: 0,0:17:39.45,0:17:44.59,Default,,0000,0000,0000,,Joten jokainen RTREE-liitäntä odottaisi "id":n olevan kokonaisluku. Dialogue: 0,0:17:44.59,0:17:48.72,Default,,0000,0000,0000,,Mutta jos luon virtuaalitaulun ja lisään "id":hen jotain, Dialogue: 0,0:17:48.72,0:17:54.66,Default,,0000,0000,0000,,joka ei ole kokonaisluku, ja käytän yhtä näistä RTREE-liitännäisistä, Dialogue: 0,0:17:54.66,0:17:59.15,Default,,0000,0000,0000,,rtreenode, näet alhaalla, että saamme tämän kaatumisen, Dialogue: 0,0:17:59.15,0:18:03.33,Default,,0000,0000,0000,,tämän kekomuistin ulkopuolisen lukemisen. Dialogue: 0,0:18:03.33,0:18:07.50,Default,,0000,0000,0000,,Ja tämä esimerkki on kaatuminen Windows 10:ssä. Dialogue: 0,0:18:07.50,0:18:11.13,Default,,0000,0000,0000,,Joten se on aika hyvä. Olemme havainneet, Dialogue: 0,0:18:11.13,0:18:13.98,Default,,0000,0000,0000,,että virtuaalitaulussa on bugeja. Dialogue: 0,0:18:13.98,0:18:16.99,Default,,0000,0000,0000,,Ja nyt, käyttämällä kyselyn kaappaustekniikkaa, Dialogue: 0,0:18:16.99,0:18:21.31,Default,,0000,0000,0000,,voimme yhtäkkiä laukaista nämä bugit kohteellamme, Dialogue: 0,0:18:21.31,0:18:25.83,Default,,0000,0000,0000,,joka on salasanavaras C2, ja se kaatuu (segfault). Dialogue: 0,0:18:25.83,0:18:30.05,Default,,0000,0000,0000,,Ja tämä on hienoa, mutta varsinaisen ohjauksen saaminen kohteestamme Dialogue: 0,0:18:30.05,0:18:33.59,Default,,0000,0000,0000,,vaatii jonkinlaista skriptausta, eikö niin? Dialogue: 0,0:18:33.59,0:18:37.00,Default,,0000,0000,0000,,Haluamme ohittaa ASLR:n ja tehdä kaikenlaisia hulluja asioita. Dialogue: 0,0:18:37.00,0:18:39.08,Default,,0000,0000,0000,,Meillä ei kuitenkaan ole JavaScriptiä, Dialogue: 0,0:18:39.08,0:18:43.79,Default,,0000,0000,0000,,meillä ei ole JavaScript-taulukoita ja muuttujia ja logiikkalauseita, Dialogue: 0,0:18:43.79,0:18:50.37,Default,,0000,0000,0000,,kuten if ja and silmukoita ja sellaisia. Kuitenkin muistamme jostain kuulleemme, Dialogue: 0,0:18:50.37,0:18:53.26,Default,,0000,0000,0000,,että SQL on Turing-täydellinen. Dialogue: 0,0:18:53.26,0:18:58.88,Default,,0000,0000,0000,,Joten päätimme testata sitä hyökkäysnäkökulmasta Dialogue: 0,0:18:58.88,0:19:03.62,Default,,0000,0000,0000,,ja aloimme luoda omaa primitiivista toivelistaa hyökkäystä varten. Dialogue: 0,0:19:03.62,0:19:06.49,Default,,0000,0000,0000,,Joten jos se voisi luoda täyden hyökkäyksen, Dialogue: 0,0:19:06.49,0:19:09.71,Default,,0000,0000,0000,,jossa hyödynnetään muistin korruptiobugeja pelkästään SQL:llä, Dialogue: 0,0:19:09.71,0:19:11.90,Default,,0000,0000,0000,,mitä kyvykkyyksiä haluamme? Dialogue: 0,0:19:11.90,0:19:15.21,Default,,0000,0000,0000,,Joten ilmeisesti ohittaaksemme ASLR:n ja nämä asiat, Dialogue: 0,0:19:15.21,0:19:16.66,Default,,0000,0000,0000,,tarvitsemme vuodon muistista. Dialogue: 0,0:19:16.66,0:19:18.78,Default,,0000,0000,0000,,Meidän täytyy saada tietovuoto. Dialogue: 0,0:19:18.78,0:19:20.96,Default,,0000,0000,0000,,Jos olet tehnyt pwningia menneisyydessäsi, Dialogue: 0,0:19:20.96,0:19:24.05,Default,,0000,0000,0000,,sinun täytyy olla tuttu todella yleisten tehtävien suhteen, Dialogue: 0,0:19:24.05,0:19:29.34,Default,,0000,0000,0000,,kuten 64-bittisten osoittimen purkamisesta ja joitakin osoitinlaskutoimituksia, eikö niin? Dialogue: 0,0:19:29.34,0:19:33.13,Default,,0000,0000,0000,,Koska meillä oli tietovuoto, muunnamme - luemme tämän osoittimen, Dialogue: 0,0:19:33.13,0:19:35.41,Default,,0000,0000,0000,,ja se on little-endian, joten meidän täytyy kääntää se, Dialogue: 0,0:19:35.41,0:19:38.87,Default,,0000,0000,0000,,ja nyt haluamme laskea, missä on libsqlite-tiedoston perusta, Dialogue: 0,0:19:38.87,0:19:40.96,Default,,0000,0000,0000,,jotta voimme löytää ehkä lisää funktioita. Dialogue: 0,0:19:40.96,0:19:43.87,Default,,0000,0000,0000,,Joten tarvitsemme joitakin osoitinlaskutoimituksia. Dialogue: 0,0:19:43.87,0:19:48.04,Default,,0000,0000,0000,,Luonnollisesti, kun olemme lukeneet osoittimet ja manipuloineet niitä, Dialogue: 0,0:19:48.04,0:19:52.42,Default,,0000,0000,0000,,haluamme pakata ne uudelleen ja kirjoittaa ne jonnekin. Dialogue: 0,0:19:52.42,0:19:55.96,Default,,0000,0000,0000,,Yhden osoittimen kirjoittaminen ei koskaan riitä. Dialogue: 0,0:19:55.96,0:19:59.37,Default,,0000,0000,0000,,Haluamme luoda väärennettyjä objekteja muistissa, Dialogue: 0,0:19:59.37,0:20:04.51,Default,,0000,0000,0000,,monimutkaisempia kuin yksi osoitin. Lopuksi, haluaisimme heap sprayn, Dialogue: 0,0:20:04.51,0:20:06.55,Default,,0000,0000,0000,,koska se voi olla todella hyödyllinen. Dialogue: 0,0:20:06.55,0:20:09.32,Default,,0000,0000,0000,,Joten, kysymys kuuluu, Dialogue: 0,0:20:09.32,0:20:13.43,Default,,0000,0000,0000,,voiko kaikki tämä hyödyntäminen tehdä pelkästään SQL:llä? Dialogue: 0,0:20:13.43,0:20:16.08,Default,,0000,0000,0000,,Vastaus on "kyllä, se on mahdollista". Dialogue: 0,0:20:16.08,0:20:21.23,Default,,0000,0000,0000,,Ja esittelen teille ylpeänä Kysely-orientoitunut ohjelmointi tai QOP. Dialogue: 0,0:20:21.23,0:20:30.15,Default,,0000,0000,0000,,Demonstroidakseni QOP:ia hyväksikäytämme haavoittuvuutta CVE-2015-7036. Dialogue: 0,0:20:33.27,0:20:34.58,Default,,0000,0000,0000,,Ja saatatte kysyä itseltänne: Dialogue: 0,0:20:34.58,0:20:38.68,Default,,0000,0000,0000,,Miten neljä vuotta vanha bugi on edelleen korjaamatta? Dialogue: 0,0:20:38.68,0:20:42.47,Default,,0000,0000,0000,,Ja tämä on hieno asia argumenttiimme. Dialogue: 0,0:20:42.47,0:20:48.96,Default,,0000,0000,0000,,Tämä CVE koettiin vaaralliseksi vain luottamattomien Web-SQL:n suhteen. Dialogue: 0,0:20:48.96,0:20:51.27,Default,,0000,0000,0000,,Se siis kierrettiin oikein. Dialogue: 0,0:20:51.27,0:20:55.82,Default,,0000,0000,0000,,Se on blacklistattu ja SQL on käännetty tietyllä lipulla. Dialogue: 0,0:20:55.82,0:20:59.30,Default,,0000,0000,0000,,Joten selkeästi selaimet eivät enää ole kääntäneet tällä lipulla. Dialogue: 0,0:20:59.30,0:21:00.50,Default,,0000,0000,0000,,Mutta anna minun näyttää sinulle, Dialogue: 0,0:21:00.50,0:21:02.36,Default,,0000,0000,0000,,minkä kanssa nämä liput on käännetty. Dialogue: 0,0:21:02.36,0:21:04.68,Default,,0000,0000,0000,,Joten meillä on PHP 5 ja PHP 7, Dialogue: 0,0:21:04.68,0:21:06.40,Default,,0000,0000,0000,,jotka ovat vastuussa suurimmasta osasta Internetiä, Dialogue: 0,0:21:06.40,0:21:10.00,Default,,0000,0000,0000,,sekä iOS ja MacOS ja todennäköisesti niin monia muita kohteita, Dialogue: 0,0:21:10.00,0:21:14.28,Default,,0000,0000,0000,,joita emme vain ehtineet käydä läpi. Dialogue: 0,0:21:14.28,0:21:16.70,Default,,0000,0000,0000,,Joten selitetään hieman tätä haavoittuvuutta. Dialogue: 0,0:21:16.70,0:21:19.59,Default,,0000,0000,0000,,Olen maininnut, että se on FTS-tokenizerissa. Dialogue: 0,0:21:19.91,0:21:24.66,Default,,0000,0000,0000,,Joten tokenizer on vain joukko sääntöjä dokumenttien Dialogue: 0,0:21:24.66,0:21:26.75,Default,,0000,0000,0000,,tai kyselyjen termeistä erottamiseksi. Dialogue: 0,0:21:26.75,0:21:30.94,Default,,0000,0000,0000,,Ja oletustokenizeri, jota kutsutaan "yksinkertaiseksi", Dialogue: 0,0:21:30.94,0:21:33.92,Default,,0000,0000,0000,,vain jakaa merkkijonot tyhjien merkkien perusteella. Dialogue: 0,0:21:33.92,0:21:38.64,Default,,0000,0000,0000,,Kuitenkin, jos haluat, voit rekisteröidä oman mukautetun tokenizerin. Dialogue: 0,0:21:38.64,0:21:42.43,Default,,0000,0000,0000,,Voit vain siirtää C-funktion ja oikeastaan rekisteröit Dialogue: 0,0:21:42.43,0:21:47.76,Default,,0000,0000,0000,,tämän mukautetun tokenizerin fts3_tokenizer() -funktiolla SQL-kyselyssä. Dialogue: 0,0:21:48.79,0:21:51.12,Default,,0000,0000,0000,,Tässä on jonkin verran asiaa, mutta sanon sen hitaasti. Dialogue: 0,0:21:51.12,0:21:55.51,Default,,0000,0000,0000,,Siirrät riviosoittimen C-funktioon SQL-kyselyssä. Dialogue: 0,0:21:55.51,0:21:57.45,Default,,0000,0000,0000,,Tämä on täysin mielipuolista. Dialogue: 0,0:21:57.45,0:22:00.64,Default,,0000,0000,0000,,Rehellisesti sanottuna, vaikka olen tutkinut tätä jonkin aikaa, Dialogue: 0,0:22:00.64,0:22:05.10,Default,,0000,0000,0000,,en vieläkään ymmärrä, miten käyttää tätä ominaisuutta hyväksi muualla kuin hyökkäyksessäni. Dialogue: 0,0:22:05.52,0:22:12.66,Default,,0000,0000,0000,,[Yleisö taputtaa] Dialogue: 0,0:22:15.83,0:22:20.28,Default,,0000,0000,0000,,fts3_tokenizer() on ylikuormitettu funktio, Dialogue: 0,0:22:20.28,0:22:22.24,Default,,0000,0000,0000,,ja jos kutsut sen yhdellä argumentilla, Dialogue: 0,0:22:22.24,0:22:27.30,Default,,0000,0000,0000,,joka on tokenizerin nimi, saat takaisin kyseisen tokenizerin osoitteen. Dialogue: 0,0:22:27.30,0:22:33.76,Default,,0000,0000,0000,,Teemme sen hieman ihmiselle luettavammaksi käyttämällä heksadesimaalimuunnosta. Dialogue: 0,0:22:33.76,0:22:38.92,Default,,0000,0000,0000,,Voit nyt nähdä, että saimme tietovuodon libsqlite3:een. Dialogue: 0,0:22:38.92,0:22:42.97,Default,,0000,0000,0000,,Koska se on little-endian, meidän on käännettävä se ympäri, Dialogue: 0,0:22:42.97,0:22:44.76,Default,,0000,0000,0000,,mutta tämä on jo melko hienoa. Dialogue: 0,0:22:44.76,0:22:48.33,Default,,0000,0000,0000,,Jos kutsut fts3_tokenizer():ia kahdella argumentilla, Dialogue: 0,0:22:48.33,0:22:55.02,Default,,0000,0000,0000,,joista ensimmäinen on tokenizerin nimi ja toinen on raakaosoitin, ja tämä on täysin mielipuolista.. Dialogue: 0,0:22:55.02,0:22:58.01,Default,,0000,0000,0000,,voit kirjoittaa kyseisen tokenizerin osoitteen uudelleen. Dialogue: 0,0:22:58.01,0:23:01.75,Default,,0000,0000,0000,,Joten aina kun joku yrittää käyttää virtuaalitaulua Dialogue: 0,0:23:01.75,0:23:08.19,Default,,0000,0000,0000,,ja se instantisoi oletusarvoisen tokenizerin, se kaatuu. Dialogue: 0,0:23:08.19,0:23:10.74,Default,,0000,0000,0000,,Tämä on melko hämmästyttävää. Dialogue: 0,0:23:10.74,0:23:14.17,Default,,0000,0000,0000,,Lyhyt kertaus: olemme vahvistaneet, Dialogue: 0,0:23:14.17,0:23:18.14,Default,,0000,0000,0000,,että SQLite on ihana yhden maalin kohde monille, eikö niin? Dialogue: 0,0:23:18.14,0:23:19.74,Default,,0000,0000,0000,,Se on kaikkialla. Dialogue: 0,0:23:19.74,0:23:23.65,Default,,0000,0000,0000,,Ja se on monimutkainen C:llä kirjoitettu kone. Dialogue: 0,0:23:23.65,0:23:27.46,Default,,0000,0000,0000,,Nyt, kyselyn kaappaamisen avulla voimme alkaa laukaista näitä bugeja Dialogue: 0,0:23:27.46,0:23:35.23,Default,,0000,0000,0000,,ja tavoitella täydellistä hyökkäystä käyttämällä SQL-kyselyjä. Dialogue: 0,0:23:35.63,0:23:40.70,Default,,0000,0000,0000,,Hyökkäysstrategiamme on seuraava: vuodatamme joitakin osoittimia Dialogue: 0,0:23:40.70,0:23:44.71,Default,,0000,0000,0000,,ja sitten laskemme joitakin funktio-osoitteita. Dialogue: 0,0:23:44.71,0:23:47.52,Default,,0000,0000,0000,,Luomme sitten väärennetyn tokenizer-objektin, Dialogue: 0,0:23:47.52,0:23:50.41,Default,,0000,0000,0000,,jolla on jokin osoitin system()-funktioon. Dialogue: 0,0:23:50.41,0:23:55.16,Default,,0000,0000,0000,,Ylikirjoitamme oletusarvoisen tokenizerin ja laukaisemme pahantahtoisen tokenizerimme. Dialogue: 0,0:23:55.16,0:24:02.68,Default,,0000,0000,0000,,Sitten tapahtuu jotain, ja lopussa meidän pitäisi pystyä hyötymään jotenkin, eikö niin? Dialogue: 0,0:24:02.68,0:24:07.28,Default,,0000,0000,0000,,Aloittaen muistivuodosta ja tietovuodosta libsqliteen. Dialogue: 0,0:24:07.28,0:24:09.78,Default,,0000,0000,0000,,Tiedät jo, miten tehdään, eikö niin? Dialogue: 0,0:24:09.78,0:24:16.48,Default,,0000,0000,0000,,Näimme fts3_tokenizer():in, mutta meillä on vielä pieni ongelma little-endian osoittimen kanssa. Dialogue: 0,0:24:16.48,0:24:18.05,Default,,0000,0000,0000,,Joten meidän on käännettävä se ympäri. Dialogue: 0,0:24:18.05,0:24:20.74,Default,,0000,0000,0000,,Varmaan voimme käyttää SUBSTR-funktiota Dialogue: 0,0:24:20.74,0:24:25.47,Default,,0000,0000,0000,,ja lukea tämän osoittimen kaksi merkkiä kerrallaan käänteisessä järjestyksessä Dialogue: 0,0:24:25.47,0:24:29.21,Default,,0000,0000,0000,,ja yhdistää kaiken koko osoittimen läpi. Dialogue: 0,0:24:29.21,0:24:32.96,Default,,0000,0000,0000,,Joten saamme SELECT-kyselyn, joka näyttää seuraavalta, Dialogue: 0,0:24:32.96,0:24:35.41,Default,,0000,0000,0000,,mutta nyt meillä on osoitin. Dialogue: 0,0:24:35.41,0:24:36.80,Default,,0000,0000,0000,,Tämä on hienoa. Dialogue: 0,0:24:36.80,0:24:38.80,Default,,0000,0000,0000,,Entä tietovuoto kekomuistiin? Dialogue: 0,0:24:38.80,0:24:40.86,Default,,0000,0000,0000,,Haluamme tietää, missä keko sijaitsee. Dialogue: 0,0:24:40.86,0:24:43.38,Default,,0000,0000,0000,,Aloitetaanpa tekemään temppua, Dialogue: 0,0:24:43.38,0:24:46.59,Default,,0000,0000,0000,,joka on melko samankaltainen kuin RTREE-bugi, jonka olemme löytäneet. Dialogue: 0,0:24:46.59,0:24:50.74,Default,,0000,0000,0000,,Joten jälleen kerran, aiomme sekoittaa joitakin shadow-taulukkojen käyttöliittymiä. Dialogue: 0,0:24:50.74,0:24:56.02,Default,,0000,0000,0000,,Luomme siis virtuaalitaulukon ja lisäämme siihen joitakin arvoja. Dialogue: 0,0:24:56.02,0:24:59.72,Default,,0000,0000,0000,,Nyt aiomme hämmentää match-käyttöliittymää. Dialogue: 0,0:24:59.72,0:25:02.92,Default,,0000,0000,0000,,Match-käyttöliittymä tekee monia asioita, Dialogue: 0,0:25:02.92,0:25:09.19,Default,,0000,0000,0000,,mutta taustalla se vain palvelee osoittimen muistissa, jossa tekstin sijainti sijaitsee. Dialogue: 0,0:25:09.19,0:25:12.55,Default,,0000,0000,0000,,Se on tätä metadataa, hienoja asioita, joita virtuaalitaululla on. Dialogue: 0,0:25:12.55,0:25:14.66,Default,,0000,0000,0000,,Joten aiomme hämmentää sitä ja sen sijaan, Dialogue: 0,0:25:14.66,0:25:17.89,Default,,0000,0000,0000,,että siirtäisimme sen toiselle virtuaalitaulun käyttöliittymälle, Dialogue: 0,0:25:17.89,0:25:21.19,Default,,0000,0000,0000,,siirrämme sen yksinkertaisesti heksadekooderille, Dialogue: 0,0:25:21.19,0:25:23.52,Default,,0000,0000,0000,,joten puramme tämän raakanosoittimen. Dialogue: 0,0:25:23.52,0:25:25.71,Default,,0000,0000,0000,,Ja voit nähdä, jälleen kerran little-endianin, Dialogue: 0,0:25:25.71,0:25:28.04,Default,,0000,0000,0000,,mutta nyt meillä on linkki kekoon. Dialogue: 0,0:25:28.53,0:25:30.69,Default,,0000,0000,0000,,Voimme yliviivata sen listalta. Dialogue: 0,0:25:30.69,0:25:34.11,Default,,0000,0000,0000,,Ja ennen kuin siirrymme eteenpäin tämän osoittimen purkamiseen, Dialogue: 0,0:25:34.11,0:25:37.49,Default,,0000,0000,0000,,meillä on hyvin perustavanlaatuinen ongelma. Dialogue: 0,0:25:37.49,0:25:39.87,Default,,0000,0000,0000,,Kuinka edes tallennamme näitä asioita? Dialogue: 0,0:25:39.87,0:25:44.89,Default,,0000,0000,0000,,Koska toisin kuin selaimen WebSQL:ssä, meillä ei ole JavaScript-muuttujia tai taulukoita, Dialogue: 0,0:25:44.89,0:25:46.70,Default,,0000,0000,0000,,joita voimme käyttää ja hyväksikäyttää myöhemmin, Dialogue: 0,0:25:46.70,0:25:49.67,Default,,0000,0000,0000,,mutta meidän on luotava joitakin monimutkaisia logiikoita, eikö niin? Dialogue: 0,0:25:49.67,0:25:55.46,Default,,0000,0000,0000,,Meidän on laskettava funktio-osoite ja luotava asioita muistissa, mutta kuinka voimme tehdä sen? Dialogue: 0,0:25:55.46,0:25:58.04,Default,,0000,0000,0000,,Ilmeisesti SQLite:llä, kun haluat tallentaa joitakin arvoja, Dialogue: 0,0:25:58.04,0:26:04.80,Default,,0000,0000,0000,,sinun on oltava insert-lausekkeita, mutta voimme vain luoda tauluja, näkymiä, indeksejä ja laukaisimia. Dialogue: 0,0:26:05.90,0:26:11.75,Default,,0000,0000,0000,,Sitten ajattelimme ketjuttaa tämän näkymän yhteen käyttääksemme niitä jonkinlaisena pseudomuuttujana. Dialogue: 0,0:26:11.75,0:26:13.91,Default,,0000,0000,0000,,Joten jälleen kerran, anna minun näyttää sinulle esimerkki. Dialogue: 0,0:26:13.91,0:26:18.15,Default,,0000,0000,0000,,Tässä luon näkymän, jota kutsutaan "little-endian leak", okei? Dialogue: 0,0:26:18.15,0:26:21.87,Default,,0000,0000,0000,,Ja taas hyväksikäytän fts3_tokenizer() -funktiota. Dialogue: 0,0:26:21.87,0:26:25.15,Default,,0000,0000,0000,,Nyt luon toisen näkymän sen päälle, ja tätä kutsutaan "leakiksi" Dialogue: 0,0:26:25.15,0:26:27.78,Default,,0000,0000,0000,,ja kääntyy käyttämällä SUBSTR-temppua, Dialogue: 0,0:26:27.78,0:26:29.15,Default,,0000,0000,0000,,jonka tiedät jo aikaisemmasta. Dialogue: 0,0:26:29.15,0:26:33.10,Default,,0000,0000,0000,,Mutta huomaa, kuinka viittasin ensimmäiseen näkymään, viittasin "little-endian leak":iin. Dialogue: 0,0:26:33.10,0:26:40.42,Default,,0000,0000,0000,,Joten teen sen koko osoittimen läpi, ja lopulta minulla on pseudomuuttuja nimeltä "leak". Dialogue: 0,0:26:40.42,0:26:44.85,Default,,0000,0000,0000,,Kun valitsen sen, saan odotetun tuloksen. Dialogue: 0,0:26:45.13,0:26:47.67,Default,,0000,0000,0000,,Joten nyt voimme todella edetä. Dialogue: 0,0:26:47.67,0:26:51.76,Default,,0000,0000,0000,,Nyt voimme aloittaa monimutkaisempien asioiden rakentamisen tämän logiikan perusteella. Dialogue: 0,0:26:52.49,0:26:54.93,Default,,0000,0000,0000,,Ja nyt voimme siirtyä purkamaan osoittimia. Dialogue: 0,0:26:55.47,0:27:01.21,Default,,0000,0000,0000,,Haluamme esimerkiksi laskea kuvan perustan tai löytää keon alun. Dialogue: 0,0:27:01.21,0:27:05.68,Default,,0000,0000,0000,,Joten ensinnäkin haluamme muuntaa osoittimemme kokonaisluvuiksi. Dialogue: 0,0:27:05.68,0:27:11.74,Default,,0000,0000,0000,,Joten jälleen kerran aloitamme lukemalla nämä osoittimet yhden merkin kerrallaan Dialogue: 0,0:27:11.74,0:27:14.82,Default,,0000,0000,0000,,ja käänteisessä järjestyksessä käyttäen SUBSTRia. Dialogue: 0,0:27:14.82,0:27:20.84,Default,,0000,0000,0000,,Ja saadaksemme heksadesimaalimerkin arvon, käytämme INSTR-funktiota, Dialogue: 0,0:27:20.84,0:27:27.21,Default,,0000,0000,0000,,joka on kuin strchar, ja käyttämällä seuraavaa merkkijonoa saamme heksadesimaalimerkin arvon. Dialogue: 0,0:27:27.21,0:27:32.24,Default,,0000,0000,0000,,Koska se on yksipohjainen, on oikealla miinus yksi. Dialogue: 0,0:27:32.24,0:27:36.58,Default,,0000,0000,0000,,Sitten minun täytyy tehdä hieman siirtämistä, kuten jotain pimeää magiaa, Dialogue: 0,0:27:36.58,0:27:42.33,Default,,0000,0000,0000,,ja sitten yhdistän kaiken yhteen osoittimessa. Dialogue: 0,0:27:42.33,0:27:45.10,Default,,0000,0000,0000,,Joten tulos on tämä hirviömäinen kysely. Dialogue: 0,0:27:45.10,0:27:53.06,Default,,0000,0000,0000,,Mutta kun kaikki tämä on tehty, saan kokonaisluvun, joka on purkamaton versio alkuperäisestä vuodosta. Dialogue: 0,0:27:53.06,0:27:56.62,Default,,0000,0000,0000,,Joten onnistuin purkamaan tämän osoittimen, Dialogue: 0,0:27:56.62,0:28:01.09,Default,,0000,0000,0000,,ja meillä on nyt käsillä kokonaislukuja, joten voimme yliviivata sen listalta myös. Dialogue: 0,0:28:01.09,0:28:03.95,Default,,0000,0000,0000,,Tiedämme nyt, miten muuntaa osoittimet kokonaisluvuiksi. Dialogue: 0,0:28:04.20,0:28:10.89,Default,,0000,0000,0000,,Nyt osoitinlaskentaa, koska haluamme saada joitain toimintojen osoitteita muistissa, Dialogue: 0,0:28:10.89,0:28:14.43,Default,,0000,0000,0000,,ja itse asiassa kokonaislukuilla tämä on erittäin yksinkertaista. Dialogue: 0,0:28:14.43,0:28:17.66,Default,,0000,0000,0000,,Kaikki mitä meidän tarvitsee tehdä on käyttää joitakin alikyselyjä. Dialogue: 0,0:28:17.66,0:28:21.20,Default,,0000,0000,0000,,Vasemmalla voit nähdä, että viittaan nyt pseudomuuttujiin, Dialogue: 0,0:28:21.20,0:28:23.99,Default,,0000,0000,0000,,joita meillä on nyt, vuotanut tieto, Dialogue: 0,0:28:23.99,0:28:29.57,Default,,0000,0000,0000,,ja oikealla voin joko vähentää hölmön vakion kuten tein täällä, Dialogue: 0,0:28:29.57,0:28:37.69,Default,,0000,0000,0000,,tai voin todella käyttää toista pseudomuuttujaa tehdäkseni sen hieman dynaamisemmaksi ja luotettavammaksi. Dialogue: 0,0:28:37.69,0:28:45.33,Default,,0000,0000,0000,,Lopulta, mihin päädyin, on libsqlite-perusta kokonaislukumuodossa. Dialogue: 0,0:28:45.33,0:28:50.27,Default,,0000,0000,0000,,Joten, olemme lukeneet joitakin osoittimia ja manipuloineet niitä. Dialogue: 0,0:28:50.27,0:28:55.74,Default,,0000,0000,0000,,Nyt on hyvä aika kirjoittaa ne takaisin. Ja tietysti olemme tottuneet siihen, Dialogue: 0,0:28:55.74,0:28:59.10,Default,,0000,0000,0000,,että "char" on täysin päinvastainen kuin "hex". Dialogue: 0,0:28:59.10,0:29:03.84,Default,,0000,0000,0000,,Ja voit nähdä, että se toimii melko hyvin useimmilla arvoilla, Dialogue: 0,0:29:03.84,0:29:08.93,Default,,0000,0000,0000,,mutta suuremmat kokonaisluvut todella käännettiin niiden kahden tavun koodipisteisiin. Dialogue: 0,0:29:08.93,0:29:12.02,Default,,0000,0000,0000,,Joten tämä oli suuri este meille. Dialogue: 0,0:29:15.20,0:29:20.19,Default,,0000,0000,0000,,Joten, kun olimme viettäneet dokumentaation parissa jonkin aikaa, Dialogue: 0,0:29:20.19,0:29:22.64,Default,,0000,0000,0000,,yhtäkkiä meille valkeni kummallinen oivallus. Dialogue: 0,0:29:22.64,0:29:25.92,Default,,0000,0000,0000,,Tajusimme, että hyökkäyksemme on itse asiassa tietokanta. Dialogue: 0,0:29:25.92,0:29:28.93,Default,,0000,0000,0000,,Ja jos haluan minkä tahansa muunnoksen tapahtuvan, Dialogue: 0,0:29:28.93,0:29:33.99,Default,,0000,0000,0000,,voin yksinkertaisesti luoda etukäteen tämän avain-arvo-kartan ja yksinkertaisesti Dialogue: 0,0:29:33.99,0:29:41.30,Default,,0000,0000,0000,,kysyä sitä käännettäväksi millä tahansa arvolla toiseksi arvoksi alikyselyillä. Dialogue: 0,0:29:41.30,0:29:43.40,Default,,0000,0000,0000,,Tämä on se Python-funktio, jonka olen käyttänyt, Dialogue: 0,0:29:43.40,0:29:45.81,Default,,0000,0000,0000,,ja voit nähdä, että siinä on hyvin yksinkertainen for-silmukka, Dialogue: 0,0:29:45.81,0:29:49.70,Default,,0000,0000,0000,,joka menee 0:sta FF:ään ja vain lisää arvoja tauluun, Dialogue: 0,0:29:49.70,0:29:52.42,Default,,0000,0000,0000,,jota kutsutaan "hex_map", sen avain-kartan arvoilla. Dialogue: 0,0:29:52.42,0:29:58.78,Default,,0000,0000,0000,,Ja nyt muunnoksemme käyttävät alikyselyjä. Joten anna minun jälleen näyttää esimerkki. Dialogue: 0,0:29:59.73,0:30:02.31,Default,,0000,0000,0000,,Voit nähdä, että valitsen "val" heksakartasta, Dialogue: 0,0:30:02.31,0:30:06.70,Default,,0000,0000,0000,,tästä avain-arvo-kartasta, jossa "int" on yhtä suuri kuin, Dialogue: 0,0:30:06.70,0:30:11.37,Default,,0000,0000,0000,,ja sitten teen hieman enemmän kaikenlaista, kuten siirtämistä ja modulo pimeää magiaa, Dialogue: 0,0:30:11.37,0:30:17.06,Default,,0000,0000,0000,,mutta lopulta päädyin pakattuun versioon libsqlite-tietokannasta. Dialogue: 0,0:30:17.06,0:30:23.30,Default,,0000,0000,0000,,Nyt meillä on pakattu little-endian osoitin, joten sen voi ruksata listalta pois. Dialogue: 0,0:30:24.64,0:30:29.93,Default,,0000,0000,0000,,Kuten mainitsin, yksittäisen osoittimen kirjoittaminen on ehdottomasti hyödyllistä, Dialogue: 0,0:30:29.93,0:30:31.02,Default,,0000,0000,0000,,mutta se ei riitä. Dialogue: 0,0:30:31.30,0:30:34.27,Default,,0000,0000,0000,,Haluamme väärentää kokonaisia objekteja, eikö niin? Dialogue: 0,0:30:34.27,0:30:38.05,Default,,0000,0000,0000,,Kaikki coolit tyypit tekevät niin, ja se on melko voimakas primitiivi. Dialogue: 0,0:30:38.05,0:30:40.90,Default,,0000,0000,0000,,Ja jos muistat, meidän on tehtävä se, Dialogue: 0,0:30:40.90,0:30:46.09,Default,,0000,0000,0000,,koska fts3_tokenizer() edellyttää meidän määrittävän tokenizer moduulin. Dialogue: 0,0:30:46.09,0:30:51.45,Default,,0000,0000,0000,,No, mikä on tokenizer-moduuli? Miltä se näyttää? Joten tämä on sen rakenteen alku, Dialogue: 0,0:30:51.45,0:30:54.48,Default,,0000,0000,0000,,ja siinä on "iVersion", joka on kokonaisluku alussa, Dialogue: 0,0:30:54.48,0:30:56.46,Default,,0000,0000,0000,,meillä ei ole oikeastaan mitään tekemistä sen kanssa, Dialogue: 0,0:30:56.46,0:30:59.27,Default,,0000,0000,0000,,mutta sen jälkeen on kolme funktio-osoitinta. Dialogue: 0,0:30:59.57,0:31:06.24,Default,,0000,0000,0000,,Meillä on "xCreate", joka on jakelijan rakentaja, ja "xDestroy", joka on purkaja. Dialogue: 0,0:31:06.24,0:31:11.54,Default,,0000,0000,0000,,Meidän on tehtävä molemmat kelvollisiksi, jotta sovellus ei kaadu hyökätessämme. Dialogue: 0,0:31:11.54,0:31:15.20,Default,,0000,0000,0000,,Kolmas funktio-osoitin on todella mielenkiintoinen, koska tämä on se, Dialogue: 0,0:31:15.20,0:31:16.64,Default,,0000,0000,0000,,joka todella jakaa merkkijonon osiksi. Dialogue: 0,0:31:16.64,0:31:20.78,Default,,0000,0000,0000,,Joten meillä on funktio-osoitin, johon ohjataan hallittavissa oleva merkkijono. Dialogue: 0,0:31:20.78,0:31:25.62,Default,,0000,0000,0000,,Tämä olisi täydellinen paikka laittaa system-vimpaimemme, eikö niin. Dialogue: 0,0:31:26.51,0:31:31.74,Default,,0000,0000,0000,,Tähän mennessä olen käyttänyt melkoisesti SQL-osaamistani, eikö niin? Dialogue: 0,0:31:31.74,0:31:37.25,Default,,0000,0000,0000,,Mutta minulla on vielä yksi temppu hihassani ja se on JOIN-kyselyt, eikö niin? Dialogue: 0,0:31:37.25,0:31:40.66,Default,,0000,0000,0000,,Koska olen oppinut siitä menneessä ajassa. Dialogue: 0,0:31:40.66,0:31:44.22,Default,,0000,0000,0000,,Joten nyt luomme väärennetyn tokenizer-näkymän Dialogue: 0,0:31:44.22,0:31:48.89,Default,,0000,0000,0000,,ja yhdistämme joukon "A"-kirjaimia ja sitten käyttäen JOIN-kyselyä Dialogue: 0,0:31:48.89,0:31:53.90,Default,,0000,0000,0000,,ja yhdistämme sen osoittimeen simple_create ja osoittimeen simple_destroy Dialogue: 0,0:31:53.90,0:31:58.95,Default,,0000,0000,0000,,ja sitten joukon "B":itä. Nyt tarkistetaan se alhaisen tason debuggerissa Dialogue: 0,0:31:58.95,0:32:03.39,Default,,0000,0000,0000,,ja voit itse asiassa nähdä, että jossain muistipaikassa meillä on joukko "A":ita, Dialogue: 0,0:32:03.39,0:32:05.54,Default,,0000,0000,0000,,jonka perässä on osoitin simple_createen, Dialogue: 0,0:32:05.54,0:32:10.04,Default,,0000,0000,0000,,jonka perässä on osoitin simple_destroyiin ja sitten joukko "B":iä. Dialogue: 0,0:32:10.82,0:32:16.31,Default,,0000,0000,0000,,Joten olemme melkein valmiit. Mutta tarvitsemme vielä yhden primitiivin tätä hyödyntääksemme. Dialogue: 0,0:32:16.31,0:32:20.86,Default,,0000,0000,0000,,Ja tämä johtuu siitä, että meillä on jo haitallinen tokenizerimme, Dialogue: 0,0:32:20.86,0:32:26.22,Default,,0000,0000,0000,,ja tiedämme, missä keko sijaitsee, mutta emme ole aivan varmoja, missä tokenizerimme sijaitsee. Dialogue: 0,0:32:26.22,0:32:29.65,Default,,0000,0000,0000,,Tämä on hieno aika heap sprayinglle, eikö olekin. Dialogue: 0,0:32:29.65,0:32:35.20,Default,,0000,0000,0000,,Ja ihanteellisesti tämä olisi jonkin toistuva muoto meidän fakeobj -primitiivistämme. Dialogue: 0,0:32:35.20,0:32:44.03,Default,,0000,0000,0000,,Olemme siis ajatelleet toistoa, mutta valitettavasti SQLite ei ole toteuttanut sitä kuten mySQL. Dialogue: 0,0:32:44.03,0:32:45.60,Default,,0000,0000,0000,,Joten kuten kuka tahansa muukin, Dialogue: 0,0:32:45.60,0:32:50.35,Default,,0000,0000,0000,,menimme Stack Overflowiin ja löysimme tämän todella elegantin ratkaisun. Dialogue: 0,0:32:50.35,0:32:57.89,Default,,0000,0000,0000,,Käytämme siis zeroblob-funktiota, joka yksinkertaisesti palauttaa nollista koostuvan läjän. Dialogue: 0,0:32:57.89,0:33:02.64,Default,,0000,0000,0000,,Sitten korvaamme jokaisen nollan väärennetyllä tokenisaattorillamme. Dialogue: 0,0:33:02.64,0:33:05.72,Default,,0000,0000,0000,,Ja teemme sen kymmenentuhatta kertaa, kuten näette yllä. Dialogue: 0,0:33:05.86,0:33:08.76,Default,,0000,0000,0000,,Uudelleen, varmistaaksemme sen debuggerilla, Dialogue: 0,0:33:08.76,0:33:12.02,Default,,0000,0000,0000,,näet paljon "A":ita ja se on vähän vaikea nähdä, Dialogue: 0,0:33:12.02,0:33:16.41,Default,,0000,0000,0000,,koska nämä ovat todella huonoja värejä, mutta meillä on myös täydellinen johdonmukaisuus, Dialogue: 0,0:33:16.41,0:33:20.84,Default,,0000,0000,0000,,koska nämä rakenteet toistuvat joka 20. heksadesimaalitavussa. Dialogue: 0,0:33:21.22,0:33:25.82,Default,,0000,0000,0000,,Joten loimme melko hyvät heap-spraying -kyvyt, Dialogue: 0,0:33:26.77,0:33:30.95,Default,,0000,0000,0000,,ja olemme valmiit exploitti -toiveluettelomme kanssa, Dialogue: 0,0:33:30.95,0:33:34.49,Default,,0000,0000,0000,,joten voimme palata alkuperäiseen kohteeseemme. Dialogue: 0,0:33:34.49,0:33:39.71,Default,,0000,0000,0000,,Tämä on koodisegmentti erittäin tunnetusta salasanavarkaasta, Dialogue: 0,0:33:39.71,0:33:42.65,Default,,0000,0000,0000,,ja lopussa voit nähdä, että se yrittää valita Dialogue: 0,0:33:42.65,0:33:50.41,Default,,0000,0000,0000,,ja poimia salaisuuksia valitsemalla sarakkeen nimeltä "BodyRich" taulusta nimeltä "Notes". Dialogue: 0,0:33:50.41,0:33:54.20,Default,,0000,0000,0000,,Joten valmistelemme hänelle pienen yllätyksen, okei? Dialogue: 0,0:33:54.40,0:33:56.81,Default,,0000,0000,0000,,Luomme näkymän, jota kutsutaan nimellä "Notes". Dialogue: 0,0:33:56.81,0:34:00.77,Default,,0000,0000,0000,,Ja siinä on kolme alikyselyä sarakkeessa nimeltä "BodyRich". Dialogue: 0,0:34:00.77,0:34:05.19,Default,,0000,0000,0000,,Jokainen näistä alikyselyistä on itse asiassa QOP-ketju. Dialogue: 0,0:34:05.19,0:34:08.60,Default,,0000,0000,0000,,Jos muistat hyökkäyssuunnitelmani, Dialogue: 0,0:34:08.60,0:34:14.14,Default,,0000,0000,0000,,aloitamme heap-spray sitten korvaamme oletustokenisaattorin Dialogue: 0,0:34:14.14,0:34:17.15,Default,,0000,0000,0000,,ja laukaisemme lopuksi haitallisen tokenisaattorin. Dialogue: 0,0:34:17.15,0:34:20.41,Default,,0000,0000,0000,,Ja sinä saatat kysyä itseltäsi, mikä on heap_spray? Dialogue: 0,0:34:20.41,0:34:26.74,Default,,0000,0000,0000,,Ilmeisesti heap_spray on QOP-ketju, joka hyödyntää heap-spraying -kykyjämme, eikö niin. Dialogue: 0,0:34:26.74,0:34:32.86,Default,,0000,0000,0000,,Me ruiskutamme kymmenentuhatta esimerkkiä väärennetystä tokenizeristamme, Dialogue: 0,0:34:32.86,0:34:39.56,Default,,0000,0000,0000,,joka on JOIN-kysely joukosta "A":ita ja joitain osoittimia, kuten p64_simple_create. Dialogue: 0,0:34:40.04,0:34:47.60,Default,,0000,0000,0000,,Ja bileet jatkuvat, koska p64_simple_create on itse asiassa peräisin u64_simple_createsta, oikein, Dialogue: 0,0:34:47.60,0:34:51.22,Default,,0000,0000,0000,,käyttäen osoittimenpakkauskykyjämme. Dialogue: 0,0:34:51.22,0:34:54.65,Default,,0000,0000,0000,,Ja tämä on kuin maatuska-nukke, Dialogue: 0,0:34:54.65,0:35:02.06,Default,,0000,0000,0000,,koska sinulla on u64_simple_create, joka on peräisin libsqlite_basesta plus joistakin vakioista. Dialogue: 0,0:35:02.06,0:35:06.57,Default,,0000,0000,0000,,Ja tämä menee takaisin purkamattomaan vuotoversioon, Dialogue: 0,0:35:06.57,0:35:07.79,Default,,0000,0000,0000,,miinus joitain vakioita. Dialogue: 0,0:35:07.79,0:35:12.76,Default,,0000,0000,0000,,Joten jälleen kerran käytämme osoitinlaskentakykyjämme. Dialogue: 0,0:35:13.35,0:35:18.48,Default,,0000,0000,0000,,Voimme jatkaa u64_leak:illa, joka on peräisin lähes alkuperäisestä vuodosta. Dialogue: 0,0:35:18.48,0:35:21.80,Default,,0000,0000,0000,,Ja me päätämme näyttämällä, Dialogue: 0,0:35:21.80,0:35:27.87,Default,,0000,0000,0000,,kuinka vuoto on itse asiassa peräisin alkuperäisestä haavoittuvuudesta käyttäen fts3_tokenizeria. Dialogue: 0,0:35:27.87,0:35:33.35,Default,,0000,0000,0000,,Ja tämä oli vain yksi kolmesta QOP-ketjusta, joita käytimme tässä hyökkäyksessä. Dialogue: 0,0:35:33.35,0:35:38.53,Default,,0000,0000,0000,,Ja tällä hetkellä joka kerta, kun kuvaan tätä hyökkäystä, tämä on miltä minä varmasti näytän. Dialogue: 0,0:35:38.53,0:35:41.44,Default,,0000,0000,0000,,Ja ollakseni rehellinen, tämä on juurikin mitä tunnen. Dialogue: 0,0:35:41.44,0:35:44.72,Default,,0000,0000,0000,,Mutta onneksi teidän ei tarvitse näyttää tai tuntea samalta kuin minä, Dialogue: 0,0:35:44.72,0:35:49.89,Default,,0000,0000,0000,,koska loimme QOP.py:n, ja se on saatavilla Checkpoint Researchin GitHubissa. Dialogue: 0,0:35:49.89,0:35:56.82,Default,,0000,0000,0000,,Ja yhtäkkiä nämä hullun pitkät ketjut voidaan luoda neljällä helpolla Python-rivillä. Dialogue: 0,0:35:56.82,0:35:59.82,Default,,0000,0000,0000,,Ja tuntuu pwntoolsilta, jos olet perehtynyt siihen, Dialogue: 0,0:35:59.82,0:36:04.76,Default,,0000,0000,0000,,joten voit mennä eteenpäin ja leikkiä sillä etkä näytä hullulta lavalla. Dialogue: 0,0:36:05.38,0:36:07.75,Default,,0000,0000,0000,,Siirrymme ensimmäiseen demoomme. Dialogue: 0,0:36:07.75,0:36:12.68,Default,,0000,0000,0000,,Ownaamme salasanan varastavaa taustapalvelinta, joka toimii uusimmalla PHP 7:llä. Dialogue: 0,0:36:12.68,0:36:16.98,Default,,0000,0000,0000,,Tietenkin tämä on malli, jonka loimme vuotaneista lähteistä, Dialogue: 0,0:36:16.98,0:36:20.35,Default,,0000,0000,0000,,ja näet kaikki tartunnan saaneet uhrit Dialogue: 0,0:36:24.54,0:36:25.30,Default,,0000,0000,0000,,Coolia Dialogue: 0,0:36:25.30,0:36:28.24,Default,,0000,0000,0000,,Nyt yritämme mennä web-shelliin, p.php:hen. Dialogue: 0,0:36:28.76,0:36:31.87,Default,,0000,0000,0000,,Tietenkään sitä ei vielä ole olemassa, saamme 404. Dialogue: 0,0:36:32.24,0:36:34.88,Default,,0000,0000,0000,,Siirrymme hyökkääjän tietokoneelle. Dialogue: 0,0:36:34.88,0:36:37.52,Default,,0000,0000,0000,,Näemme täällä kaksi skriptiä. Dialogue: 0,0:36:37.52,0:36:43.65,Default,,0000,0000,0000,,Ensin käytämme QOP.py:ä, joka luo ilkeämielisen tietokannan. Dialogue: 0,0:36:43.65,0:36:46.51,Default,,0000,0000,0000,,Katsotaanpa, tietokanta luotiin. Dialogue: 0,0:36:46.51,0:36:49.15,Default,,0000,0000,0000,,Nyt emuloimme saastuttamisen. Dialogue: 0,0:36:49.15,0:36:52.54,Default,,0000,0000,0000,,Aloitamme lähettämällä ilkeämielisen tietokantamme C2-palvelimelle Dialogue: 0,0:36:52.54,0:36:54.94,Default,,0000,0000,0000,,kuin olisimme tartunnan saaneet salasanavarkaan kautta. Dialogue: 0,0:36:54.94,0:37:00.08,Default,,0000,0000,0000,,Koska tämä prosessi vie hieman aikaa, voimme tarkastella kaikkia hienoja DDL-lauseita, oikein? Dialogue: 0,0:37:00.08,0:37:05.06,Default,,0000,0000,0000,,Näet siis, että aloitimme jonkin bin-vuodon ja heap-vuodon kanssa ja sitten purimme ne. Dialogue: 0,0:37:05.06,0:37:11.62,Default,,0000,0000,0000,,Ja aivan lopussa voit nähdä, että ohjelmamme luo yksinkertaisen webshellin p.php:lle. Dialogue: 0,0:37:11.62,0:37:15.02,Default,,0000,0000,0000,,Ja tämä on sama sivu, jota juuri yritimme tavoittaa. Dialogue: 0,0:37:15.02,0:37:21.78,Default,,0000,0000,0000,,Joten toivottavasti, joo - hienoa, se on tehty. Dialogue: 0,0:37:21.78,0:37:26.00,Default,,0000,0000,0000,,Nyt palaamme salasanavarkaan back-endiin. Dialogue: 0,0:37:26.00,0:37:28.16,Default,,0000,0000,0000,,Menemme p.php:hen ja saamme vastauksen 200. Dialogue: 0,0:37:28.16,0:37:34.01,Default,,0000,0000,0000,,Nyt suoritamme jotain koodia siinä. whoami. www-data. Dialogue: 0,0:37:34.01,0:37:37.17,Default,,0000,0000,0000,,Ja ilmeisesti meidän täytyy mennä /etc/passwordiin. Dialogue: 0,0:37:39.99,0:37:41.19,Default,,0000,0000,0000,,Jippii. Dialogue: 0,0:37:42.25,0:37:50.68,Default,,0000,0000,0000,,[Yleisö taputtaa] Dialogue: 0,0:37:50.68,0:37:55.30,Default,,0000,0000,0000,,Joten mitä juuri tapahtui, on se, että osoitimme, Dialogue: 0,0:37:55.30,0:38:00.32,Default,,0000,0000,0000,,että annetun kyselyn avulla ilkeämielisessä tietokannassa, Dialogue: 0,0:38:00.32,0:38:04.00,Default,,0000,0000,0000,,voimme suorittaa koodia kyselyprosessissa. Dialogue: 0,0:38:04.00,0:38:07.20,Default,,0000,0000,0000,,Nyt, kun otetaan huomioon, että SQLite on niin suosittu, Dialogue: 0,0:38:07.20,0:38:11.34,Default,,0000,0000,0000,,tämä todella avaa oven laajalle valikoimalle hyökkäyksiä. Dialogue: 0,0:38:11.34,0:38:15.88,Default,,0000,0000,0000,,Tutkitaan toista täysin erilaista käyttötapaa. Joka on täysin erilainen Dialogue: 0,0:38:15.88,0:38:20.25,Default,,0000,0000,0000,,Seuraava kohde on iOS pysyvyys. Dialogue: 0,0:38:21.46,0:38:27.43,Default,,0000,0000,0000,,iOS käyttää SQLiteä laajalti ja pysyvyyden saavuttaminen on todella vaikeaa, Dialogue: 0,0:38:27.43,0:38:32.32,Default,,0000,0000,0000,,koska kaikkien suoritettavien tiedostojen on oltava allekirjoitettuja. Dialogue: 0,0:38:32.32,0:38:36.48,Default,,0000,0000,0000,,Silti SQLite-tietokantoja ei ole allekirjoitettu, eikö niin, ne ovat vain dataa. Dialogue: 0,0:38:36.48,0:38:38.35,Default,,0000,0000,0000,,Niitä ei tarvitse allekirjoittaa. Dialogue: 0,0:38:38.35,0:38:43.26,Default,,0000,0000,0000,,Ja iOS ja MacOS ovat molemmat käännetty käyttäen ENABLE_FTS3_TOKENIZER:ia. Dialogue: 0,0:38:43.26,0:38:45.51,Default,,0000,0000,0000,,Se on se vaarallinen käännöshetken lippu. Dialogue: 0,0:38:45.51,0:38:50.58,Default,,0000,0000,0000,,Suunnitelmani on saada koodin suoritus uudelleenkäynnistyksen Dialogue: 0,0:38:50.58,0:38:53.91,Default,,0000,0000,0000,,jälkeen korvaamalla mielivaltainen SQLite-tietokanta. Dialogue: 0,0:38:53.91,0:39:01.16,Default,,0000,0000,0000,,Tämän saavuttamiseksi aion kohdistaa hyökkäyksen "AddressBook.sqlite" -nimiseen yhteystietokantaan. Dialogue: 0,0:39:01.16,0:39:05.51,Default,,0000,0000,0000,,Alkuperäisessä tietokannassa on kaksi taulua, Dialogue: 0,0:39:05.51,0:39:09.05,Default,,0000,0000,0000,,joilla ei ole merkittävää merkitystä, vaan ne ovat esimerkkejä. Dialogue: 0,0:39:09.05,0:39:16.83,Default,,0000,0000,0000,,Aion luoda haitallisen yhteystietokannan, ja aloitan kahdella haitallisella DDL-lausekkeella, Dialogue: 0,0:39:16.83,0:39:19.23,Default,,0000,0000,0000,,jotka ovat teille jo tuttuja. Dialogue: 0,0:39:19.23,0:39:24.70,Default,,0000,0000,0000,,Ensin korvaamme oletustokenizerin "simple" joukolla "A":ita. Dialogue: 0,0:39:24.82,0:39:31.12,Default,,0000,0000,0000,,Sitten toinen DDL-lauseke toteuttaa tämän haitallisen laukaisimen, Dialogue: 0,0:39:31.12,0:39:35.39,Default,,0000,0000,0000,,joten se kaataa ohjelman, koska joka kerta, kun luodaan virtuaalitaulumoduuli, Dialogue: 0,0:39:35.39,0:39:39.34,Default,,0000,0000,0000,,joku yrittää mennä tokenizerin rakentajan luokse. Dialogue: 0,0:39:39.34,0:39:41.09,Default,,0000,0000,0000,,Joten se kaatuu. Dialogue: 0,0:39:41.09,0:39:46.58,Default,,0000,0000,0000,,Seuraavaksi käyn läpi jokaisen alkuperäisen taulun Dialogue: 0,0:39:46.58,0:39:50.46,Default,,0000,0000,0000,,ja kirjoitan ne uudelleen käyttäen kyselykaappauksen tekniikkaa. Dialogue: 0,0:39:50.46,0:39:53.89,Default,,0000,0000,0000,,Sen sijaan että käytämme odotettuja sarakkeita, Dialogue: 0,0:39:53.89,0:39:58.90,Default,,0000,0000,0000,,ohjaamme suorituksen ylikirjoituslauseeseen ja kaatumislauseeseen. Dialogue: 0,0:39:58.90,0:40:01.74,Default,,0000,0000,0000,,Teimme sen yhdelle taululle, teemme sen myös muille. Dialogue: 0,0:40:02.50,0:40:06.22,Default,,0000,0000,0000,,Nyt käynnistämme uudelleen ja voilà, Dialogue: 0,0:40:06.22,0:40:09.82,Default,,0000,0000,0000,,saamme seuraavan CVE:n ja turvallinen käynnistys ohitettiin. Dialogue: 0,0:40:09.82,0:40:12.17,Default,,0000,0000,0000,,Ja jos kiinnität huomiota tarkasti, tämä on todella hienoa, Dialogue: 0,0:40:12.17,0:40:18.09,Default,,0000,0000,0000,,koska näemme että kaatuminen tapahtui osoitteessa 0x414141...49. Dialogue: 0,0:40:18.09,0:40:24.14,Default,,0000,0000,0000,,Tämä on juuri mitä odotimme tapahtuvan, koska tässä pitäisi olla konstruktorimme, Dialogue: 0,0:40:24.14,0:40:28.30,Default,,0000,0000,0000,,kahdeksan tavua version ensimmäisen kokonaisluvun jälkeen. Dialogue: 0,0:40:29.06,0:40:32.20,Default,,0000,0000,0000,,Mutta todellisuudessa tässä on enemmän. Saamme pienen bonuksen tässä. Dialogue: 0,0:40:32.20,0:40:37.75,Default,,0000,0000,0000,,Koska yhteystietokanta on itse asiassa käytössä monien eri prosessien kautta. Dialogue: 0,0:40:37.75,0:40:44.72,Default,,0000,0000,0000,,Joten Yhteystiedot, FaceTime, Springboard, WhatsApp, Telegram, XPCProxy ja monet muut. Dialogue: 0,0:40:44.72,0:40:48.22,Default,,0000,0000,0000,,Ja monilla näistä prosesseista on enemmän oikeuksia kuin toisilla. Dialogue: 0,0:40:48.22,0:40:52.74,Default,,0000,0000,0000,,Ja olemme osoittaneet, että voimme nyt suorittaa koodia prosessissa, Dialogue: 0,0:40:52.74,0:40:54.96,Default,,0000,0000,0000,,joka kysyy ilkeämielistä tietokantaamme. Dialogue: 0,0:40:54.96,0:40:58.62,Default,,0000,0000,0000,,Joten saimme myös oikeuksen kohottamisen tässä prosessissa. Dialogue: 0,0:40:58.62,0:41:03.23,Default,,0000,0000,0000,,Tämä on todella hienoa. Ja yhteystietokannassa ei ole mitään erityistä. Dialogue: 0,0:41:03.23,0:41:05.84,Default,,0000,0000,0000,,Itse asiassa mitä tahansa jaettua tietokantaa voidaan käyttää. Dialogue: 0,0:41:05.84,0:41:08.93,Default,,0000,0000,0000,,Tarvitsemme vain jotain, joka on kirjoitettavissa heikolla käyttäjällä Dialogue: 0,0:41:08.93,0:41:15.57,Default,,0000,0000,0000,,ja jota vahvempi käyttäjä sitten kysyy. Ja ilmeisesti kaikki nämä tekniikat Dialogue: 0,0:41:15.57,0:41:18.56,Default,,0000,0000,0000,,ja virheet ilmoitettiin Applelle, ja ne kaikki on korjattu. Dialogue: 0,0:41:18.56,0:41:21.83,Default,,0000,0000,0000,,Ja tässä ovat CVE:t, jos haluat lukea siitä myöhemmin. Dialogue: 0,0:41:22.10,0:41:27.42,Default,,0000,0000,0000,,Nyt, ynnätäkseni asioita, jos haluat oppia jotain tästä esityksestä, Dialogue: 0,0:41:27.42,0:41:33.37,Default,,0000,0000,0000,,en halua sen olevan hullua SQL-voimistelua tai joukko CVE-numeroita. Dialogue: 0,0:41:33.37,0:41:35.06,Default,,0000,0000,0000,,Haluan sen olevan seuraavaa. Dialogue: 0,0:41:35.06,0:41:40.36,Default,,0000,0000,0000,,Tietokannan kysely ei välttämättä ole turvallista, oli kyse sitten käynnistyksen yli, Dialogue: 0,0:41:40.36,0:41:43.18,Default,,0000,0000,0000,,käyttäjien välillä tai prosessien välillä, Dialogue: 0,0:41:43.18,0:41:47.62,Default,,0000,0000,0000,,tietokannan kysely ei välttämättä ole turvallista kyselyn kaappauksen vuoksi. Dialogue: 0,0:41:47.62,0:41:51.31,Default,,0000,0000,0000,,Ja nyt, kun on kyse kyselyjen kaappauksesta ja kyselykeskeisestä ohjelmoinnista, Dialogue: 0,0:41:51.31,0:41:57.48,Default,,0000,0000,0000,,nämä muistin korruptiot, joita voimme laukaista, voidaan todella hyödyntää luotettavasti pelkällä SQL:llä. Dialogue: 0,0:41:57.48,0:42:00.76,Default,,0000,0000,0000,,Emme tarvitse enää JavaScriptiä. Emme tarvitse WebSQL:ää. Dialogue: 0,0:42:00.76,0:42:04.83,Default,,0000,0000,0000,,Ja uskomme todella, että tämä on vain jäävuoren huippu. Dialogue: 0,0:42:04.83,0:42:07.37,Default,,0000,0000,0000,,Tähän mennessä SQLite on ollut erittäin suosittu, Dialogue: 0,0:42:07.37,0:42:12.84,Default,,0000,0000,0000,,mutta sitä on arvioitu vain WebSQL:n kapealta alueelta, Dialogue: 0,0:42:12.84,0:42:19.32,Default,,0000,0000,0000,,ja vaikka selaimen pwnaus on jännittävää, SQLite:lla on paljon enemmän potentiaalia. Dialogue: 0,0:42:19.32,0:42:24.35,Default,,0000,0000,0000,,Meillä on siis joitain ajatuksia mahdollisesta tulevasta työstä tämän kanssa. Dialogue: 0,0:42:24.72,0:42:31.07,Default,,0000,0000,0000,,Ilmeisesti todella hienoa olisi laajentaa primitiivejämme joitain vahvempia primitiivejä kohti, oikein. Dialogue: 0,0:42:31.07,0:42:35.61,Default,,0000,0000,0000,,Haluamme saada asioita, kuten absoluuttinen luku- ja kirjoituskyky. Dialogue: 0,0:42:35.61,0:42:40.85,Default,,0000,0000,0000,,Ja minun hatara POC-hyökkäykseni oli melko typerä, Dialogue: 0,0:42:40.85,0:42:44.37,Default,,0000,0000,0000,,koska siinä oli paljon vakioita, kuten olette nähneet, Dialogue: 0,0:42:44.37,0:42:49.03,Default,,0000,0000,0000,,mutta itse asiassa jos käytät SQLite:n sisäistä toimintoa, Dialogue: 0,0:42:49.03,0:42:52.97,Default,,0000,0000,0000,,jos hyökkäyksen aikana käytät funktiota kuten sqlite3_version(), Dialogue: 0,0:42:52.97,0:42:57.32,Default,,0000,0000,0000,,voit kysyä tulkilta, mikä versio sinulla on, millä käännösvalinnoilla se on käännetty, Dialogue: 0,0:42:57.32,0:43:00.82,Default,,0000,0000,0000,,voit dynaamisesti rakentaa näitä QOP-ketjuja Dialogue: 0,0:43:00.82,0:43:06.59,Default,,0000,0000,0000,,ja kohdistaa ne tiettyyn kohdeympäristöön, jota hyökkäät. Dialogue: 0,0:43:06.59,0:43:09.79,Default,,0000,0000,0000,,Itse asiassa hyödyntämällä sitä tosiasiaa, että hyökkäyksemme on tietokanta, Dialogue: 0,0:43:09.79,0:43:14.14,Default,,0000,0000,0000,,voimme luoda tämän todella coolin hyökkäyspolyglotin, ja ajattelemme, Dialogue: 0,0:43:14.14,0:43:18.90,Default,,0000,0000,0000,,että näitä tekniikoita voidaan käyttää oikeuksien kohottamiseen monissa tilanteissa, Dialogue: 0,0:43:18.90,0:43:22.40,Default,,0000,0000,0000,,koska kehittäjät eivät koskaan ajatelleet, Dialogue: 0,0:43:22.40,0:43:27.53,Default,,0000,0000,0000,,että nyt voimme ottaa minkä tahansa tietokannan, jota heikko käyttäjä voi kirjoittaa, Dialogue: 0,0:43:27.53,0:43:32.91,Default,,0000,0000,0000,,ja jota vahva käyttäjä voi kysyä, ja yhtäkkiä voimme yrittää kohottaa oikeuksiamme. Dialogue: 0,0:43:33.24,0:43:38.86,Default,,0000,0000,0000,,Toisaalta olisi todella mielenkiintoista huomata, että monet niistä primitiiveistä, Dialogue: 0,0:43:38.86,0:43:42.19,Default,,0000,0000,0000,,joita olen teille näyttänyt, eivät ole yksinomaan SQLite:n omaisuutta, eikö niin? Dialogue: 0,0:43:42.19,0:43:45.84,Default,,0000,0000,0000,,Osoitinpakkaus ja -purku sekä heap spraying Dialogue: 0,0:43:45.84,0:43:48.80,Default,,0000,0000,0000,,ja kaikki nämä asiat eivät ole yksinomaan SQLite:n omaisuutta. Dialogue: 0,0:43:48.80,0:43:51.94,Default,,0000,0000,0000,,Olisi todella mielenkiintoista ottaa nämä primitiivit ja nähdä, Dialogue: 0,0:43:51.94,0:43:58.94,Default,,0000,0000,0000,,voimmeko mennä eteenpäin ja hyödyntää muita muistin korruption bugia eri tietokanta-moottoreissa. Dialogue: 0,0:44:00.11,0:44:01.42,Default,,0000,0000,0000,,Kiitos paljon. Dialogue: 0,0:44:02.25,0:44:08.86,Default,,0000,0000,0000,,[Yleisö taputtaa] Dialogue: 0,0:44:09.77,0:44:11.97,Default,,0000,0000,0000,,Omer Gull, kiitos paljon. Dialogue: 0,0:44:11.97,0:44:14.42,Default,,0000,0000,0000,,Siinä oli paljon aikaa kysymyksille. Dialogue: 0,0:44:14.42,0:44:17.30,Default,,0000,0000,0000,,Meillä on kolme mikrofonia täällä salissa: Dialogue: 0,0:44:17.30,0:44:19.46,Default,,0000,0000,0000,,Numero yksi, Numero kaksi ja Numero kolme. Dialogue: 0,0:44:19.46,0:44:22.15,Default,,0000,0000,0000,,Jos sinulla on kysymyksiä, ole hyvä ja jonota. Dialogue: 0,0:44:22.15,0:44:24.77,Default,,0000,0000,0000,,Onko meillä joitakin kysymyksiä verkosta? Dialogue: 0,0:44:28.22,0:44:29.56,Default,,0000,0000,0000,,Ei ole. Ookei. Dialogue: 0,0:44:29.56,0:44:32.02,Default,,0000,0000,0000,,Aloittakaamme sitten mikrofonista numero kaksi. Dialogue: 0,0:44:32.02,0:44:39.44,Default,,0000,0000,0000,,Joo. Kysymys koskee sitä "CREATE-jotakin" kaappaamista. Dialogue: 0,0:44:39.44,0:44:44.15,Default,,0000,0000,0000,,Mainitsit, että alussa tutkimus oletti, Dialogue: 0,0:44:44.15,0:44:49.66,Default,,0000,0000,0000,,että CREATE oli ensimmäinen tarkistusjärjestys Dialogue: 0,0:44:49.66,0:44:55.47,Default,,0000,0000,0000,,ja sitten välilyönti CREATE-sanalla ja sen jälkeen se voisi luoda kaikki muut asiat. Dialogue: 0,0:44:55.47,0:44:59.69,Default,,0000,0000,0000,,Nyt kysymykseni on: Jos se muuttui raporttisi jälkeen, Dialogue: 0,0:44:59.69,0:45:08.23,Default,,0000,0000,0000,,koska tämä vaikuttaa tavalta altistaa suurempi hyökkäyspinta kuin useimmat muut bugit. Dialogue: 0,0:45:08.23,0:45:09.78,Default,,0000,0000,0000,,Joten haluaisin tietää, jos he muuttivat sitä. Dialogue: 0,0:45:09.78,0:45:14.10,Default,,0000,0000,0000,,Ja mitä oli lopulta se lieventäminen, jos sitä oli? Dialogue: 0,0:45:14.10,0:45:19.08,Default,,0000,0000,0000,,Joo. Niin, meidän escalate-henkilöt ovat enemmän huolissaan tiettyjen virheiden Dialogue: 0,0:45:19.08,0:45:21.46,Default,,0000,0000,0000,,kuin hyökkäystekniikoiden suhteen. Dialogue: 0,0:45:21.46,0:45:23.98,Default,,0000,0000,0000,,Tämä on todella surullista, koska tiedämme kaikki, Dialogue: 0,0:45:23.98,0:45:26.69,Default,,0000,0000,0000,,että virheet voidaan korjata, mutta hyökkäystekniikat jäävät käyttöön. Dialogue: 0,0:45:26.69,0:45:29.47,Default,,0000,0000,0000,,Joten ei, he eivät muuttaneet tätä tarkistusta. Dialogue: 0,0:45:29.47,0:45:36.74,Default,,0000,0000,0000,,Itse asiassa tämä "create "-validoinnin lisäys tehtiin vasta äskettäin. Dialogue: 0,0:45:36.74,0:45:40.04,Default,,0000,0000,0000,,Sitä ennen pystyit käyttämään mitä tahansa DDL-lauseketta haluat. Dialogue: 0,0:45:40.04,0:45:42.92,Default,,0000,0000,0000,,Joten tilanne ei ole todella hyvä siellä. Dialogue: 0,0:45:42.92,0:45:45.17,Default,,0000,0000,0000,,Hyvä heille ja onnea tulevaisuudelle. Dialogue: 0,0:45:45.79,0:45:46.74,Default,,0000,0000,0000,,Ja siinä oli kysymys. Dialogue: 0,0:45:48.03,0:45:50.67,Default,,0000,0000,0000,,Okei. Sitten siirrymme mikrofoni ykköseen, kiitos. Dialogue: 0,0:45:50.67,0:45:56.20,Default,,0000,0000,0000,,Oletko ehkä vahingossa hyökännyt palvelimelle, jota käytetään salasanan varastamiseen? Dialogue: 0,0:45:56.20,0:45:58.14,Default,,0000,0000,0000,,Ei, tietenkään en tekisi niin. Dialogue: 0,0:45:58.14,0:46:00.17,Default,,0000,0000,0000,,En hyökkäisi kenenkään kimppuun. Dialogue: 0,0:46:00.17,0:46:03.97,Default,,0000,0000,0000,,Tämä on vain meidän laboratoriossamme POC:na. Okei. Dialogue: 0,0:46:03.97,0:46:04.96,Default,,0000,0000,0000,,Kiitos. Dialogue: 0,0:46:04.96,0:46:08.00,Default,,0000,0000,0000,,Salasanasi ovat turvassa varkailta. Dialogue: 0,0:46:08.07,0:46:10.15,Default,,0000,0000,0000,,[Naurua] . Noniin Dialogue: 0,0:46:10.15,0:46:10.97,Default,,0000,0000,0000,,Kukaan ei enää jonota. Dialogue: 0,0:46:10.97,0:46:14.89,Default,,0000,0000,0000,,Onko meillä kysymyksiä verkosta? Ei mitään siellä. Dialogue: 0,0:46:14.89,0:46:15.62,Default,,0000,0000,0000,,No, tästä lähdetään. Dialogue: 0,0:46:15.62,0:46:16.12,Default,,0000,0000,0000,,Kiitos. Dialogue: 0,0:46:16.12,0:46:17.23,Default,,0000,0000,0000,,Omer Gull, kiitos paljon. Dialogue: 0,0:46:17.23,0:46:19.84,Default,,0000,0000,0000,,[Yleisö taputtaa] Dialogue: 0,0:46:22.24,0:46:31.64,Default,,0000,0000,0000,,[Translated by Jouko Voutilainen (KYBS2001 course assignment at JYU.FI)]