常見的術(shù)語:
肉雞:被植入木馬的電腦或者是服務(wù)器等聯(lián)網(wǎng)設(shè)備。
軟件木馬:遠控軟件的被控端(exe文件)
腳本木馬:腳本語言編寫的被控端(asp沐飘、php...)
拿Webshell(有人也會說是:拿shell):拿到網(wǎng)站的最高權(quán)限足淆。
服務(wù)器:提供計算機服務(wù)的設(shè)備
{
物理服務(wù)器:實體的。
虛擬服務(wù)器:常見的,遠程連接的除呵。
}
后門:一棟房子有一扇大門跟一個洞。房子=服務(wù)器(個人電腦)爪喘、大IP=正常權(quán)限颜曾、洞=后門。
IP:代表計算機的一個網(wǎng)絡(luò)地址(例子:你在北京秉剑,這就是你的地址)
端口:設(shè)備與外界通訊交流的出門泛豪。(一棟大樓里面有幾個房間,房間有幾個門
大樓=IP侦鹏,房間的門=端口)
入侵:利用服務(wù)器方面漏洞的技術(shù)诡曙。
提權(quán):提升權(quán)限(拿到了Webshell-》通過Webshell提到服務(wù)器的權(quán)限,從腳本到服務(wù)器)
壓力測試(Ddos略水、CC攻擊):利用流量資源攻擊服務(wù)器价卤。
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1簽到題
查看源代碼就可以找到flag
2簽到2
查看源代碼讓我們輸入口令zhimakaimen11個字符,而maxlength=10聚请,通過burpsuite中的Reapeater對頁面數(shù)據(jù)進行修改發(fā)送荠雕。
maxlength 屬性規(guī)定輸入字段的最大長度稳其,以字符個數(shù)計。
maxlength 屬性與 <input type="text"> 或 <input type="password"> 配合使用炸卑。
這題不是WEB
打開有個貓的圖片既鞠,我直接用記事本打開搜索nctf,可以直接找到
丘比龍De女神
百度MD5:
“簡單地說來盖文,就是一種安全策略嘱蛋,在網(wǎng)絡(luò)上傳輸數(shù)據(jù)的時候,如果你是明文進行的話五续,那么容易受到截獲洒敏,所以這樣說來時很不安全的,所以引入了MD5機制疙驾,可以在傳輸數(shù)據(jù)的時候凶伙,將數(shù)據(jù)和密鑰進行hash生成一個MD5校驗值,附加在數(shù)據(jù)段的首部它碎,那么在對方收到數(shù)據(jù)是函荣,會將數(shù)據(jù)段重新用hash算法進行校驗,若兩個MD5的校驗值相同扳肛,那么表示數(shù)據(jù)在傳輸?shù)倪^程中沒有收到篡改傻挂!
34bc2f23725efa6128f2f3abc0368d92
AAencode
先百度AAencode:
什么是jjencode?
將JS代碼轉(zhuǎn)換成只有符號的字符串
什么是aaencode挖息?
將JS代碼轉(zhuǎn)換成常用的網(wǎng)絡(luò)表情金拒。
神器的JavaScript加密工具aaencode 把js轉(zhuǎn)為顏文字表情符號
aaencode 加密
aaencode 解密
把頁面代碼放到解密里面解密就可以找到flag
圖種
圖種是什么?通俗來講就是通過一些小技術(shù)將目標(biāo)文件隱藏于一張圖片里面套腹,表面上看起來是一張圖片绪抛,實際上里面含有其他文件。這種方式可以不受某些網(wǎng)站的限制沉迹,便于信息及文件的傳遞和共享睦疫。
最后一段文字是:都深深的出賣了我蛤育,首字母為dssdcmlw
nctf{dssdcmlw}
層層遞進
【304 Not Modified:客戶端有緩沖的文件并發(fā)出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務(wù)器告訴客戶葫松,原來緩沖的文檔還可以繼續(xù)使用瓦糕。
一般的大的站點的圖片服務(wù)器都有實現(xiàn)HTTP 304 緩存功能。
這個 304 狀態(tài)一般主要在用戶刷新頁面(F5鍵)的時候觸發(fā)腋么,當(dāng)用戶在刷新頁面的時候咕娄,因為原來的頁面里的很多圖片已經(jīng)緩存過,客戶端的瀏覽器已經(jīng)記錄了圖片的最后更新時間(Last Mod)珊擂,所以在用戶刷新頁面的時候圣勒,會向服務(wù)器提交一個字段:If-Modified-Since: Wed, 08 Sep 2010 21:35:06 GMT
這個時候费变,服務(wù)器端的程序先取得這個字段的值,然后與服務(wù)器上的圖片最后修改時間對比圣贸,如果相同挚歧,就直接返回 304 Not Modified ,然后停止吁峻。這樣就不用把圖片重新傳輸?shù)娇蛻舳嘶海_到節(jié)省帶寬的目的∮煤】
打開題目中的網(wǎng)址發(fā)現(xiàn)是一個網(wǎng)站的主頁矮慕,沒有其他的提示信息。
iframe 元素會創(chuàng)建包含另外一個文檔的內(nèi)聯(lián)框架(即行內(nèi)框架)啄骇。
iframe中的marginwidth定義 iframe 的左側(cè)和右側(cè)的邊距痴鳄。
marginheight定義 iframe 的頂部和底部的邊距。
scrolling會設(shè)置是否在在iframe中顯示滾動條缸夹。
border=0會去掉邊框夏跷。
你從哪里來
HTTP Referer是header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請求的時候明未,一般會帶上Referer,告訴服務(wù)器我是從哪個頁面鏈接過來的壹蔓,服務(wù)器基此可以獲得一些信息用于處理趟妥。
比如從我主頁上鏈接到一個朋友那里,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計出每天有多少用戶點擊我主頁上的鏈接訪問他的網(wǎng)站佣蓉。
單身一百年也沒用
當(dāng)我們直接點擊“到這里找KEY”然后再進行抓包時找不到異常披摄,
這時候可以在響應(yīng)頭中找到flag。
百度302錯誤代碼:302重定向又稱之為302代表暫時性轉(zhuǎn)移(Temporarily Moved )勇凭,英文名稱:302 redirect疚膊。 也被認(rèn)為是暫時重定向temporary redirect),一條對網(wǎng)站瀏覽器的指令來顯示瀏覽器被要求顯示的不同的URL虾标,當(dāng)一個網(wǎng)頁經(jīng)歷過短期的URL的變化時使用寓盗。一個暫時重定向是一種服務(wù)器端的重定向,能夠被搜索引擎蜘蛛正確地處理璧函。
easy傀蚌!
直接base64解碼
BASE64是一種編碼方式,通常用于把二進制數(shù)據(jù)編碼為可寫的字符形式的數(shù)據(jù)蘸吓。
這是一種可逆的編碼方式善炫。
編碼后的數(shù)據(jù)是一個字符串,其中包含的字符為:A-Z库继、a-z箩艺、0-9窜醉、+、/
共64個字符:26 + 26 + 10 + 1 + 1 = 64艺谆。
【注:其實是65個字符榨惰,“=”是填充字符】。
Keybord
題目的意思就是鍵盤擂涛,題目也提示看鍵盤看鍵盤读串,那肯定跟鍵盤有關(guān)系。
直接按照題目給出的字母在鍵盤上畫出來圖案就會發(fā)現(xiàn)對應(yīng)的字母撒妈。
nctf{areuhack}
n次base64
由題目以及提示說編碼次數(shù)有點多得知flag被base64加密了數(shù)次恢暖,于是我用在線base64解密工具多次解密就能得到flag:COOKIE
打開提示的網(wǎng)站后顯示please login first!
這個時候智能抓包,用Burpsuite抓包發(fā)現(xiàn)Cookie:login=0
文件包含
文件包含漏洞的利用
考察PHP封裝協(xié)議以及PHP文件包含杰捂。
在url中添加?file=php://filter/read=convert.base64-encode/resource=index.php,讀取到base64加密的index.php文件
注解:
1.php://filter/可用于處理打開的數(shù)據(jù)流棋蚌,起到過濾作用嫁佳。如果源文件為.php則很有可能在前臺顯示不出來。
2.此時我們采用的方法是谷暮,先讓文件轉(zhuǎn)化為base64格式(convert.base64-encode)然后再輸出蒿往,這樣不論是什么格式的文件都可以在前臺輸出。
Download~!
查看頁面源代碼發(fā)現(xiàn)下載地址是base64編碼湿弦,需要解碼解碼后發(fā)現(xiàn)是兩首歌的名字
分析兩首歌的文件也沒有發(fā)現(xiàn)什么
再看看題目和tips
需要猜到需要下載download.php這個文件瓤漏,url要用base64編碼
在if條件里面看到4個或者有3個都已經(jīng)找到了,就差hereiskey.php颊埃。就需要對hereiskey.php進行base64編碼然后放到url里面就能找到flag蔬充。
MYSQL
Do you know robots.txt?在網(wǎng)址后面加上robots.txt
php intval()函數(shù)
獲取變量的整數(shù)值班利,允許以使用特定的進制返回饥漫。默認(rèn)10進制
注:如果參數(shù)為整數(shù),則不做任何處理罗标。
根據(jù)TIP和源代碼:在網(wǎng)址后輸入sql.php?id=1024.1(id只要是1024.后面任意數(shù)值都可以)就能找到flag
sql injection 3
即SQL注入
寬字節(jié)注入庸队,雙字節(jié)繞過
MYSQl寬字節(jié)注入
/x00
非常重要的php正則表達式詳解
@的意思是忽略報錯信息
PHP ereg()函數(shù)
PHP strpos()函數(shù)
PHP中0、空闯割、null和false的總結(jié)
空字符串('')皿哨,false,NULL和0是值相等而類型不一樣!
第一種方法:ereg處理數(shù)組纽谒,所以這里nctf這里要用nctf[],構(gòu)造一個arr[]证膨,傳入之后,ereg是返回NULL的鼓黔,===判斷NULL和FALSE央勒,是不相等的不见,所以可以進入第二個判斷,strpos處理數(shù)組時崔步,也是返回NULL稳吮,注意這里的是!==,NULL!==FALSE,條件成立井濒,拿到flag
我們還是先說數(shù)組 ereg是處理字符串的灶似,所以,按照原理瑞你,我們將nctf構(gòu)造一個arr[]酪惭,傳入之后,ereg是返回NULL的者甲,===判斷NULL和FALSE春感,是不相等的,所以可以進入第二個判斷虏缸,而strpos處理數(shù)組鲫懒,直接返回NULL,注意這里的是!==刽辙,NULL!==FALSE,條件成立窥岩,拿到flag。
第二種:ereg的字符串截斷漏洞宰缤。遇到%00則默認(rèn)為字符串的結(jié)束谦秧。
傳nctf=1%00%23biubiubiu 接收到1后被截斷,后面也有所需要的#biubiubiu,條件成立撵溃,拿到flag!
html url編碼
為什么要進行URL編碼
URL中編碼URL特殊字符
bypass again
由代碼可以知道首先判斷a與b的值是否為空,如果不為空就比較a是否!=b锥累,注意這里的!=是弱類型的缘挑,如果不想等就繼續(xù)判斷a的MD5值是否等于b的MD5值,如果相等就給出flag
第一種方法:提交兩個加密后0e開頭的字符串
如果我們定義的相等是== 而不是===桶略,試下 字符串 240610708跟QNKCDZO
所有類似的字符串得到的md5如果是0e打頭的语淘,一些語言(PHP)會做隱式轉(zhuǎn)換,當(dāng)做int類型計算际歼,得到的結(jié)果是 0惶翻,最后導(dǎo)致0==0,判定為true
第二種方法:md5不能處理數(shù)組結(jié)構(gòu)的數(shù)據(jù)鹅心。出錯返回null吕粗,NULL==NULL。index.php?a[]=1&b[]=2
變量覆蓋
點開顯眼的source.php文件旭愧,
發(fā)現(xiàn)if$pass==$thepassword_123就顯示flag颅筋。那么就讓它們兩個相等宙暇。
PHP是世界上最好的語言
PHP eregi函數(shù)
如果傳進去的id含有hackerDJ就exit(),并且之后會對idURL解碼一次再判斷與hackerDJ是否相等议泵,如果相等就給出flag占贫。
Url編碼,傳輸過去默認(rèn)會解碼一次先口,所以我們不能只加密一次型奥,需要加密兩次
偽裝者
WEB安全-偽造X-Forwarded-For繞過服務(wù)器IP地址過濾
$_SERVER[“HTTP_X_FORWARDED_FOR”] 獲得的值是HTTP中 X-Forwarded-For
$_SERVER[“HTTP_CLIENT_IP”] 獲得的值是HTTP中 Client-Ip( client-ip書寫測試結(jié)果:服務(wù)器為window環(huán)境,則client-ip可以大小寫混寫碉京。服務(wù)器環(huán)境為linux厢汹,則client-ip必須全部大寫)
$_SERVER[“REMOTE_ADDR”] 獲得的值為 最后一個跟你的服務(wù)器握手的IP,可能會是代理IP或者其他
$_SERVER[“HTTP_REFERER”] 獲得的值為 HTTP中的Referer
Headers
上傳繞過
要求上傳JPG PNG GIF后綴的文件坑匠,上傳了PNG圖片又要求PHP后綴文件
我們需要把上傳的PNG圖片讓他識別為PHP文件。
截斷上傳漏洞
典型漏洞歸納之上傳漏洞 用burp截斷上傳文件時候的包在uploads/后面加一個123.php然后發(fā)送
發(fā)現(xiàn)basename等于路徑后面的123.php加上了文件名卧惜,說明是通過basename判斷文件類型的厘灼。所以讓basename的后綴等于php就可以了。
pass check
PHP strcmp函數(shù)
strcmp($pass,$pass1)
strcmp(array,string)=null=0
當(dāng)不同類型的變量進行比較的時候就會存在變量轉(zhuǎn)換的問題设凹,在轉(zhuǎn)換之后就有可能會存在問題。
HTTP常見Content-Type比較
用Burp添加POST參數(shù) 需要加Content-Type茅姜,hackbar應(yīng)該是會自動添加上去闪朱。
首先,只有使用POST方法的時候enctype才生效钻洒,GET方法默認(rèn)使用application/x-www-form-urlencoded編碼方法奋姿。
HTML meta 中的Content-Type定義的數(shù)據(jù)類型和編碼主要用于網(wǎng)頁內(nèi)容處理時,比如瀏覽器解析網(wǎng)頁內(nèi)容素标,或者搜索引擎的爬蟲称诗。
Form表單中的enctype 屬性規(guī)定在發(fā)送到服務(wù)器之前應(yīng)該如何對表單數(shù)據(jù)進行編碼。
默認(rèn)地头遭,表單數(shù)據(jù)會編碼為 "application/x-www-form-urlencoded"寓免。就是說,在發(fā)送到服務(wù)器之前计维,所有字符都會進行編碼(空格轉(zhuǎn)換為 "+" 加號袜香,特殊符號轉(zhuǎn)換為 ASCII HEX 值)。
起名字真難
‘54975581388’的16進制是‘ccccccccc’
所以?key=0xccccccccc
密碼重置
url中user1=Y3RmdXNlcg%3D%3D蜈首,對他進行base64解碼發(fā)現(xiàn)是ctfuser,而題目要求的是admin。對admin編碼然后用burp截斷改包
PHP反序列化
<?php
class just4fun {
var $enter;
var $secret;
}
if (isset($_GET['pass'])) {
$pass = $_GET['pass'];
if(get_magic_quotes_gpc()){
$pass=stripslashes($pass);
}
$o = unserialize($pass);
if ($o) {
$o->secret = "*";
if ($o->secret === $o->enter)
echo "Congratulation! Here is my secret: ".$o->secret;
else
echo "Oh no... You can't fool me";
}
else echo "are you trolling?";
}
?>
關(guān)于get_magic_quotes_gpc()函數(shù)
PHP stripslashes() 函數(shù)
PHP之:序列化和反序列化-serialize()和unserialize()
PHP引用(&)使用詳解
PHP 的引用允許你用兩個變量來指向同一個內(nèi)容
$a->enter=&$a->secret;
<?php
class just4fun {
var $enter;
var $secret;
function just4fun()
{
$a->enter=&$a->secret;
}
}
echo serialize(new just4fun());
?>
代碼跑一下?pass=O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";N;}
綜合題
把javascrip轉(zhuǎn)換為jsfuck代碼疾就,其中只包含六個不同的字符:!()+[]
轉(zhuǎn)換網(wǎng)址:http://jscrew.it/
把網(wǎng)頁中的jsfuck代碼轉(zhuǎn)換之后是1bc29b36f623ba82aaf6724fd3b16718.php
百度history of bash
history介紹及bash命令快速調(diào)用
命令記錄.bash_history
密碼重置2
查看頁面源代碼可以找到郵箱:admin@nuptzj.cn
根據(jù)提示:linux下一般使用vi編輯器澜术,并且異常退出會留下備份文件。
可能會存在備份文件猬腰,一般情況下備份文件一般都是myfile.txt~或者是.myfile.txt.swp鸟废,經(jīng)過測試發(fā)現(xiàn)存在.submit.php.swp文件。
內(nèi)容:
........這一行是省略的代碼........
/*
如果登錄郵箱地址不是管理員則 die()
數(shù)據(jù)庫結(jié)構(gòu)
--
-- 表的結(jié)構(gòu) `user`
--
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`token` int(255) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
--
-- 轉(zhuǎn)存表中的數(shù)據(jù) `user`
--
INSERT INTO `user` (`id`, `username`, `email`, `token`) VALUES
(1, '****不可見***', '***不可見***', 0);
*/
........這一行是省略的代碼........
if(!empty($token)&&!empty($emailAddress)){
if(strlen($token)!=10) die('fail');
if($token!='0') die('fail');
$sql = "SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'";
$r = mysql_query($sql) or die('db error');
$r = mysql_fetch_assoc($r);
$r = $r['num'];
if($r>0){
echo $flag;
}else{
echo "失敗了呀";
}
}
根據(jù)條件 只要token長度等于10姑荷,并且等于0就會給出flag盒延。
讓token=0000000000和郵箱一起提交
PHP代碼執(zhí)行函數(shù)總結(jié)
php 弱類型總結(jié)
PHP弱類型的安全問題詳細總結(jié)