九零登录

[【通过】] 本地微信优惠券分享系统引发的一次安全检测

[复制链接]
发表于 2016-8-10 14:21:21 | 显示全部楼层 |阅读模式

事情的起因是,我媳妇让我帮他转发微信获得当地商家的优惠券,可以在去店里消费的时候使用。我正在打cf哪有那个闲心啊!可是没办法,谁的老婆不是高高在上呢?这是我的心里啊。。。我的gp我的任务。。。。。。

拿过手机分享了一下,得到了一个优惠券,点了一下微信右上角的多选,发现这个可以在浏览器里打开,而且可以访问,没有隐藏地址,当时我就一个想法,难道这是当地某某自己开发的一套系统吗?

邪恶的思想开始蠢蠢欲动,先上图给打开看下。

1.jpg

既然能在浏览器打开,那么pc呢?
把老婆这里糊弄过去,也没心玩cf了,火狐直接访问地址竟然可以访问而且没有任何限制。看后缀.php?id=。。。总感觉对了就是它。
Order by 555,直接提示非法操作。
Oeder by 5 返回正常页面
这里我一直用的技巧就是先写一个3位数的大数字,再写一个1位的小数字,如果两回返回的结果不一样,那么注入点就十之八九是存在的。

2.jpg

3.jpg


接下来就是逐字递增判断出有多少个可识别字段。后来通过测试21个。直接unionselect 12,3,4,5……21 返回一个正常的页面。

4.jpg

这个地方困惑了我很久,因为我在看那些黑客教程的时候可是告诉我,这个时候应该爆出什么1啊,3啊,7啊这些数字,然后我就可以在数字位置输入一些常用的诸如user()这些函数得到一些敏感的信息了,可是我现在的情况是除了正常显示什么都没有变,难道是人家根本没有注入漏洞,自己想错了?测试就这样终止了。
然后我查阅了好多资料,为此我还去了YouTube,可惜自己英文太差没搜到什么有用的视频资料(准确不知道搜什么)、后来还是google,搜到了一篇国内的前辈所写的手工注入mysql的一些总结性的文字。其中有一条是这么说的:在mysql注入的时候很多时候都会过滤一些常见的查询,比如:select union等这些关键字,大部分网站不可能直接这么写上就会爆出你想要得看到的信息。我们一般通过组合或者编码绕过才能看到自己想要的。
然后我按照文中的方法逐一测试,后来总结出两种方法在遇到这样爆不出数字的时候使用非常好使。
1, 在url参数前面加上一个减号“-”

5.png

2, 加一个判断组合sql为false
6.png

能正常爆出数字了,开心好多,毕竟自己以前都是看教程,从来都没实际操作过。
接下来大家可能想就简单了吧,暴库,爆表,爆字段,解MD5,登录后台,然后上传啊,配置啊等等拿webshell完工,其实我也这么想的,可是真的那么顺不也就没意思了么。

还是不能一口吃个胖子,理想和现实总会有些许的差异。
我这里就不上图了,文字叙述下过程吧,反正是挺悲剧的。好在对方mysql是高版本可以枚举不然我估计我要吐血。
index.php?id=229 and false UNION SELECT1,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21
获得了数据库名。

接下来就是回去库下的表,这里我还是截个图吧,因为我确实差点死上面别问我为什么,先看图:

7.png

我数了数:admin,sok_ad,sok_cate,sok_comments,sok_member,sok_message,sok_nav,sok_news,sok_news_type,sok_product,sok_region,sok_site_config,sok_store,sok_zkq
这么多表,不过看到admin大家肯定会先去猜解它,我也不例外顺利拿到账号和密码,只是密码好像很另类看着不像MD5

8.png

9.png
看到这个,我太开心了,大家也开心对吗?可是就像我说的,我看着这个MD5
就不像个MD5,好别扭,啥都不说了,上最牛的那个网站去破解一下试试吧。我就不贴地址了,省的说我打广告。

10.png

看到这里傻了吧,是的我也是。突然感觉身体被抽空了。。。。抽根烟冷静下。
接下来,我就是逐一手猜了,他剩下说有表的字段看是否有没有可以利用的东西,可惜很遗憾,唯一的收获就是sok_member 这个表是会员表而且没有那么变态的MD5加密,但是登录进去几个账号也没发现有任何权限,不知道为什么还是手机访问才有,反正电脑上登录与不登录没什么变化,不想在这个地方浪费时间,干脆暂停。

注:后来拿下服务器看了代码才知道,程序员用了混淆代码加密,他是md5+一个特定的字符后又md5了一次。。。看到这里我终于庆幸自己没有为此继续下去。



