为什么 sqlmap 源码看起来那么费劲?
最近在看sqlmap的源码,参考了乌云上的源码分析,可是越看越混乱,想提升在python编程方面的能力,该怎么办?
回复内容:
谢邀,是这样的:1. 首先你应该搞懂它的架构体系,模块与分层,设计模式等。说白了,你得懂软件工程。
我为什么会在技能表里特别推荐读它的源码,绝不仅它的 SQL 注射能力一流,还因为它的软件工程牛逼到不行。你可以想象下,能打造如此稳定的框架工具已经不是件简单的事。如果你深入下去就会发现里面处处是软件工程那些优秀思想,关于这点比起曾经的 w3af 不知道要牛逼多少倍,后来 w3af 卧薪尝胆搞了次重写,才有现在的地位。
这个软件工程举些具体的点吧,比如并发,如果你连什么是并发,什么是线程、锁、条件、信号、超时、异常等概念都不懂;再复杂点并发里进程、线程、协程的差异是什么;再再复杂点 Python GIL、垃圾回收、性能陷阱;再再再复杂点 Python 那些内置模块、第三方模块的 ugly 点的 hack,看到这些源码你估计会哭死…哦,对了,如果你并不熟 Python,那么那些 Pythonic 的技巧估计也会让你怀疑自己、怀疑世界…
说的题外话:如果你把 sqlmap 当产品来读,还能读出更多东西;如果你把 sqlmap 当作开源社区运作模式来读,又能读出更多东西。如果不是因为它的开源运作、产品、软件工程、SQL 注射的一流,我们也不会持续用它并提交贡献代码与 Bugs 反馈。
正因为这种优秀,你要读的东西可多了,当然难!
2. 要吃透 sqlmap,还有一个非常关键的是,熟练 SQL 注射各类技术与技巧,熟练基于 SQL 的后续渗透技巧,sqlmap 支持几乎所有主流数据库的注射。
这又是一大难题。如果你不熟悉,你绝对想不到它为什么那样发包,为什么那样处理…
哦,对了,如果你并不是一名渗透手,你绝对难以思考到为什么 sqlmap 集成了那一堆技巧。
3. 虽然有人写了些小而美的工具来比拼 sqlmap 的一些不足,但还是向 sqlmap 致敬,他们在不断改进。
以上是我从事黑客工程化数年经验的一些回馈。不用怕,啃久了自然熟。
最后,./sqlmap.py -h 开启一个纵深知识领域吧:)
-----------
补充下,这就是为什么我们有些源码风格类似 sqlmap,吸收好的。
计划在我公众号(lazy-thought)里展开写写 sqlmap 和一些优秀的 Python 黑客工具,仅计划而已,感兴趣那关注吧。 最近,一直在做内部的分布式集群扫描器,有机会集中精力的阅读了一下SQLMap代码,在完全兼容SQLMap Payloads的基础上重新实现了SQL扫描器。
SQLMap做为一款工具是非常优秀的,但不适合做集群并发,所以要重写。
从软件设计上来说,层次是很清晰的,但具体的代码实现上有不太优雅的地方,尤其是regex用的太多(我不太喜欢用regex)。
包括几个方面:
1、和所有的程序一样,启动的时候要先装在配置和初始化系统变量,其中重要的两个配置是payloads 和 dbms相关的信息;
payloads中分为两部分: boundary 和 testing 。。很重要
2、对payloads的管理,当给出一个url,如何获得污染的url,这个过程比较复杂
3、网络控制部分;
4、http 响应分析,这个部分和 如何污染关系很大;
5、逻辑判断,涉及到很多算法
一般过程:
1、先猜测dbms,具体实现就是用一段可以导致Database出错的参数注入进去,根据响应输出来找到对应的dbms,很可能找不到,就盲注入。。。
2、进行不同的payloads注入,主要包括以下几个:
payload的注入很有意思,根据参数值的类型(数值,字符串),有些请求还要进行SQL转意,比如: Error-Based/UNION Query,原因很简单,避免干扰对输出的分析。比如 :CONCAT(0x20,,)这样的函数,如果被执行了,就是一个字符串。
2.1 Error-based : 一般分析不到dbms,基本上也无法实现Error-based,分析原理很简单,看响应输出是否有特定的字符串;
2.2 Boolean-based: 通过成对的逻辑真和逻辑假(仅是可能)构造请求,根据每次的响应输出,对比内容的差异范围。。。
2.3 QUNION Query: 在枚举列的时候那个算法很精妙;
2.4 Timer-based: 根据多次的rt,经过方差算法,推断,这个受网络影响比较大,在获取dbname 处的算法和Boolean-based一样,算法也是很精妙的,其实就是枚举+二分法。
随便简单写了一些,希望对你有帮助。SQLMap是个很好的工具,但没有那么复杂,只要花点时间阅读代码,可以搞懂的。
对了,还需要了解各种数据库知识,里面涉及到很多数据库相关的知识。。。 @余弦 副总裁的答案已经很详细了,老夫虽常偏责他,但也颇为认同他的回答并已赞之。
总的来说,如果你只是想用 sqlmap,那么多看看多试试
python sqlmap.py -hh

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

VS Code 可用於編寫 Python,並提供許多功能,使其成為開發 Python 應用程序的理想工具。它允許用戶:安裝 Python 擴展,以獲得代碼補全、語法高亮和調試等功能。使用調試器逐步跟踪代碼,查找和修復錯誤。集成 Git,進行版本控制。使用代碼格式化工具,保持代碼一致性。使用 Linting 工具,提前發現潛在問題。

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

VS Code 擴展存在惡意風險,例如隱藏惡意代碼、利用漏洞、偽裝成合法擴展。識別惡意擴展的方法包括:檢查發布者、閱讀評論、檢查代碼、謹慎安裝。安全措施還包括:安全意識、良好習慣、定期更新和殺毒軟件。
