web学习-rce远程命令执行以及http协议和简单php安全
rce(第二周)
http协议
一次完整的HTTP访问
- DNS 解析域名 → IP
- 与服务器建立 TCP 连接
- 浏览器构造 HTTP 请求报文 发送
- 服务器构造 HTTP 响应报文 返回
- 浏览器解析响应(HTML / 图片 / 跳转)
- HTTP请求结构
其中包含请求方法,请求头,空行,请求体
常见方法:GET(参数在URL),POST(参数在body)
常见绕过的请求头:Host,User-Agant,Referer,Cookie,X-Forwarded-for,Data等

- HTTP响应结构

- 其中包含:状态行,响应头,响应体
状态码的分类:200(成功),3XX(重定向),4XX(客户端错误->网页不存在),5XX(服务器错误)
PHP 学习
php基本格式
|
- $是变量符,后跟变量名称,区分大小写
- php是一门弱语言,不用声明数据类型
魔术常量
形如_FILE_这样的预定义常量
|
_FILE_ //返回文件的完整路径和文件名 highlight_file(FILE); //代码高亮的显示当前文件内容 |
表单数据
$_GET——接受GET请求的参数;
$_POST——接受POST请求的参数;
$_REQUEST——接受几乎所有传递的参数如(GET,POST,cookie等)
文件操作函数
include(),require()(文件必须存在). :导入并执行php文件
fopen():打开文件
file_get_contents():读取文件内容到一个字符串
file_put_contents():将一个字符串写入文件
代码执行函数
eval():执行字符串中的php代码
assert():调试检查是否为true
system(),shell_exec(),exec(),passthru():执行外部程序命令如(ls,whoami等)
反序列化函数
unserialize():将一个已序列化的字符串转回php值
数据库操作函数
mysql_query(),mysqli_query():发送一个mysql查询
RCE
基本函数
- 有回显: system(),exec("回显最后一行,全部回显需要定义数组变量并输出"),passthru(回显二进制数据经过渲染返回正常数据),
- 无回显:shell_exec(返回字符串,回显需借用echo等函数),反引号 ,popen(需要用文件读取函数获取fget、fread返回内容,再用输出函数回显,第二个参数是模式r、w),proc_open(),pcntl_exec()
操作系统连接符
- 拼接命令(';' '&' '&&' '|' '||')
|
使用&和&&需要用url编码->%26 |
空格过滤绕过
- 大括号{cat,flag.php}
- $IFS,{$IFS},{$IFS$9}
- 重定向字符<
- %09(Tab),%20(space)
文件名过滤绕过
- 通配符? 、*绕过(?指单个字符串,*指所有)
|
- 单引号,双引号绕过(注意闭合)
|
- 反斜线\绕过
|
- 特殊变量$1~9、9、@、$*
- 内联执行
|
- 利用linux里的环境变量进行拼接
|
|
文件读取命令绕过
- 反向显示(cat->tac)
- 换读取命令
|
编码绕过
|
Plain Text |
writeup
[MoeCTF 2021]Do you know HTTP
- 访问页面发现要求HS请求

- 根据提示用burpsuit抓包然后发送到repeater

修改GET头为HS,发现需要本地请求

- 添加X-Forwarded-for: 127.0.0.1

- 用Referer添加页面地址

- 把User-Agent改为指定浏览器

- 成功拿到flag

[SWPUCTF 2024 秋季新生赛]http标头
- 提示了发售当天的000;查一下黑神话的发售日期为2024年8月20日,星期二
- 先抓包,用data头修改日期

- 然后把User-Agent改为指定浏览器
- 把cookie也改为指定数值,试了很多种,什么monkey,like等都试了没用,查资料发现是直接用cookie= ,我也是没招了
- 后面直接添加Referer头就行了
最后添加X-Forwarded-for: 127.0.0.1就结束了
RCE-labs
【RCE-labs】Level 0
页面顶上有flag,复制粘贴即可
【RCE-labs】Level 1
有include ()函数和eval($_POST['a'])函数且接收post输入的‘a’ 直接在hackbar中输入以下payload即可
|
【RCE-labs】Level 2
根据提示先用GET的提交方式输入?action=r,用随机到的函数构造payload,我第一个运气不好随到了preg_replace,这个函数的\e已经无效弄得我试了很多payload都没用,后面随到了eval,直接在POST中输入content='echo $flag;'就可以得到flag
|
【RCE-labs】Level 3
接受post输入的命令且以system运行,直接在post栏输入于以下payload即可
|
【RCE-labs】Level 4
这题用GET接受ip输入并用system执行,所以直接在url地址构建payload即可,但这题应该过滤了cat函数,所以我改用了sort读取flag
|
【RCE-labs】Level 5
GET请求cmd接收,用system执行命令但过滤了flag,在url中构建payload如下:
|
【RCE-labs】Level 6
这关几乎过滤了所有字母和字符但是放开了a和/,然后在网上查了cat命令是放在/bin/中,于是可以用通配符?构造payload (看了网上的payload还是不能理解为什么都是默认flag文件是在根目录下,没有看到一个判断了flag路径的payload)
|
【RCE-labs】Level 7
这关是空格绕过加过滤flag,用%09代替空格然后用\绕过正则即可
|
【RCE-labs】Level 8
这关是>/dev/null 2>&1垃圾清理绕过,可以利用 || 的若前这运行成功则后者不运行的命令绕过
|
学习心得
学了rce但是没有完全学完,还有长度限制的rce没有写进来,实在是这个图文格式太难转换了,编辑csdn把我本地的学习笔记转进来图片就全没了,这篇的图片都是我一个一个复制粘贴进来的,太痛苦了。总体来说本周了解了http的响应回复机制,自己用docker搭建了靶场,说到docker,这个虚拟环境真是太难弄了,我的虚拟机的windows又不知道为什么不能和docker环境共存,开docker就不能开windows,这有点难受了,基本的php函数和语法格式主要是为了学习rce准备的,希望以后越来越好把,本周的内容还算简单。

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)