0基础学员入坑代码审计sql注入

在异空间安全报了第三期就业班,从0基础一路走来,收获了许多知识,基础知识、安全加固、漏洞挖掘、代码审计等等。感觉老师说的很细思路讲的很清晰,我个人感觉报名异空间安全应该是最正确的选择,老师说话又好听,以前对代码审计根本没思路,经过这段时间学习,收获满满,以下是我这周的学习成果。我就是传销。

审计SQL注入,结合定向功能分析法和敏感函数参数回溯法,找的时间比较长,只叙述找到漏洞的过程。

强烈建议:

找简单点的CMS

先挖后台找自信(比如说我最后审计的seacms)。。。

ZZCMS8.2

以前审计过那个user/del.php,这次再从user里面找

0x01

验证

user/index.php,进到check.php,

getip()函数有可疑

跟进到inc/function.php,百度横线部分

这就等于对客户端IP没做任何处理,那么任何将getip()直接导入sql语句都有可能存在注入,这次我们选其中的一个:logincheck.php

直接将getip()复制给了$ip

现在要考虑怎么伪造IP了,百度一波,发现只要在header里面加一行Client-IP: x.x.x.x即可

打开绿法师的MySQL监控,看看是否成功

完美,接下来给Client-IP打上星号 * ,保存为txt放到sqlmap跑一波

确认有SQL注入

修复

修这个就简单了,百度一个ip正则,加到getip()里面

再跑一次

搞定

0x02

验证

这次登陆用户后台,很多功能,漏洞点在邮件/短信部分

随便留两个言,先保证有数据在里面,添加留言的时候看URL定位下代码位置

定位到功能代码处

来,分析一波

回到展示页面,红线部分正好对应了saveas的值add(添加)和modify(修改)

修改的时候用绿法师确认下是否执行了参数

上面代码有两个函数需要分析,checkid()和stripfxg()

checkid()首先检查是否为数字,没戏

stripfxg(),图中参数默认关闭,只有第一行去反斜杠有用,这是在防XSS,对SQL注入一点作用都没。。。

再切回原代码处,htmlspecialchars_decode和nl2br均未传值,stripfxg()形同虚设,肯定有注入了

抓包,给info_content打上标记

跑一波

确认有注入

修复

数据库是UTF-8编码,不会产生宽字节注入,所以最简单的就是加斜杠

if的意思是如果htmlspecialchars_decode和nl2br未传值就代表进行sql注入检查,如果想再复杂一点的话

再跑一波

搞定

DEDECMS5.7 SP1

织梦这个cms的SQL注入还是比较多的,但还是比较难找,而且复现起来太复杂,这就要借助乌云学习一波了。。。

找了几个,但是复现太难了,只记录复现成功的。。另外提醒下大部分SQL注入前提是magicquotesgpc要关掉,而且要开启会员功能

万恶之源

根据下面漏洞单独或者组合利用,辛苦了几天找到几个SQL注入。。

0x01

位置:/include/filter.inc.php

跟进_FilterAll(就在上面。。。)

对里面的全局变量$cfgnotallowstr,$cfgreplacestr继续跟进

发现这个函数对喷子进行过滤,道理没错,但是是变量覆盖啊,我随便覆盖成一个SQL语句不就GG了?!

0x02

根据注释基本看懂了,但是还是不会绕过。。。百度一波80sec绕过。。。

关键词:@`'` ,不过人家说了是改了80sec的ids的

例子

0x01

member/mtypes

看这个参数id没过滤直接就去带入SQL语句了,显然有注入,不过我没复现成功。。。

我当时是这么来的,先看下这段完整的代码

save就对应功能页面的提交

抓一波包,把post的数据url解码提取出来

根据代码,只要把mtypename的下标注入就行,放进repeater,检测mysql,没有update语句传入,说明构造有问题

利用这个_FILE来构造,思路有点巧妙

下面结合第二个万恶之源来设计payload

@`'`这个会被拦截,就用他自己fuzz出来的`'`.``

_FILES[mtypename][name] _FILES[mtypename][size]这两个值后面有个点( . )

'`.``.

