什么是二次注入?
惡意數據插入到數據庫時被處理的數據又被還原并存儲在數據庫中,當Web程序調用存儲在數據庫中的惡意數據并執行SQL查詢時,就發生了SQL二次注入。
本課二次注入思路
- 使用注冊頁面注冊新用戶:往數據庫存儲惡意用戶名;
- 再次訪問數據庫數據,并利用第一次的惡意用戶數據實現SQL注入;
這就是二次注入(不是注入兩次),下面為你將演示在不知道對方密碼的情況下實現sql注入惡意更改用戶的密碼!
二次注入實戰
首先我們得有一個用于Web滲透的SQL測試頁面地址,這里我們以SQLlib進行測試,關注@小白嘿客,前往下方《從新手到Web白帽黑客》視頻課程獲取完整學習!
專欄
u4eceu65b0u624bu5230Webu767du5e3du9ed1u5ba2
作者:u5c0fu767du563fu5ba2
109幣
29人已購
查看
注冊用戶的地址是:
192.168.31.16/sql/Less-24/index.php
這里我們需要自己再創建一個用戶密碼修改php文件,用于直接訪問數據庫并修改用戶密碼的2.php;加入上方web專欄即可前往專欄資料庫下載對應的2.php文件,然后放到win7靶機的下面路徑位置!
代碼如下:
大概的意思就是:接收用戶的三個參數輸入(要改密碼的用戶名,新密碼,原始密碼),這是一個只能修改已知用戶名和已知密碼的php文件。但是下面我們可以利用第一次注冊的惡意用戶名來躲避這個php文件沒有過濾單引號導的機制來實現sql二次注入!
火狐訪問:
192.168.31.16/sql/Less-24/index.php
然后點擊右下角注冊新用戶!
這里我們注冊一個正常的用戶,假設這個用戶是別人的,我們不知道密碼!
用戶名:yang
密碼:111111
再次使用注冊頁面,注冊一個新的用戶:
用戶名:yang' -- -
密碼:222222
有空格,--代表注釋后面,但是為了看得清楚,又使用一個空格和-,但是這個空格和-本身包括后面所有的語句都會被前面的--給注釋掉!
此時前往win7靶機的phpmyadmin查看下:
已經注冊在數據庫里了!
既然注冊,我們來訪問2.php,修改yang' -- -這個惡意用戶的密碼,然后你就會發現我們要修改yang' -- -這個用戶名的密碼,沒想到卻將yang用戶名的密碼給修改了!
這樣我們就能在不知道yang的密碼下,就能登錄yang用戶了,從而造成數據泄露!
訪問2.php需要指定用戶名,新密碼,舊密碼!
火狐瀏覽:
192.168.31.16/sql/Less-24/2.php?username=yang' -- -&newpass=999999&cpass=222222
意思是:將已知用戶名yang' -- -的原始密碼222222改成新密碼999999!真的會如愿以償嗎?
肯定不會的,先看下圖:
你會發現:被執行sql更新密碼的語句時,先要找到用戶名'yang'-- -',但是由于用戶名是惡意的yang'-- -,sql語句本身的前后單引號會形成前面'yang'的閉合!后面的都被-- -注釋掉了!這樣明擺著就是修改yang這個不是我們自己的用戶密碼了,現在你得到的用戶名是yang,密碼是999999,登陸肯定也是yang的所有資料!但自己創建的yang'-- -密碼依然沒有被修改,真是隔山打牛啊!
我們執行看看,顯示成功!
不信?我們去數據庫看看有沒有修改成功!
發現yang的密碼無形被我們修改成功999999了。
那我們來登錄下yang的用戶,登錄成功!當然自己的yang'-- -還是能用原來的密碼登陸的。
總結:二次注入重點是,第一次需要往數據庫存入數據,這一步不是注入!但是存入的數據是惡意的。第二次我們來提取數據,比如我們修改這個惡意用戶名,導致將他人的用戶名密碼修改了,這就是二次注入的一種實現方式!