《Web安全攻防 渗透测试实战指南 》 学习笔记 (五)

Web安全攻防 渗透测试实战指南   学习笔记 (五)

 
 

第四章 Web安全原理解析


SQL注入的原理:

1.参数用户可控:前端传给后端的参数内容是用户可以控制的。
2.参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。

Mysql注入相关知识点:

Mysql5.0版本以后,mysql默认在数据库中存放一个“information_schema”的数据库
在该库中,读者需要记住三个表名,分别是SCHEMATA、TABLES、COLUMNS。

SCHEMATA表存储该用户创建的所有数据库的库名,该表中记录数据库库名的字段名为SCHEMA_NAME。

TABLES表存储该用户创建的所有数据库的库名和表名,该表中记录数据库库名和表名的字段名分别为TABLE_SCHEMA和TABLE_NAME。

COLUMNS表存储该用户创建的所有数据库的库名、表名和字段名,该表中记录数据库库名、表名和字段名的字段名为TABLE_SCHEMA、TABLE_NAME和COLUMN_NAME。


Mysql小知识点
database() : 当前网站使用的数据库
version():当前mysql的版本
user():当前mysql的用户

 

 

注释符:
常见注释符表示方法有  #、空格、/**/
 
内联注释:
/*!code*/
举例:index.php?id=-15/*!union*//*!select*/1,2,3
 
注:
   必须记住一个库 information_schema
    必须记住三个表 schemata、tables、columns
    schemata表中存储该用户创建的数据库的库名
    tables表中存储该用户创建的库名和表名
    columns表中存储该用户创建的表名和字段名
 
 
Union注入攻击
 
访问网址后
可以通过添加单引号再次访问
页面返回结果与之前不同
 
访问id=1 and 1=1   
由于and 1=1为真,所以页面返回与id=1相同,
访问id=1 and 1=2
由于and 1=2为假,所以页面返回与id=1不同。
因此有可能出现sql注入漏洞。
 
接着
使用order by 1-99 语句查询该数据表的字段数量,即可以理解为order by=1-99
若访问id=1 order by 3,页面返回和id=1相同的结果,访问id=1 order by 4,页面返回和id=1不同的结果,则字段数为3.
 
在数据库中查询参数id对应的内容,然后将数据库的内容输出到页面。
这时可以使用union注入,并且通过order by查询结果:
union select 1,2,3
 
若只看到页面执行成功,但没有返回union select 的结果,因此获取的结果没有输出到页面
 
我们可以通过设置参数id值,让服务器返回union select的结果
例如:把id的值设置为-1,因为数据库没有id=-1的数据,所以会返回union select的结果。
(这一步没有很懂,大佬们多指教)
 
 
当设置id=-1,页面返回结果,2:3时,意味union select 1,2,3中,2和3的位置可以输入mysql语句,则可以尝试在2的位置查询当前数据库名(使用 database()  函数),
访问 id=1 union select 1,database(),3
页面返回数据库信息
 
得知数据库库名后,查询表名
使用下面语句:
select table_name from information_schema.tables where table_schema='库名' limit 0,1;
 
尝试在 id=1 union select 1,2,3中的2处粘贴上述语句
 
即id=-1+union select 1,select table_name from information_schema.tables where table_schema='库名' limit 0,1 ,3
 
执行,得到表名
 
这里查询表名
命令:select column_name from information_schema.columns  where table_schema='库名' and table_name='表名'  limit 0,1;
获取该表的第一个字段名,使用 limit 1,1,获取该表的第二个字段名
 
 
 
 

参考资料:

《Web安全攻防 渗透测试实战指南》

 
 

转载于:https://www.cnblogs.com/0yst3r-2046/p/11563606.html

你可能感兴趣的:(《Web安全攻防 渗透测试实战指南 》 学习笔记 (五))