Needingcen

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

今日深思两个题目

ctfshow的web方向的web3和web4

开始有疑惑了:

<?php include($_GET['url']);?>

这两个题目都是这句话

我一眼看上去是文件包含,我发现访问到一些目录下的文件,比如etc/passwd,是能够回显的

第三题的write_up是利用php伪协议去实现渗透

第四题的write_up是利用网站nignx文件日志里面写一句话木马,再用中国蚁剑连接

我在对比了两题的信息点之后我发现,在做完第三题之后以同一个手段去做第四题的时候,就出现了一点问题:不支持php的伪协议了......我自己的理解是:服务器后端开始对传入的url进行过滤了,但是具体的规则对我来说还是未知

在我全部写完之后,返回来的时候用文件日志写马的手段去做web3的时候成功了

接下来主要思考两个点:

1.php的伪协议直连:

PHP伪协议详解-CSDN博客这一篇博客已经写的很详细了,我用自己的话解释就是让url的值包含服务器文件系统中的某一个库,然后再通过这个库去运行命令(ls,cat......),以下挂上我和AI的问答

我的疑问有两个:

1.为什么GET这个方法可以带有 这个命令?是传参吗?

2.GET /?url=php://input HTTP/1.1这个请求头,url的值为php://input是不是对应了 这样php后端在接受到这个参数的时候,就会调用include去包含到这个通过GET请求传回来的值

题目解释:

PHP代码 include($_GET['url']); 表示服务器将尝试包含并执行通过GET请求的url参数指定的文件或伪协议。在这个场景中,攻击者可以通过构造特定的GET请求来利用这个漏洞。

请求分析:

请求的格式是标准的HTTP GET请求,但是它包含了一个非标准的部分:请求正文(body)。通常,GET请求不会包含请求正文,因为数据是通过URL的查询字符串传递的。然而,在这个例子中,请求正文包含了PHP代码。

疑问解答:

  1. 为什么GET这个方法可以带有 <?php system("cat ctf_go_go_go"); ?> 这个命令?是传参吗?
    • 正常情况下,GET请求不会包含请求正文。这里的请求正文 <?php system("cat ctf_go_go_go"); ?> 是通过php://input伪协议传递的。这不是标准的GET请求行为,而是利用了PHP脚本中的一个漏洞:include($_GET['url']); 没有对url参数进行适当的过滤或验证,导致攻击者可以通过url参数指定php://input,然后通过请求正文传递PHP代码。
  2. GET /?url=php://input HTTP/1.1这个请求头,url的值为php://input是不是对应了 <?php include($_GET['url']);?> 这样php后端在接受到这个参数的时候,就会调用include去包含到这个通过GET请求传回来的值?
    • 是的,你的理解是正确的。当url参数被设置为php://input时,PHP脚本会尝试通过include语句包含php://input伪协议指向的资源。由于php://input指向当前请求的请求正文,因此PHP脚本实际上会执行请求正文中的PHP代码。在这个例子中,请求正文是 <?php system("cat ctf_go_go_go"); ?>,这将导致服务器执行这个PHP代码,执行system("cat ctf_go_go_go")命令,这通常用于在服务器上执行操作系统命令。

2.网站日志写马,蚁剑连接

为什么可以做到这样子的手段?或者换句话说是为什么呢?其实网站日志写马然后蚁剑连接,一句话就描述完了,但是这个过程不重要,重要的是心法,也就是为什么可以用这样的方法去做?

思考:是不是所有的网站都可以往日志里面写马,写马是通过useragent这一个请求头项来写的,那么只要网站有记录请求的意愿,以及针对客户端的日志信息的过滤较弱,就可以往里面写木马

在往下思考前,我们来思考一个问题:写了木马之后,中国蚁剑是怎么连上的呢

在写下了之后,我们来详解:意思为XXXX是php的代码来执行,@意思是不提示报错,直接运行eval当中的内容,$_POST['cmd']意思为cmd这个变量,那么如果对cmd的这个属性传入一个ls,那么服务器就实际上执行的是eval(ls)这个命令,那么工具的连接实际上就是一次有一次的传入某一些参数来进行对服务器的操作(此处也不做详细解释,详情请看Web安全-一句话木马_yijuhuamuma-CSDN博客)那么阻挡我们这个手段的措施有哪些呢?从几个方面分析:
如果php或者其他语言本身对系统命令调用十分严格:比如php的安全模式safemode打开了,或者是在系统层面上禁用了shell_exc这个函数,使得php本身不能通过eval函数调用系统的命令,那么这个一句话木马当中,虽然存在了eval("ls")的命令,同样不能执行命令,执行不了命令,那么工具连接不上就很正常了

posted on 2024-08-27 12:32  Needingcen  阅读(131)  评论(0)    收藏  举报