目录
一、测试页面是否存在sql注入
二、利用漏洞看是否能够拿到数据
information_schema
前提条件:靶场环境为mysql数据库,由于是靶场能看见页面执行代码
回顾sql注入的两个关键条件:
1.用户能够控制输入
2.原本要执行的代码,拼接了用户输入的sql代码被执行
下面有个连接写的判断sql注入漏洞写的很好https://blog.csdn.net/qq_51550750/article/details/122925031
作者:qq_51550750
一、测试页面是否存在sql注入
页面能看出是为get传参
get传参便能测试是否存在sql注入
常见测试sql注入漏洞语句为:
运算符进行运算;and 1=1 and1=2;seelp()延迟函数
当进行运算符进行运算时发现id=3-1 输出2的内容
再进行and进一步来看是否存在sql漏洞
and 1=1这里能看见sele*from user where id=1 and 1=1
这个时候他会在原有的基础上去判断and 1=1 这显然是正确的,正确才会有输出
页面正常输出
用户输入数据为and1=2
现在是sql语句在执行了原有的查询语句后去判断and 1=2是否正确 判断正确才会有输出
页面无任何回显现在可以确定存在sql注入了
二、利用漏洞看是否能够拿到数据
现在可以试一试猜字段了
order by 1 order by 5
order by 5出现 No results found未找到内容
证明没有5个字段
order by 3出现了回显 order by 4出现 No results found未找到内容
联合查询union语句整上去去找页面的回显点,这里需要注意的是mysql语句在执行语句会先执行前面的语句也就是说还是会输出前面的内容,这里让前面的语句查询不到不到东西
这里采用?id=1 and 1=2 也就是说执行的语句得满足1=2这个条件明显是错误的使用页面输出不了内容
and 1=2 union select 1,2,3
现在已知条件是
存在着3个字段,回显点有两个2,3
现在便要利用到一个mysql自带库去操作sql语句了
information_schema
库里面存在着tables表,里面存放这数据库和时数据表的关联
这个是mysql系统自带库,里面储存了表和数据库的一个连接意思为储存了一些对于关系
里面有一个表叫做tables表,储存了表和数据库的关联
如何调用 information_schema数据库的内容
. 在数据库中.代表着 库.表.字段
库.表.字段=选中x库的x表的x字段
我们选择回显点3来进行操作
语句为:
and 1=2 union select 1,2,table_name from information_schema.tables where table_schema=database();
页面回显user现在知道了当前是表名 我们的目的是拿flag 通过limit来拿其他表
发现了erro_flag表
知道了表再去拿字段
union select 1,2,column_name from information_schema.columns where table_name=‘error_flag’ and table_schema=database()
页面回显内容为flag,falg字段不出意外内容便在里面
现在已知条件是表为error_flag 字段为falg字段
接下来便是拿flag跑路
union select 1,2,flag from error_flag
得到falg 第一个回显为zKaq-98K
四题四个flg都给它取出来使用limit n,m
顺序分别为:
zKaQ-Nf
zKaQ-BJY
zKaQ-XiaoFang
zKaq-98K
后面三题大同小异
第二题有’便加一个’ 多出来的给它注释掉 – qwe
第三题有’) 便加一个’)多出来的给它注释掉 – qwe
第四题有”)便多加一个多出来的给它注释掉 – qwe