sql注入之pikachu盲注练习

实验环境:

Phpstudy + Pikachu + mysql + apche

实验目标:通过报错注入获取数据库的相关信息,解决无回显的场景获取数据库信息

  1. 判断是否存在注入

正常输入的abc查看结果,它说输入的username不存在,这是正常返回的情况

接下来再验证它是否不正常的情况会是怎样?这个地方可以猜测出如果存在注入,在数据库里执行的的查询语句,查询语句可能包含条件模糊查询,而且是字符类型。那么就想办法构造的语句让它不能执行。

传统方法

尝试方法1:abc ‘ and 1=1 然后与正常的情况对比,如果和使用abc 参数不一至 说明有注入.自己想想why??
尝试方法2:abc ‘ and 1=2 然后与正常的情况对比,如果和使用abc 参数一至 说明没有注入.自己想想why??

注:这里为什么是 abc ‘ and ‘1’=’1 而不是abc and 1=1,因为这里参数是字符型,要构造’符合的闭合,传入的参数,在数据库中实际sql执行的语句应该是 select * from tables where username=’传入的参数’。自己想想??

最快的方法:我喜欢直接输入:’或者”或者% 闭合符号,想想为什么??.既然是构造语句,又是字符类型,最直接的就是构造错误,让它执行出错。这里闭合的符号不一定是’,也有可能是“等其它,需要看实际情况。

代码审计:

从源码来分析,并没有对参数进行任务处理。直接接收参数,构造sql语句带入到数据库执行。

  1. 猜解数据库名、表名、列名、数据详细信息

从上已经判断出有注入点了。这里为了练习学习,mysql5.0以上的版本是有一张默认表的,这里采用报错注入的方式获取数据库的信息。

2.1猜解数据库名

2.1.2报错盲注猜解

2.1.2.1XPATH报错注入猜解

  1. 条件:mysql5.1及以上版本
  2. 报错函数

(2.1)extractvalue(arg1,arg2) 接受两个参数,arg1:XML文档,arg2:XPATH语句

标准payload:and extractvalue(1,concat(0x7e,(select user()),0x7e))

Eg:select * from users where username='aa' or extractvalue(1,concat(0x7e,(select user()),0x7e)) and id=2;

2.2updatexml(arg1,arg2,arg3)

arg1为xml文档对象的名称,arg2为xpath格式的字符串;arg3为string格式替换查找到的符合条

标准payload:and updatexml(1,concat(0x7e,(select user()),0x7e),1)

Eg:select * from users where username='aa' or updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),64,32),0x7e),2) and id=2;

注意:XPATH报错注入的使用条件是数据库版本符合条件;extractvalue()和updatexml()有32位长度限制。

解决办法:用substr()函数截取前后部分 例如:

and extractvalue(1,concat(0x7e,substr((select database()),1,5))) %23

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值