日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BugkuCTF-WEB题give_up

發(fā)布時(shí)間:2024/9/27 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BugkuCTF-WEB题give_up 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

知識(shí)點(diǎn)

拿到源碼后,就要考慮幾個(gè)繞過的方法:==的弱比較:0e和“字符串”;php的偽協(xié)議;eregi的繞過:%00的截?cái)?#xff08;而\x00會(huì)將url后面的都截?cái)?#xff0c;我們的目的是在執(zhí)行到變量時(shí)實(shí)現(xiàn)截?cái)?#xff09;和*123123。

解題流程

打開網(wǎng)頁如下

熟悉的?id=
看起來好像有sql注入,通過sqlmap跑一遍發(fā)現(xiàn)并沒有
F12查看一下源代碼

有注釋!,1p.html.查看一下這個(gè)網(wǎng)址。

跳轉(zhuǎn)到論壇了 ,Burp抓不到包因?yàn)樘D(zhuǎn)處理在服務(wù)器
F12查看網(wǎng)絡(luò)

這里發(fā)現(xiàn)301重定向。
那要看1p.html,
通過burpsuite抓包了。

抓包后將網(wǎng)址改為/1p.html, Repeater

之間這串
JTIyJTNCaWYoISUyNF9HRVQlNUInaWQnJTVEKSUwQSU3QiUwQSUwOWhlYWRlcignTG9jYXRpb24lM0ElMjBoZWxsby5waHAlM0ZpZCUzRDEnKSUzQiUwQSUwOWV4aXQoKSUzQiUwQSU3RCUwQSUyNGlkJTNEJTI0X0dFVCU1QidpZCclNUQlM0IlMEElMjRhJTNEJTI0X0dFVCU1QidhJyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJ2InJTVEJTNCJTBBaWYoc3RyaXBvcyglMjRhJTJDJy4nKSklMEElN0IlMEElMDllY2hvJTIwJ25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJyUzQiUwQSUwOXJldHVybiUyMCUzQiUwQSU3RCUwQSUyNGRhdGElMjAlM0QlMjAlNDBmaWxlX2dldF9jb250ZW50cyglMjRhJTJDJ3InKSUzQiUwQWlmKCUyNGRhdGElM0QlM0QlMjJidWdrdSUyMGlzJTIwYSUyMG5pY2UlMjBwbGF0ZWZvcm0hJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuKCUyNGIpJTNFNSUyMGFuZCUyMGVyZWdpKCUyMjExMSUyMi5zdWJzdHIoJTI0YiUyQzAlMkMxKSUyQyUyMjExMTQlMjIpJTIwYW5kJTIwc3Vic3RyKCUyNGIlMkMwJTJDMSkhJTNENCklMEElN0IlMEElMDklMjRmbGFnJTIwJTNEJTIwJTIyZmxhZyU3QioqKioqKioqKioqJTdEJTIyJTBBJTdEJTBBZWxzZSUwQSU3QiUwQSUwOXByaW50JTIwJTIybmV2ZXIlMjBuZXZlciUyMG5ldmVyJTIwZ2l2ZSUyMHVwJTIwISEhJTIyJTNCJTBBJTdEJTBBJTBBJTBBJTNGJTNF

明顯是base64加密
http://ctf.ssleye.com/base64.html在線解密一下

%22%3Bif(!%24_GET%5B’id’%5D)%0A%7B%0A%09header(‘Location%3A%20hello.php%3Fid%3D1’)%3B%0A%09exit()%3B%0A%7D%0A%24id%3D%24_GET%5B’id’%5D%3B%0A%24a%3D%24_GET%5B’a’%5D%3B%0A%24b%3D%24_GET%5B’b’%5D%3B%0Aif(stripos(%24a%2C’.’))%0A%7B%0A%09echo%20’no%20no%20no%20no%20no%20no%20no’%3B%0A%09return%20%3B%0A%7D%0A%24data%20%3D%20%40file_get_contents(%24a%2C’r’)%3B%0Aif(%24data%3D%3D%22bugku%20is%20a%20nice%20plateform!%22%20and%20%24id%3D%3D0%20and%20strlen(%24b)%3E5%20and%20eregi(%22111%22.substr(%24b%2C0%2C1)%2C%221114%22)%20and%20substr(%24b%2C0%2C1)!%3D4)%0A%7B%0A%09%24flag%20%3D%20%22flag%7B***********%7D%22%0A%7D%0Aelse%0A%7B%0A%09print%20%22never%20never%20never%20give%20up%20!!!%22%3B%0A%7D%0A%0A%0A%3F%3E

根據(jù)%3C來看Words變量應(yīng)該是url編碼
這串有url碼,看著有點(diǎn)亂
http://ctf.ssleye.com/url.html解一下

