CTF入门web篇17命令执行相关函数及绕过技巧讲解

本文介绍了命令注入与代码注入的区别,重点讲解了命令注入中的system、exec、passthru等函数的使用,并探讨了命令执行的绕过技巧,如换行符、后台进程、管道符、双竖线逻辑操作、IFS变量以及环境变量的利用。还分享了如何通过编码和变量截断来规避过滤限制。
摘要由CSDN通过智能技术生成

命令注入和代码注入区别
之前我们讲过的都是代码注入,注入的代码相当于网页中新的代码,比如去执行数据库读取的操作,我们想办法插入一段代码去执行,这就是代码执行。
在这里插入图片描述

命令注入
命令注入执行的是系统中的命令,使目标服务器的命令在目标服务器上去执行我们想要执行的命令,系统命令的执行还是要基于某些函数的调度去实现的。
在这里插入图片描述

1、system函数

例如system函数执行系统命令并输出相应的结果:

String system(string command, int&return_var)

这里就给了个代码示例。
在这里插入图片描述

2、exec函数

system函数是关键函数,不论是CTF还是挖洞最初都要对弱点函数做追踪,第一个就是system,第二个就是exec。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不会因为返回值受限一定要把它把传递给某个变量才可以。
在这里插入图片描述

3、 passthru函数
在这里插入图片描述

String shell _exec(string command) command是要执行的命令
在这里插入图片描述

4、运算符

与shell_exec功能相同,执行shell命令并返回输出的字符串
在这里插入图片描述

加引号后会直接执行系统命令,比如说echo,执行ls那么它是输出的是ls,如果要执行的是反引号中的ls,相当于打印出ls命令执行之后的一个结构。
在这里插入图片描述

在实际过程中,想去嵌入还是比较困难的,变量可控,存在反引号之间的,反引号传递不了,我们可以控制变量靠后的值,不管是get还是post单引号还是双引号,传递上去的值肯定是在引号之间的。

命令执行的绕过
在这里插入图片描述

  1. 换行符

换行符,比如说%0a就相当于换了一行,%0d也就是回车符。连续指令,理解上可能就相当于SQL语句,比如说第一句select 123那么理论上来说,如果你真的是写完整语法的,肯定是用分号去结尾,然后另起一行下一句,包括PHP它也是以分号来做换一行一行结束的。那么在shell中也是用这样去使用的。我用把0d换成一个分号的时候,一样是能够去实现执行的,就是这样一个效果,分号的作用就是说它会忽视掉两者之间的关系,就无论你上一条什么状态,就是你执行完了,或者你报错了,然后就执行下一句一句就是两者互不影响。
在这里插入图片描述

  1. 后台进程

后台进程,是看有没有用后台进程,比如echo 123,放后台之后,它其实就会产生一个ID号的。你在实际这个里面去执行的时候,它这里是没有回显所以

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值