时间过去了几天,这几天出去给人装视频头去了,回来后闲暇了又想起了这个事,我就重新思考,该如何继续下去。
我为什么没看看自己是什么权限呢?真是醉了。自己前面还自己嘚吧嘚的说呢什么user()函数。。。心里千万个草泥马飘过。。

11.png

看到这里我好像又有了思路,既然是root权限,那么我就可以读写文件了。
这里有几个问题要先解决。
1,必须找到网站的绝对路径 \\不管报错,还是搜索引擎,还是读配置文件。。。。
3, 如果有狗还的过狗 \\后来发现我的担心是多余的。。
不绕圈了,直接说结果。
我在找路径的时候,报错,搜索引擎都没成功,后是是读网站配置文件成功的。报错不知道为什么,都提示非法操作,搜索引擎就无语了,没收录。也不知道怎么个情况。着重说下读配置文件的过程吧,有总结哦。
因为我用端口扫描器扫描了这个服务器ip知道开着3389呢,我就连接了一下,明显win2003的服务器。有了这个前提,我就百度搜了一下iis6的网站配置文件路径。
C:/Windows/system32/inetsrv/MetaBase.xml
直接读:
index.php?id=229 and false UNION SELECT1,load_file('C:/Windows/system32/inetsrv/MetaBase.xml'),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21

12.jpg
这个地方又困惑了我好多天,因为我初学,经验不足,到后来我都认为是我自己权限不够,可是那个root在哪显示着呢。因为没其他思路,就这样我只能又暂停了。

后来通过我查了n多资料总算是突破成功读取了配置文件找到了网站的配置信息。
总结:
1, 不能查的原因,并非是权限不够,而是过滤了单引号“‘”
2, 绕过的方法,就是各种编码,我最后用阿克斯吗解决的,后来我又试了hex也能成功绕过。
3, 但是在转换的时候,注意提交的时候数据不能有单引号,有单引号就不能转数据,这个一定要千万提起注意。
load_file(char(99,58,47,119,105,110,100,111,119,115,47,115,121,115,116,101,109,51,50,47,105,110,101,116,115,114,118,47,77,101,116,97,66,97,115,101,46,120,109,108))

上面的代码,是我转好的,大家可以直接复制进去用,还原后就是iis6的配置文件路径。
13.png

14.png
这里我要补充一点,其实我搜的资料,里只说了这样可以查到网站的配置,获得绝对路径,可是没有经验的我,看了头很大,因为iisl里的网站不是一个,那么多,那么乱我根本无法在这么多杂乱的信息里找到我想要的。
我自己总结了下如何找有用的信息。
查出来,也要看得懂!

<IIsWebServer       Location ="/LM/W3SVC/896362"
              AuthFlags="0"
              ServerAutoStart="TRUE"
              ServerBindings=":80:www.taichang.org"\\端口域名
              ServerComment="www"\\iis里面的名称
       >
</IIsWebServer>
<IIsFilters      Location ="/LM/W3SVC/896362/filters"

没什么有用的信息。

</IIsFilters>
<IIsWebVirtualDir  Location ="/LM/W3SVC/896362/root"
              AccessFlags="AccessRead| AccessScript"
              AppFriendlyName="默认应用程序"
              AppIsolated="2"
              AppRoot="/LM/W3SVC/896362/Root"
              AuthFlags="AuthAnonymous| AuthNTLM"
              DirBrowseFlags="DirBrowseShowDate| DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension |DirBrowseShowLongDate | EnableDefaultDoc"
              Path="D:\www"  \\网站绝对路径
       >
</IIsWebVirtualDir>


\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\配置信息三个标签为一个域名信息。
这个,是我在本地搭建环境分析出来的,所以里面的域名信息,和路径不是我们今天目标网站的信息,所以就不打码了。


就这样,我拿到了,网站绝对的路径,接下来就顺了。
into outfile写入了一句话,菜刀连之,顺利获得了webshell,上传我自己写的过狗小马,(这里吐槽一下,我写的代码竟然没有砸出什么水花。,可是货真价实过狗的。)
哈哈,一笑而过。

再后来就没什么值得自己感觉要总结的了,webshell找了个可读可写的目录,传了windows2003大杀器,PR上去提权成功,因为直接就开着3389呢,就没什么障碍了。


至此,自己第一入侵就这么结束了,很兴奋说真的。因为自己从来没有实际操作过,都是看别人的教程,这里要感谢土司开放注册激发我这样的菜鸟抄刀实战,对这个圈的认识和技术有了质的飞跃。

