什么是二次注入?
惡意數(shù)據(jù)插入到數(shù)據(jù)庫時被處理的數(shù)據(jù)又被還原并存儲在數(shù)據(jù)庫中,當(dāng)Web程序調(diào)用存儲在數(shù)據(jù)庫中的惡意數(shù)據(jù)并執(zhí)行SQL查詢時,就發(fā)生了SQL二次注入。

本課二次注入思路
- 使用注冊頁面注冊新用戶:往數(shù)據(jù)庫存儲惡意用戶名;
- 再次訪問數(shù)據(jù)庫數(shù)據(jù),并利用第一次的惡意用戶數(shù)據(jù)實現(xiàn)SQL注入;
這就是二次注入(不是注入兩次),下面為你將演示在不知道對方密碼的情況下實現(xiàn)sql注入惡意更改用戶的密碼!

二次注入實戰(zhàn)
首先我們得有一個用于Web滲透的SQL測試頁面地址,這里我們以SQLlib進(jìn)行測試,關(guān)注@小白嘿客,前往下方《從新手到Web白帽黑客》視頻課程獲取完整學(xué)習(xí)!

專欄
u4eceu65b0u624bu5230Webu767du5e3du9ed1u5ba2
作者:u5c0fu767du563fu5ba2
109幣
29人已購
查看
注冊用戶的地址是:
192.168.31.16/sql/Less-24/index.php
這里我們需要自己再創(chuàng)建一個用戶密碼修改php文件,用于直接訪問數(shù)據(jù)庫并修改用戶密碼的2.php;加入上方web專欄即可前往專欄資料庫下載對應(yīng)的2.php文件,然后放到win7靶機(jī)的下面路徑位置!

代碼如下:

大概的意思就是:接收用戶的三個參數(shù)輸入(要改密碼的用戶名,新密碼,原始密碼),這是一個只能修改已知用戶名和已知密碼的php文件。但是下面我們可以利用第一次注冊的惡意用戶名來躲避這個php文件沒有過濾單引號導(dǎo)的機(jī)制來實現(xiàn)sql二次注入!
火狐訪問:
192.168.31.16/sql/Less-24/index.php
然后點擊右下角注冊新用戶!

這里我們注冊一個正常的用戶,假設(shè)這個用戶是別人的,我們不知道密碼!
用戶名:yang
密碼:111111
再次使用注冊頁面,注冊一個新的用戶:
用戶名:yang' -- -
密碼:222222
有空格,--代表注釋后面,但是為了看得清楚,又使用一個空格和-,但是這個空格和-本身包括后面所有的語句都會被前面的--給注釋掉!

此時前往win7靶機(jī)的phpmyadmin查看下:
已經(jīng)注冊在數(shù)據(jù)庫里了!

既然注冊,我們來訪問2.php,修改yang' -- -這個惡意用戶的密碼,然后你就會發(fā)現(xiàn)我們要修改yang' -- -這個用戶名的密碼,沒想到卻將yang用戶名的密碼給修改了!
這樣我們就能在不知道yang的密碼下,就能登錄yang用戶了,從而造成數(shù)據(jù)泄露!
訪問2.php需要指定用戶名,新密碼,舊密碼!
火狐瀏覽:
192.168.31.16/sql/Less-24/2.php?username=yang' -- -&newpass=999999&cpass=222222
意思是:將已知用戶名yang' -- -的原始密碼222222改成新密碼999999!真的會如愿以償嗎?
肯定不會的,先看下圖:

你會發(fā)現(xiàn):被執(zhí)行sql更新密碼的語句時,先要找到用戶名'yang'-- -',但是由于用戶名是惡意的yang'-- -,sql語句本身的前后單引號會形成前面'yang'的閉合!后面的都被-- -注釋掉了!這樣明擺著就是修改yang這個不是我們自己的用戶密碼了,現(xiàn)在你得到的用戶名是yang,密碼是999999,登陸肯定也是yang的所有資料!但自己創(chuàng)建的yang'-- -密碼依然沒有被修改,真是隔山打牛啊!
我們執(zhí)行看看,顯示成功!

不信?我們?nèi)?shù)據(jù)庫看看有沒有修改成功!
發(fā)現(xiàn)yang的密碼無形被我們修改成功999999了。

那我們來登錄下yang的用戶,登錄成功!當(dāng)然自己的yang'-- -還是能用原來的密碼登陸的。

總結(jié):二次注入重點是,第一次需要往數(shù)據(jù)庫存入數(shù)據(jù),這一步不是注入!但是存入的數(shù)據(jù)是惡意的。第二次我們來提取數(shù)據(jù),比如我們修改這個惡意用戶名,導(dǎo)致將他人的用戶名密碼修改了,這就是二次注入的一種實現(xiàn)方式!