Discuz 7.2 faq.php -heikkousanalyysi

Discuz 7 2 Faq Php Vulnerability Analysis



Haavoittuvuus esiintyy sivulla faq.php, lähdekoodi on seuraava:

kuva
 elseif($action == 'grouppermission') {ksort($gids) $groupids = array() foreach($gids as $row) { $groupids[] = $row[0] } $query = $db->query('SELECT * FROM {$tablepre}usergroups u LEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid WHERE u.groupid IN ('.implodeids($groupids).')')
kuva

Tämän kohdan tarkoitus on ensin suorittaa nouseva operaatio taulukossa $ gids avainsanojensa mukaan ja ottaa sitten muuttujaryhmän kunkin avainsanan ensimmäinen arvo $ gids $ -rivi [0] on tallennettu $ groupids-taulukkoon, ja sitten muodostetaan merkkijono käyttämällä implodeids () -funktiota ja tuodaan SQL-kyselylausekkeeseen.



Täällä, kun syötämme parametrin $ gids, poistumistoiminto suoritetaan oletusarvoisesti, ts. Jos syötämme yhden lainauksen ', lopulliset tallennetut tiedot ovat ', mutta ne ovat aina vain taulukon ensimmäinen arvo on otettu pois, eli $ row [0] = '' tällä hetkellä. Tällä hetkellä otetaan pois ja sijoitetaan $ groupids-taulukoon.



Olettaen, että $ gids-taulukon arvo yhden lainausmerkin syöttämisen jälkeen on {'1', '' ',' 3 ',' 4 '}, otamme sitten ensimmäisen arvon ja asetamme $ groupids-taulukkoon, tällä hetkellä $ groupids = {'1', '', '3', '4'}.



Sitten alamme tarkastella implodeids () -funktiota global.fanc.php-tiedostossa

kuva
function implodeids($array) { if(!empty($array)) { return '''.implode('','', is_array($array) ? $array : array($array)).''' } else { return '' } }
kuva

on yhdistää matriisin eri taulukot käyttämällä ','.

Sitten $ groupidsista tulee '1', '', '3', '4' tämän toiminnon läpäisyn jälkeen



Tällä hetkellä on ongelma, koska neljäs yksittäinen lainausmerkki pakotetaan väkisin yhtenä lainausmerkkinä vasemman oikean kauttaviivan olemassaolon vuoksi eikä sitä suljeta kolmannella lainausmerkillä. Tällä hetkellä kolmas yksittäinen lainausmerkki suljetaan viidennellä lainausmerkillä, ja paikassa 3 on paeta. Tällä hetkellä rakennetaan sijainti 3 hyötykuormana voi muodostaa injektion. Kirjoita oikea sulu 3 paikkaan sulkeaksesi sen ja lisää sitten uusi kyselylauseke.

Tällä hetkellä hyötykuorma voidaan kirjoittaa seuraavasti:

http://127.0.0.1/dz/faq.php?action=grouppermission&gids[80]='&gids[81][0]=) ja updatexml (1, concat (0x7e, (valitse @@ versio)), 1) % 23

http://127.0.0.1/dz/faq.php?action=grouppermission&gids[80]='&gids[81,7 [] osoitteesta ucenter.uc_members)), 1)% 23