作者:Heige@知道創宇404實驗室
原文鏈接:https://mp.weixin.qq.com/s/tpk61Uvc6ZF-qY7NQnahDg
「Prompt也是可編程的 --黑哥爾」既然ChatGPT火了后就誕生了“提示工程師”,所以Prompt本身的“編程”成為理所當然。這段時間一直在嘗試Prompt進行“編程”,通過一些嘗試得到的感觸是還是比較復雜,一言難盡的……
實際上對于利用ChatGPT生成各種查詢語句,算是GPT的一個非常基礎的應用點,如微軟Bing Chat就是很好的結合了GPT的這個場景,所以自然而然就想到網絡空間搜索引擎上,最早落地的就是之前我文章里介紹過的ztz做的一個項目:https://github.com/zt2/uncover-turbo
隨后Censys推出了一個CensysGPT:https://gpt.censys.io/
基于Prompt的實現實際上是存在各種不穩定的,因為提交的數據是有限的,對于這種使用說明類的文檔如果數據比較多實際上是比較適合精調模式(Fine-tuning)的,這個我在《大模型是小模型的基礎》 所看好的一個模式。
ZoomEyeGPT實現的方式也是基于Prompt的:https://github.com/knownsec/ZoomeyeGPT
為了方便使用我們采用瀏覽器插件的模式來進行,使用瀏覽器插件可能很好的實現數據交互,目前實現了兩個功能:
1、是通過自然語言生成ZoomEye搜索語法
這個需求就不用多做說明了,注意是讓大家不用去糾結各種語法詞了。
2、通過選擇banner生成ZoomEye搜索語法
這個需求是《無名之輩,ChatGPT》更進一步,在原文里是通過ChatGPT編程能力來實現查詢提取,而這次是直接用ChatGPT直接處理實現,這個是“黃世仁思維”更要進一步,這個功能也是更加方便實戰“行為測繪”進行自動拓線。
具體的Prompt請參考:https://github.com/knownsec/ZoomeyeGPT/blob/main/sw.js
這個提示詞里涉及到的邏輯還是比較多比較復雜的,實際上我是測試做了很多次,比如我最早的一個版本如下(實現上面banner處理的功能):
要求處理的只有一條http請求數據,請按如下處理:
第一步
刪除http頭里的”Date“字段
刪除http頭了的"Connection"字段
刪除HTTP協議版本
按以上規則處理如下http請求:
HTTP/1.1 404 Not Found
Server: nginx/1.18.0 (Ubuntu)
Content-Type: text/plain; charset=utf-8
Date: Sun, 09 Apr 2023 00:14:01 GMT
Set-Cookie: abcdef=pp77drqb4l5fpdpogi0ehcl7gb; path=/
Content-Length: 19
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Connection: close
404 page not found<html><head><body>a aaa bbb</body>
得到:
404 Not Found
Server: nginx/1.18.0 (Ubuntu)
Content-Type: text/plain; charset=utf-8
Set-Cookie: abcdef=pp77drqb4l5fpdpogi0ehcl7gb; path=/
Content-Length: 19
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Keep-Alive: timeout=5, max=98
404 page not found<html><head><body>a aaa bbb</body>
第二步
對Server及X-Powered-By頭進行處理忽視掉/符號后面的字符。
對Set-Cookie頭里的第一個Cookie名保留。
替換引號為空
其他的內容請直接保留。
得到的結果如下:
404 Not Found
Server: nginx
Content-Type: text/plain; charset=utf-8
Set-Cookie: abcdef
Content-Length: 19
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Keep-Alive: timeout=5, max=98
404 page not found<html><head><body>a aaa bbb</body>
第三步,對第二步的結果組合從字符串,用引號及加號連接,最終得到如下結果:
"404 Not Found" +"Server: nginx" +"Content-Type: text/plain; charset=utf-8" +"Set-Cookie: abcdef" +"Content-Length: 19" +"Cache-Control: no-store, no-cache, must-revalidate" +"Pragma: no-cache" +"Keep-Alive: timeout=5, max=98" +"404 page not found<html><head><body>a aaa bbb</body>"
請學習以上處理方式處理如下HTTP response banner,只要求輸出最終的處理的結果!
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Tue, 18 Apr 2023 13:52:49 GMT
Content-Type: text/html
Content-Length: 154
Connection: close
Location: https://api.cloudflare.com/client/v4//
Referrer-Policy: no-referrer
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
這個版本最大的特點是分步分解需求,這個在我這里測試實際上還是比較符合需求的,但是到另外小伙那測試發現各種不穩定的情況就出現了,因為提交的內容比較多很多邏輯都需要去強調處理,很多規則點很容易被忽視,這個學習的例子有限有很大的關系,所以我把這個提示詞提交給ChatGPT,讓他給我優化,優化后的結構跟我們最后發布的結構差不多(只是一些細節做了強調優化),所以最終按我的實際體驗把Prompt的結構可以分為:
* 數據處理規則
* 學習實例說明
* 強調關鍵詞匯
* 輸出格式說明
給我的感受是“學習實例說明”是非常重要的,當然在“微調”的的強調關鍵詞匯也非常重要,但是不管你怎么強調仍然存在各種亂生成的情況。
在實現“1、是通過自然語言生成ZoomEye搜索語法”的部分的時候,ZoomEye因為是國內最早的網絡空間搜索引擎,在很多的語法設計上是比較“特立獨行”的,比如用空格來表示或運算,常用的計算機編程里是用OR/or或者|| ,所以你在使用或運算的時候非常容易出錯,而且很多搜索引擎空格是用來表示一部分and運算的,比如shodan、google等搜索習慣!
再比如service:這個語法詞的設計,在ZoomEye里這個主要表示常見協議,但是在http協議里還有一個Server的http頭,很多人理解混淆了,黑哥爾之前也說過:
“ChatGPT是用集體的經驗替代了個人的經驗主義”
所以這些很容易讓人混淆的設計,理所當然也會影響集體經驗主義的ChatGPT,在這個部分的Prompt里使用了比較多的“學習實例說明”,來強化ChatGPT的理解。
由于ZoomEyeGPT是基于Prompt的,提交的數據很有限,這也意味著app:語法詞其實上面提到的service:這個語法詞都屬于我們標注生成的確定的“字典”,所以不太好提交直接提交給ChatGPT,為了不讓ChatGPT隨意生成,所以我直接刪除了app這個語法詞。好在ZoomEye是支持全局分詞后關鍵詞查詢的,所以這個時候需要你在提供的提示詞里使用,這里實際上目前這個方式不能隨意把你提交的自然語言翻譯成為ZoomEye搜索關鍵詞,還是需要你對ZoomEye的語法及搜索機制有所理解的基礎上。
這里我需要說明的是,即使你做了一些強調,ChatGPT仍然存在混亂的情況。這個時候你輸入的提示詞,直接使用關鍵詞是還是比較好的,這個或許使用Fine-tuning的模式,能更好的實現。
Prompt 與 Program 互相轉換
如果說Prompt是可編程的,那么通過ChatGPT的處理,完全可以實現,Prompt 與 Program互換,這個也源于上面提到的《無名之輩,ChatGPT》里寫用ChatGPT根據Prompt寫Python,到ZoomGPT里直接用讓ChatGPT直接按Prompt處理提交的數據。所以我也做了一個這樣的嘗試,我把上面做好的Prompt提交給ChatGPT讓它直接實現JS的處理,而這個代碼的核心直接就是ZoomEyeGPT里那個“regx->ZoomEye”實現的那個代碼。
最后我想提一下的是:
ChatGPT這種東西在逐步打破各種領域的界限,更低門檻成本實現各種跨領域的結合,這些取決于你的學習能力,執行能力及創新的想法,“被AI取代”只能是無能者的墓志銘。
ZoomEyeGPT的演示:
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/2072/