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基本格式Plain Text?php//相关代码?$是变量符后跟变量名称区分大小写php是一门弱语言不用声明数据类型魔术常量形如_FILE_这样的预定义常量_FILE_ //返回文件的完整路径和文件名highlight_file(FILE); //代码高亮的显示当前文件内容表单数据$_GET——接受GET请求的参数$_POST——接受POST请求的参数$_REQUEST——接受几乎所有传递的参数如GETPOSTcookie等文件操作函数include(),require()(文件必须存在). :导入并执行php文件fopen()打开文件file_get_contents():读取文件内容到一个字符串file_put_contents():将一个字符串写入文件代码执行函数eval():执行字符串中的php代码assert()调试检查是否为truesystem(),shell_exec(),exec(),passthru()执行外部程序命令如lswhoami等反序列化函数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执行下一条命令的条件是上一条命令执行成功||是上一条命令成功执行则不执行下一条命令(可以绕过**/dev/null21**完成回显效果)空格过滤绕过大括号{catflag.php}$IFS,{$IFS}{$IFS$9}重定向字符%09(Tab)%20(space)文件名过滤绕过通配符? 、*绕过?指单个字符串*指所有Plain Textcat fl??.phpcat fl*单引号双引号绕过注意闭合Plain Textcat flag.php反斜线\绕过Plain Textcat fl\ag.p\hp特殊变量$1~9、9、、$*内联执行Plain Textaf;bla;cg.ph;dp;cat $a$b$c$d利用linux里的环境变量进行拼接${PATH:5:1}-从PATH里面第5个字符开始取第一个字符下标从0开始文件读取命令绕过反向显示cat-tac换读取命令Plain Textmore、less读取每页tail末尾十行nl读取内容显示行号od二进制读取-od -A d -C以ascii码输出xxd同时返回16进制和字符串sort排序文件并输出uniq删除连续重复的行并输出file -f报错回显grep正则表达式查找编码绕过Plain Textecho base64编码 | base -d | bash(或者sh)echo base64编码 | base -d$(echo base64编码 | base -d)echo HEX编码(ascii码) | xxd -r -p | bashprintf shellcode编码 | bashwriteup[MoeCTF2021]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也改为指定数值试了很多种什么monkeylike等都试了没用查资料发现是直接用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即可Plain Texta echo $flag;【RCE-labs】Level 2根据提示先用GET的提交方式输入?actionr用随机到的函数构造payload我第一个运气不好随到了preg_replace,这个函数的\e已经无效弄得我试了很多payload都没用后面随到了eval直接在POST中输入contentecho $flag;就可以得到flagPlain Textcontentecho $flag;【RCE-labs】Level 3接受post输入的命令且以system运行直接在post栏输入于以下payload即可Plain Textls /cat flag【RCE-labs】Level 4这题用GET接受ip输入并用system执行所以直接在url地址构建payload即可但这题应该过滤了cat函数所以我改用了sort读取flagPlain Text?id-1; ls /?id-1; sort /flag【RCE-labs】Level 5GET请求cmd接收用system执行命令但过滤了flag在url中构建payload如下Plain Text?cmdls /?cmdcat /flag【RCE-labs】Level 6这关几乎过滤了所有字母和字符但是放开了a和/然后在网上查了cat命令是放在/bin/中于是可以用通配符?构造payload 看了网上的payload还是不能理解为什么都是默认flag文件是在根目录下没有看到一个判断了flag路径的payloadPlain Text/???/?a? /??a?【RCE-labs】Level 7这关是空格绕过加过滤flag,用%09代替空格然后用\绕过正则即可Plain Text?cmdls%09/?cmdcat%09/fla/g【RCE-labs】Level 8这关是/dev/null 21垃圾清理绕过可以利用 || 的若前这运行成功则后者不运行的命令绕过Plain Text?cmdls / || ?cmdcat /flag ||学习心得学了rce但是没有完全学完还有长度限制的rce没有写进来实在是这个图文格式太难转换了编辑csdn把我本地的学习笔记转进来图片就全没了这篇的图片都是我一个一个复制粘贴进来的太痛苦了。总体来说本周了解了http的响应回复机制自己用docker搭建了靶场说到docker这个虚拟环境真是太难弄了我的虚拟机的windows又不知道为什么不能和docker环境共存开docker就不能开windows这有点难受了基本的php函数和语法格式主要是为了学习rce准备的希望以后越来越好把本周的内容还算简单。
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基本格式Plain Text?php//相关代码?$是变量符后跟变量名称区分大小写php是一门弱语言不用声明数据类型魔术常量形如_FILE_这样的预定义常量_FILE_ //返回文件的完整路径和文件名highlight_file(FILE); //代码高亮的显示当前文件内容表单数据$_GET——接受GET请求的参数$_POST——接受POST请求的参数$_REQUEST——接受几乎所有传递的参数如GETPOSTcookie等文件操作函数include(),require()(文件必须存在). :导入并执行php文件fopen()打开文件file_get_contents():读取文件内容到一个字符串file_put_contents():将一个字符串写入文件代码执行函数eval():执行字符串中的php代码assert()调试检查是否为truesystem(),shell_exec(),exec(),passthru()执行外部程序命令如lswhoami等反序列化函数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执行下一条命令的条件是上一条命令执行成功||是上一条命令成功执行则不执行下一条命令(可以绕过**/dev/null21**完成回显效果)空格过滤绕过大括号{catflag.php}$IFS,{$IFS}{$IFS$9}重定向字符%09(Tab)%20(space)文件名过滤绕过通配符? 、*绕过?指单个字符串*指所有Plain Textcat fl??.phpcat fl*单引号双引号绕过注意闭合Plain Textcat flag.php反斜线\绕过Plain Textcat fl\ag.p\hp特殊变量$1~9、9、、$*内联执行Plain Textaf;bla;cg.ph;dp;cat $a$b$c$d利用linux里的环境变量进行拼接${PATH:5:1}-从PATH里面第5个字符开始取第一个字符下标从0开始文件读取命令绕过反向显示cat-tac换读取命令Plain Textmore、less读取每页tail末尾十行nl读取内容显示行号od二进制读取-od -A d -C以ascii码输出xxd同时返回16进制和字符串sort排序文件并输出uniq删除连续重复的行并输出file -f报错回显grep正则表达式查找编码绕过Plain Textecho base64编码 | base -d | bash(或者sh)echo base64编码 | base -d$(echo base64编码 | base -d)echo HEX编码(ascii码) | xxd -r -p | bashprintf shellcode编码 | bashwriteup[MoeCTF2021]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也改为指定数值试了很多种什么monkeylike等都试了没用查资料发现是直接用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即可Plain Texta echo $flag;【RCE-labs】Level 2根据提示先用GET的提交方式输入?actionr用随机到的函数构造payload我第一个运气不好随到了preg_replace,这个函数的\e已经无效弄得我试了很多payload都没用后面随到了eval直接在POST中输入contentecho $flag;就可以得到flagPlain Textcontentecho $flag;【RCE-labs】Level 3接受post输入的命令且以system运行直接在post栏输入于以下payload即可Plain Textls /cat flag【RCE-labs】Level 4这题用GET接受ip输入并用system执行所以直接在url地址构建payload即可但这题应该过滤了cat函数所以我改用了sort读取flagPlain Text?id-1; ls /?id-1; sort /flag【RCE-labs】Level 5GET请求cmd接收用system执行命令但过滤了flag在url中构建payload如下Plain Text?cmdls /?cmdcat /flag【RCE-labs】Level 6这关几乎过滤了所有字母和字符但是放开了a和/然后在网上查了cat命令是放在/bin/中于是可以用通配符?构造payload 看了网上的payload还是不能理解为什么都是默认flag文件是在根目录下没有看到一个判断了flag路径的payloadPlain Text/???/?a? /??a?【RCE-labs】Level 7这关是空格绕过加过滤flag,用%09代替空格然后用\绕过正则即可Plain Text?cmdls%09/?cmdcat%09/fla/g【RCE-labs】Level 8这关是/dev/null 21垃圾清理绕过可以利用 || 的若前这运行成功则后者不运行的命令绕过Plain Text?cmdls / || ?cmdcat /flag ||学习心得学了rce但是没有完全学完还有长度限制的rce没有写进来实在是这个图文格式太难转换了编辑csdn把我本地的学习笔记转进来图片就全没了这篇的图片都是我一个一个复制粘贴进来的太痛苦了。总体来说本周了解了http的响应回复机制自己用docker搭建了靶场说到docker这个虚拟环境真是太难弄了我的虚拟机的windows又不知道为什么不能和docker环境共存开docker就不能开windows这有点难受了基本的php函数和语法格式主要是为了学习rce准备的希望以后越来越好把本周的内容还算简单。