最后总结
1, 入侵要沉得住气,尤其像我这样的菜鸟,拿不下就放放,随着知识的增长或许就会有新的突破。
2, 对于union select 爆不出数字的解决办法,或许还有其他的,单确实这两个真挺好用。
3, 查询的时候,提示非法操作,通过学习知道是过滤了或者有狗,绕过的方法就是各种编码组合,当然这里有个非常重要的就是转换的时候注意单引号。

疑问:
我找了另外一个手机程序,跟这个差不多,但是pc上打不开,只能在微信客户端打开,如果在pc上访问就会提示请在微信客户端打开链接这个问题让我很困惑,我自己搜了些资料,后来尝试Burp抓包,包到是抓到了,但是不知道为什么,修改包后提交就服务器提示500错误,要不就404,我个人感觉应该也有注入漏洞,只是不知道是否抓微信的包,改包有什么特殊的方法或者要求。这个地方如果有前辈可以指点我一下,万分感谢! [email protected]
小广告:通过这次入侵我还有一个意想不到的收获,就是既然绕过是各种编码,那么绕狗继续注入是否也是这个原理?我竟然误打误撞,把一句话重组了一下,过了最新的狗,asp的一句话没问题了。,php语言不熟还在测试。所以说过狗思路可能这是其中一种。 如果这次能转正,再和大家分享过狗的详细思路。

---------可能是权限不够,无法上传图片。。。。悲剧。

评分

参与人数 1酒票 +5 收起 理由
管理05 + 5 欢迎加入90!

查看全部评分

发表于 2016-8-10 14:36:24 | 显示全部楼层
一篇很详实的文章,图片上传后,需要点击,才会加入到文章中。
1.注入不显数字,是因为前面是sql语句是正确的,可以id=-1 或 id=1 and 1=2 union select .....
2.看是否是iis 可以在 头里面看
 楼主| 发表于 2016-8-10 14:39:44 | 显示全部楼层
fresh 发表于 2016-8-10 14:36
一篇很详实的文章,图片上传后,需要点击,才会加入到文章中。
1.注入不显数字,是因为前面是sql语句是正 ...

谢谢你,你是第一个回复我的。

1,图片确实上传不了,直接error。不过我把我的word发给管理员了。

2,你说的注入不显示文字,是sql语句组合错误的原因吗?


发表于 2016-8-10 15:37:30 | 显示全部楼层
图片上传error 一般是 浏览器兼容的问题
论坛这问题很早了  建议换换浏览器试下上传
发表于 2016-8-10 19:50:00 | 显示全部楼层
union注入是要先让前面的查询返回0记录,所以ID值要随便写个不存在的
发表于 2016-8-10 20:15:43 | 显示全部楼层
图片给你上传了  是浏览器问题 换下谷歌浏览器就可以了
 楼主| 发表于 2016-8-10 21:57:38 | 显示全部楼层
T0P丶乱 发表于 2016-8-10 19:50
union注入是要先让前面的查询返回0记录,所以ID值要随便写个不存在的

受教了

也就是说,union的实质是要返回false才有效对吧。

 楼主| 发表于 2016-8-10 21:57:59 | 显示全部楼层
谦月Vip4pt 发表于 2016-8-10 15:37
图片上传error 一般是 浏览器兼容的问题
论坛这问题很早了  建议换换浏览器试下上传

谢谢你。
 楼主| 发表于 2016-8-10 21:59:10 | 显示全部楼层
管理05 发表于 2016-8-10 20:15
图片给你上传了  是浏览器问题 换下谷歌浏览器就可以了

谢谢你,我终于加入90sec了,还望多关照。
发表于 2016-8-11 09:20:48 | 显示全部楼层
mtjbyddzqfwdyy 发表于 2016-8-10 14:39
谢谢你,你是第一个回复我的。

1,图片确实上传不了,直接error。不过我把我的word发给管理员了。

就是你前面要先为错 不然前面都是正确的 后面的就不会显示了
组合的sql语句为:
不显示123:select * from news where id=1 union select 1,2,3 from admin--
显示123:select * from news where id=-1 union select 1,2,3 from admin--

显示123:select * from news where id=1 and 1=2 union select 1,2,3 from admin--

评分

参与人数 1酒票 +1 收起 理由
管理05 + 1 积极参与讨论

查看全部评分

发表于 2016-8-11 09:32:49 | 显示全部楼层
这个读取iis配置真的是很老的但是很有用的套路,之前有文章,表哥也是运用的相当屌的。
 楼主| 发表于 2016-8-11 10:50:29 | 显示全部楼层
fresh 发表于 2016-8-11 09:20
就是你前面要先为错 不然前面都是正确的 后面的就不会显示了
组合的sql语句为:
不显示123:select * f ...

