Sqli-labs之Less:42-45

                                              Less-42

基於存儲_POST_單引號_字符型_堆疊注入

這一關看起來和Less-24是一樣的界面,實際上是不同的,我們點擊 New User click here?可以看到如下

翻譯:你需要創建帳戶然後侵入

通過這一關我們瞭解到了,我們無法進行註冊忘記密碼的操作。

我們在Less-24做這種界面的關卡的時候是二次注入,通過越權修改別人的密碼,我們這裏還是一樣,只是改爲使用堆疊注入。還要注意的一點是,這裏的數據是Post數據,所以我們的註釋符需要使用#,而不是--+。

分析源代碼:

主要分析login.php

嗯,竟然輸出報錯信息,那妥妥的報錯注入也可以,但這不是我們這一關想要表達的注入:

這裏我們試一下報錯注入:

-1' union select 1,database(),3#

當然我們看到有個update_password 是否可以像less-24那樣實現越權修改別人的密碼,當然是不可以的,上源碼

看到沒有都進行過濾了。

Update 更新數據後,經過 mysql_real_escape_string()處理後的數據,存入到數據庫當中後不會發生變化。在 select 調用的時候才能發揮作用。所以不用考慮在更新密碼處進行注入,這關和二次注入的思路是不一樣的。

最重要的是二次注入是需要把註釋符保存到數據表中,雖然堆疊注入能插入用戶名和密碼,但是註釋符的是沒辦法進行保存的,會註釋掉後面的語句導致該語句不完整而出錯。

開始我們的注入:

這裏網上的大部分包括《注入天書》只寫瞭如何創建與刪除一個表,只能說存在堆疊注入,然而好像沒什麼用處。
這裏仍像 Less 38 - Less 41 一樣,創建新的用戶信息(即插入數據 / 註冊)。
因有 MySQL 報錯信息,可以看出是單引號閉合。

1';insert into users(id,username,password) values(42,'Less42','Less42')#

可以簡寫:1';insert into users values(42,'Less42','Less42')#

返回這個頁面不用管它:

直接查看數據表:

OK,成功創建了我們的用戶

當然使用:

1';update users set password='hello' where username='Dumb' #

作爲登錄密碼,修改Dumb密碼。

順便說一下我爲什麼不修改用戶Less-42的密碼是因爲,php的過濾函數會過濾掉字符 

還有一點需要注意的是,但對這一關而言,這條語句很重要,註釋掉這條語句,那麼你就得通過其他方法來判斷這一關是什麼類型的注入,然後需要得到users數據表,過程會比較繁瑣。最後才能進行堆疊注入。

----------------------------------------------------------------------

                                                        Less-43

基於存儲_POST_單引號_小括號_字符型_堆疊注入

本關與 42 關的原理基本一致,我們還是定位在 login.php 中的 password。看一下 sql 語句爲:

還有有 MySQL 報錯信息的代碼:


登錄:username:admin
Password:1');insert into users values(43,'Less43','Less43')#

可以看到添加了 less43 這一項數據:

-----------------------------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章