因为其他的关键字都被过滤了,只能ascii的方法一个个跑了,不过有一点好, 这一段可以直接修改分类名,就不需要时间盲注了

这个方法太难了,看了很久只是懂了怎么用,但是作者怎么想出来的还是没搞清(我太菜)

0x02

没办法了,非后台的漏洞实在太难复现了。。写一个后台路径上的吧,毕竟实战中如果找到后台路径,弱密码爆破不了,这个洞就有用了。。

dede/co_do.php

构造payload,试了很多个,这个ok

用一下上个例子的ascii方法,插进sleep里面

哎哟,终于搞定了

修复

开启magicquotesgpc,关闭会员功能,基本上99%注入都没了

具体修复0x01

具体修复0x02

齐博CMS7.0

上个太难了,来个简单点的

0x01

这个技术是网上学来的,哈哈

验证

先来讲下这个洞的核心方法,一个变量 被做了转义,可能是addslashes或者gpc打开了,截断符%00被转义成\0,如果这时候我们能控制str_replace这个函数: ,不就剩下一个斜杠 \ 了嘛,可以当转义字符用了。

这个什么时候用呢,当两个以上的参数引入SQL语句就有效果了,比如 ,我们在a参数输入 ,经过转义并替换字符: ,a参数的第二个单引号被转义,直到b参数的第一个单引号,那么b参数不就变得可控了嘛

来看代码:member/userinfo.php

这里定义了一个全局变量 ,继续跟进data/limitword.php

发现 是一个数组,而且 之前就定义了全局变量 ,由于php不太好,上网百度。。。发现global了一个 ,那么他的值只能 或者 了,说明这个 我们可控,既然控制了 ,下面的 中的三个参数我们也可控了

打的字有点多,贴下代码

下面就要找相关SQL语句了,先记住可注入的三个参数 ,往下看

参数代入了一个数组,再往下

数组代入了个函数,这个行数有两个地方用到,一个个进去找:user.php

就是这个了,下面构造payload了,看回那个数组,当然不用每个都填啦。。。

首先email这个必填,要不然

然后注入点我就放在 这一块了,画个示意图

将截断符%00放在 ,一直到 结束,然后自己再添加一个 ,因为我们要把结果显示在这个位置,还有一点要注意,构造 数据要注意了

就是看漏这个浪费了很长时间。。。所以 ,相对应%0000,最后还有个uid填自己的

完美,搞定

修复

这个简单

0x02

验证

漏洞点在do/activate.php

继续跟进红线的两个函数

无任何处理,直接代入SQL语句,我们再来看看加密函数

关键需要知道 的值,全局搜索

原来是随机生成的,不过,具体位置在后台。。。

剩下的就简单了,提取函数,自己写密钥,织梦有个类似的洞,但是没复现成功。。。。这个看起来难度蛮低的

结果复现的时候出问题了,只能进行报错注入,不会。。。没办法,百度

拿到密钥,搞定

修复

两个方法

把显示在页面的秘钥删除,每次需要用的时候在源码随机生成

检查过滤再代入参数

SEACMS6.55

审了三个了,对于新手来说,还是先审后台的,毕竟好挖也好复现。。。

0x01

这个洞是有cve的,但是根本看不懂写了个什么鬼,只能根据给出的漏洞地址自己来挖/admin/admin_video.php

验证

先看下全局机制:/include/common.php

有没有感觉和织梦的第一个万恶之源几乎一模一样,看来include文件夹里都是重点

下面看漏洞点:/admin/templets/adminvideomain.htm

未做任何处理,再看拼接到了哪

这个处理了等于没处理,肯定有注入了,下面就是复现了,而且超级简单,sqlmap竟然可以跑出来

自己抓包就不截图了

果然还是后台好找

修复

0x02

验证

这个洞就更简单了,又好找又好复现。。。

admin/admintopicvod.php

除了一个addslashes什么都没有,0防护,不用说,sqlmap都跑得出来

还真是后台几乎不防护。。

修复

和修织梦第一个洞一样

TO BE CONTINUED... ... ...

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190213G0E5GJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券