明白了。谢谢你!
发表于 2016-8-11 10:58:22 | 显示全部楼层
写的很不错,这里还有另外一种显示数据的方法,就是使用LIMIT 1,2。
总的来说,sql注入使用union不能显示数据从源码层面出发有两种可能性并有两种共通的解决方法:
问题可能性:
1, 如果php源码使用了mysql_fetch_array()函数的话,因为该函数每一次只能取出一行,所以如果使用union显示数据,而uinon前后两个条件都为真的话,它取出的就不会是我们构造生成的数据,而是原本的查询。
2,如果sql语句之后加了LIMIT 0,1的话,和上面的情况一样,union前后都为真,却只能返回第一个结果,同样出不了数据。

问题解决方法:
1,使前一个sql返回为空,这样的话返回的就会是后一个我们构造的select语句结果。
2,使用LIMIT 1,2限制返回第二个语句的结果

评分

参与人数 1酒票 +2 收起 理由
管理05 + 2 积极参与讨论

查看全部评分

 楼主| 发表于 2016-8-11 11:35:31 | 显示全部楼层
nearg1e 发表于 2016-8-11 10:58
写的很不错,这里还有另外一种显示数据的方法,就是使用LIMIT 1,2。
总的来说,sql注入使用union不能显示 ...

谢谢你的补充,又学一新姿势,
 楼主| 发表于 2016-8-11 11:44:19 | 显示全部楼层
nearg1e 发表于 2016-8-11 10:58
写的很不错,这里还有另外一种显示数据的方法,就是使用LIMIT 1,2。
总的来说,sql注入使用union不能显示 ...

你好,

我当下正好遇到一个这样的注入点,而且我怀疑他的sql语句前面又 order by id 这样的排序,请问又什么具体的方法突破吗?
发表于 2016-8-11 12:35:28 | 显示全部楼层
mtjbyddzqfwdyy 发表于 2016-8-11 11:44
你好,

我当下正好遇到一个这样的注入点,而且我怀疑他的sql语句前面又 order by id 这样的排序,请问 ...

前面吗?你的意思是注入点在order by 后面?
发表于 2016-8-11 19:38:46 | 显示全部楼层
lz你的这个注入点让我想到了sqligods,很好玩的一个东西,可以试试,另外,这种注入点可以借用sqlmap,pangolin等工具,很方便
 楼主| 发表于 2016-8-12 16:20:03 | 显示全部楼层
nearg1e 发表于 2016-8-11 12:35
前面吗?你的意思是注入点在order by 后面?

是的,order by 在前面。

大概的sql语句为:
SELECT * FROM table order by id desc limit 1

我搜了搜资料,利用的方法为 insert,延迟注入。因为没实际操作过,但感觉没有select查询效果好。这是我自己猜的。

现在连怎么利用都没成功。

 楼主| 发表于 2016-8-12 16:25:46 | 显示全部楼层
rainism 发表于 2016-8-11 19:38
lz你的这个注入点让我想到了sqligods,很好玩的一个东西,可以试试,另外,这种注入点可以借用sqlmap,pang ...

我查了下sqligods
我这个,跟sqligods好像没什么关系。


发表于 2016-8-12 19:49:51 | 显示全部楼层
mtjbyddzqfwdyy 发表于 2016-8-12 16:20
是的,order by 在前面。

大概的sql语句为:

orderby之后的注入点比较少见,不过我好像又有印象,应该在哪里看过相似的文章。现在没时间搞这个,先加个好友先,之后有时间整理思路再讨论。
应该是是在zone里面看过相似的文章...
发表于 2016-8-13 12:12:25 | 显示全部楼层
lz你进去后看哪的代码才知道他用了混淆代码加密...
 楼主| 发表于 2016-8-13 13:00:22 | 显示全部楼层
login.php 登录文件


        $bl='lyk';
        $password=md5(md5($_POST['p1w'].$bl));

部分代码。
 楼主| 发表于 2016-8-13 13:00:31 | 显示全部楼层
治愈~~ 发表于 2016-8-13 12:12
lz你进去后看哪的代码才知道他用了混淆代码加密...

ogin.php 登录文件


        $bl='lyk';
        $password=md5(md5($_POST['p1w'].$bl));

部分代码。
 楼主| 发表于 2016-8-13 13:01:53 | 显示全部楼层
这样的加密,根本无法还原,所以以后写程序可以借鉴一下,就算有注入,猜出表和字段,拿到值也无法还原。
发表于 2016-8-13 14:15:30 | 显示全部楼层

哦哦 懂了懂了

九零

GMT+8, 2026-10-22 15:25

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表