CTF-web Xman-2018 第四天 WEB 初講
web作為CTF中的一類大題目,涉及的面非常廣,前面具體也說過一些類別的題目。
https://blog.csdn.net/iamsongyu/article/details/82968532
- l給定一個web網站
- l根據題目所給提示資訊,找到網站上的flag字串
- l做題方式類似於真實滲透,可能涉及資訊收集、各類漏洞發現與利用、許可權提升等等
- l為了獲取flag,可能需要拿到管理員許可權,資料庫許可權,甚至獲取網站所在伺服器的許可權
涉及的知識也多種多樣
- l語言:PHP、Python、Javascript ……
- l資料庫:MySQL、MSSQL ……
- l伺服器:Apache、Nginx、Tomcat ……
- lWeb框架:THINKPHP、Flask、Django、Spring ……
- l語言特性(弱型別、截斷…)
- l函式特性( is_numeric 、 strcmp、eregi…)
常用的http抓包改包需要知道的知識有
- HTTP請求、響應流程
- 瀏覽器外掛(FireFox):Firebug、Tamper Data、Hackbar
- 工具:Burpsuite、Fiddler
http響應流程在http協議中已經講過了
背景 https://blog.csdn.net/iamsongyu/article/details/82774906
詳解 https://blog.csdn.net/iamsongyu/article/details/82797208
關鍵技術 https://blog.csdn.net/iamsongyu/article/details/82797330
Burpsuit是經常使用的工具 使用方法前面也說過
https://blog.csdn.net/iamsongyu/article/details/82989478
web前端
- Html、CSS、Javascript:MDN文件
- 編碼: url編碼,html實體編碼,js編碼
- Cookie,快取
- 跨域問題,
web後端
- PHP: 官方文件
- Python: 廖雪峰Python教程(www.liaoxuefeng.com),官方文件
- Python框架:Flask,Tornado,Django
- PHP框架: Laravel,Yii,ThinkPHP
- Go框架: beego
- Session
資料庫和伺服器
- 瞭解常見資料庫及區別:MySQL、PostgreSQL、Oracle、Sqlite、MongoDB
- 資料庫操作:基本語句,檔案讀取,寫入,許可權,dnslog
- 伺服器:配置主流伺服器:Apache、Nginx
- 快取引擎:Redis、Memcached
常見web漏洞
我們也在ctf - web簡介裡說過,這裡就貼上過來
- 網頁原始碼審計
- 檢視或者修改http請求頭
- 302跳轉資訊
- 檢視開發者工具控制檯
- Js程式碼檢視和加密解密
- Burp suite使用
- Robots.txt
- Aps,php程式碼審計
- Sql注入
- 簡單指令碼使用
- 後臺登入
- 程式碼逆向
- 上傳繞過
- Hash函式
- 備份檔案
- 驗證碼
- Cookies
- MD5碰撞
- 沙箱逃逸
- 原始碼洩露
- 反序列化
- XXE實體漏洞
關於練習平臺什麼的就看看這裡吧 https://blog.csdn.net/iamsongyu/article/details/82968532
入門題目:
- 檢視頁面原始碼,flag在註釋裡
- 檢視HTTP請求/響應包,flag在cookie、響應頭中
- Robots.txt 爬蟲協議
- 備份檔案(.bak,.swp,.swo)洩露
- 根據提示修改請求頭(User-Agent、X-Forwarded-For)
- JSFuck
詳細的有關請看我前面發的一些博文
//接下來要發一些當日學習的知識點 習慣使用//註釋了.....老毛病
xxe實體漏洞
要了解xxe漏洞,那麼一定得先明白基礎知識,瞭解xml文件的基礎組成。
XML用於標記電子檔案使其具有結構性的標記語言,可以用來標記資料、定義資料型別,是一種允許使用者對自己的標記語言進行定義的語言。XML文件結構包括XML宣告、DTD文件型別定義(可選)、文件元素
1,內部實體宣告:<!ENTITY 實體名稱 "實體的值"> ex:<!ENTITY eviltest "eviltest">
完整例項:
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
]>
<test>&writer;©right;</test>
2,外部實體宣告:<!ENTITY 實體名稱 SYSTEM "URI">
完整例項:
<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
]>
<author>&writer;©right;</author>
大概的意思就是根據文件的格式寫命令,然後再執行。
XXE的攻擊與危害(XML External Entity)
1,何為XXE?
答: xxe也就是xml外部實體注入。也就是上文中加粗的那一部分。
2,怎樣構建外部實體注入?
方式一:直接通過DTD外部實體宣告
XML內容
方式二:通過DTD文件引入外部DTD文件,再引入外部實體宣告
XML內容:
DTD檔案內容:
方式三:通過DTD外部實體宣告引入外部實體宣告
好像有點拗口,其實意思就是先寫一個外部實體宣告,然後引用的是在攻擊者伺服器上面的外部實體宣告
具體看例子,XML內容
dtd檔案內容:
3,支援的協議有哪些?
不同程式支援的協議如下圖:
SSRF漏洞是如何產生的?
SSRF(Server-Side Request Forgery:伺服器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,
SSRF攻擊的目標是從外網無法訪問的內部系統。(正是因為它是由服務端發起的,所以它能夠請求到與它相連而與外網隔離的內部系統
)SSRF 形成的原因大都是由於服務端提供了從其他伺服器應用獲取資料的功能且沒有對目標地址做過濾與限制。比如從指定URL地址獲
取網頁文字內容,載入指定地址的圖片,下載等等。
可能上面的語言對於一些小白白來說難以理解,下面是一些我的理解:
html,php,asp,jsp 具有這些檔案字尾的檔案通常儲存在web伺服器(網站伺服器)中,而且web伺服器都具有獨立ip
網站訪問大致步驟:
使用者在位址列輸入網址 --》 向目標網站傳送請求 --》 目標網站接受請求並在伺服器端驗證請求是否合法,然後返回使用者所需要的
頁面 --》使用者接收頁面並在瀏覽器中顯示
【此處的請求預設為www.xxx.com/a.php?image=(地址)】
那麼產生SSRF漏洞的環節在哪裡呢?目標網站接受請求後在伺服器端驗證請求是否合法
產生的原因:伺服器端的驗證並沒有對其請求獲取圖片的引數(image=)做出嚴格的過濾以及限制,導致可以從其他伺服器的獲取一定
量的資料,例如:
www.xxx.com/a.php?image=http://www.abc.com/1.jpg
<段落>如果我們將http://www.abc.com/1.jpg換為與該伺服器相連的內網伺服器地址會產生什麼效果呢?如果存在該內網地址就會返回1xx 2xx
之類的狀態碼,不存在就會其他的狀態碼
終極簡析: SSRF漏洞就是通過篡改獲取資源的請求傳送給伺服器,但是伺服器並沒有發現在這個請求是合法的,然後伺服器以他的身份
來訪問其他伺服器的資源。
PHP序列化
方便物件的儲存和傳輸
把複雜的資料型別壓縮到一個字串中
serialize() 把變數和它們的值編碼成文字形式
unserialize() 恢復原先變數
$a =array('time'=>'fdsg','user' => 5,'pass'=>false);
$c = serialize($a);
print($c);
?>
a:3:{s:4:"time";s:4:"fdsg";s:4:"user";i:5;s:4:"pass";b:0;}
a 代表陣列 3代表個數
s表示字串 4個字元 變數名 四個字串的數值
i表示數字 b代表布林
下面的這個例子引用 https://www.cnblogs.com/yuxb/p/6792413.html
1.建立一個$arr陣列用於儲存使用者基本資訊,並在瀏覽器中輸出檢視結果;
$arr=array();
$arr['name']='張三';
$arr['age']='22';
$arr['sex']='男';
$arr['phone']='123456789';
$arr['address']='上海市浦東新區';
var_dump($arr);
輸出結果:
array(5) {
["name"]=> string(6) "張三"
["age"]=> string(2) "22"
["sex"]=> string(3) "男"
["phone"]=> string(9) "123456789"
["address"]=> string(21) "上海市浦東新區"
}
2.將$arr陣列進行序列化賦值給$info字串,並在瀏覽器中輸出檢視結果;
$info=serialize($arr);
var_dump($info);
輸出結果:
string(140) "a:5:{s:4:"name";s:6:"張三";s:3:"age";s:2:"22";s:3:"sex";s:3:"男";s:5:"phone";s:9:"123456789";s:7:"address";s:21:"上海市浦東新區";}"