<? if(!$_GET['id']) //如果無法通過get獲得id變量 或者 id=0執(zhí)行 {header('Location: hello.php?id=1'); //跳轉(zhuǎn)到hello.php文件設(shè)置id=1exit(); //退出腳本。 } $id=$_GET['id']; //通過get方式獲得其他文件的id變量 $a=$_GET['a']; //通過get方式獲得其他文件的a變量 $b=$_GET['b']; //通過get方式獲得其他文件的b變量 if(stripos($a,'.')) //$a文件里不能有.,但當(dāng)'.'號(hào)在第一位時(shí),因?yàn)樽址菑?開始的,所以函數(shù)會(huì)返回0,就可以通過判斷。 {echo 'no no no no no no no';return ; } $data = @file_get_contents($a,'r'); //將$a文件讀入到data里 if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4) {$flag = "flag{***********}" } else {print "never never never give up !!!"; } /* id== 0與if(!GET(‘id’))有突,于是令id=0e12345繞過,id為其他也可以stripos(字符串a(chǎn),字符串b) 函數(shù)查找字符串b在字符串a(chǎn)里第一次出現(xiàn)的位置(不區(qū)分大小寫)。 stripos() 函數(shù):查找字符串在另一字符串里第一次出現(xiàn)的位置(不區(qū)分大小寫)。 這個(gè)函數(shù)應(yīng)該是想過濾掉‘.’號(hào),但是當(dāng)'.'號(hào)在第一位時(shí),因?yàn)樽址菑?開始的,所以函數(shù)會(huì)返回0,就可以通過判斷。 返回值: 返回字符串在另一字符串里第一次出現(xiàn)的位置,如果沒有找到字符串則返回 FALSE。 注釋:字符串位置從 0 開始,不是從 1 開始。strlen() 函數(shù)返回字符串的長度file_get_contents 將整個(gè)文件讀入一個(gè)字符串 file_get_contents()函數(shù)顯然是用來讀取文件的,但是我們并不知道網(wǎng)站有哪些文件,但是$a參數(shù)可以控制,利用a=php://input來控制文件內(nèi)容。 用$a=php://input通過php偽協(xié)議去繞過file_get_contents 源碼里變量 $data 是由 file_get_contents() 函數(shù)讀取變量 $a 的值而得,所以 $a 的值需為數(shù)據(jù)流。 在服務(wù)器里自定義一個(gè)內(nèi)容為 bugku is a nice plateform! 文件,再把此文件路徑賦值給 $a,顯然不太現(xiàn)實(shí)。因此這里用偽協(xié)議 php:// 來訪問輸入輸出的數(shù)據(jù)流,其內(nèi)php://input 可以訪問原始請(qǐng)求數(shù)據(jù)里的只讀流。這里令 $a = “php://input”,并在請(qǐng)求主體里提交字符串 bugku is a nice plateform!。substr(string,start,length) 函數(shù):返回字符串的一部分。 substr() 函數(shù)返回字符串的一部分。 substr(string,start,length) ,length參數(shù)可選。如substr($b,0,1) 就是在參數(shù)b里面 ,從0開始返回1個(gè)長度的字符串 substr($b,0,1)就是取b參數(shù)的第一個(gè)字符。ereg() 函數(shù)或 eregi() 函數(shù)存在空字符截?cái)嗦┒?#xff0c;即參數(shù)里的正則表達(dá)式或待匹配字符串遇到空字符則截?cái)鄟G棄后面的數(shù)據(jù)。 eregi() 截?cái)嗦┒?CTF題做多了就知道 ereg() 函數(shù)或 eregi() 函數(shù)存在空字符截?cái)嗦┒?#xff0c;即參數(shù)里的正則表達(dá)式或待匹配字符串遇到空字符則截?cái)鄟G棄后面的數(shù)據(jù)。 源碼里待匹配字符串(第二個(gè)參數(shù))已確定為 “1114”,正則表達(dá)式(第一個(gè)參數(shù))由“111”連接b的第一個(gè)字符組成,若令substr( b,0,1)=”\x00”,即滿足“1114”與“111”匹配。因此,這里假設(shè)$b=”\x0012345”,才能滿足以上的三個(gè)條件。eregi("111".substr($b,0,1),"1114") 就是判斷"1114"這個(gè)字符串里面是否有符合"111".substr($b,0,1)這個(gè)規(guī)則的 字符串 1114 要與字符串 111 連接變量 $b 的第一個(gè)字符構(gòu)成的正則表達(dá)式匹配 b的長度大于5,eregi("111".substr(b,0,1),“1114”)這個(gè)函數(shù)為b的正則匹配, substr(b的正則匹配,substr(b的正則匹配,substr(b,0,1)!=4這個(gè)說明$b開頭不能為4,所以我可令 $b=*123456id參數(shù)為字符時(shí),比較時(shí)會(huì)轉(zhuǎn)為0在構(gòu)造變量 b 里的空字符時(shí),過早將空字符 \x00 放入,在提交請(qǐng)求時(shí)導(dǎo)致請(qǐng)求頭截?cái)?#xff0c;繼而請(qǐng)求失敗,得不到響應(yīng)。 因?yàn)?b 是 URL 查詢字符串里的變量,不應(yīng)該在此放入空字符 \x00,而應(yīng)該為空字符的 URL 編碼 %00。注意,雖然 b=%0012345 實(shí)際字符串長度為 8 字節(jié),但在后臺(tái)腳本讀入數(shù)據(jù)時(shí),會(huì)將 URL 編碼 %00 轉(zhuǎn)換成 1 字節(jié)。所以說,空字符應(yīng)該在后臺(tái)腳本的變量里出現(xiàn),而不是在 URL 查詢字符串變量里出現(xiàn)。構(gòu)造payload: http://114.67.246.176:13629/hello.php?id=a&a=php://input&b=111111 */?>

%00,?,*這三類特殊符號(hào)都可以用來繞過$b的判斷,前者為截?cái)嗫兆址?#xff0c;后兩者為通配符

構(gòu)造payload:
http://114.67.246.176:13629/hello.php?id=a&a=1.1


構(gòu)造payload:
http://114.67.246.176:13629/hello.php?id=a&a=php://input&b=%0012345
http://114.67.246.176:13629/hello.php?id=asd&a=php://input&b=*111111
http://114.67.246.176:13629/hello.php?id=0e123&a=php://input&b=%0011111
?id=0e123456&a=php://input&b=*123456


總結(jié)

以上是生活随笔為你收集整理的BugkuCTF-WEB题give_up的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。