问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
记一次详细的代码审计
# 记一次详细的代码审计 ## 代码审计与漏洞分析 网上下载了一个小型的cms源码,将它搭建在本地,当我们看到如下界面时,最容易想到的是网上有公开的漏洞可以进行利用,通过网上查找并没有看到...
记一次详细的代码审计 ========== 代码审计与漏洞分析 --------- 网上下载了一个小型的cms源码,将它搭建在本地,当我们看到如下界面时,最容易想到的是网上有公开的漏洞可以进行利用,通过网上查找并没有看到相关漏洞,原因在于网站使用的人数过少,只是小型网站,看到登入框这些的话就想到业务安全漏洞进行利用,但是通过测试,结果都无效,此时只能自己通过代码审计啦。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-11aa3ac77fa5250e285d6cedb88270dd5d63d914.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-11aa3ac77fa5250e285d6cedb88270dd5d63d914.png) 先熟悉一下网站的目录,对于我这个小白来说,掌握的漏洞并不是很多,先拿比较熟悉的SQL注入来尝试,由于是自己本地搭建的环境,可以知道数据库的账号密码,使用MySQL的监控插件,这个监控插件可以看到网站运行时MySQL的执行语句。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-4f7104d54036fff9b1f50cea767d0d0a35f25b35.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-4f7104d54036fff9b1f50cea767d0d0a35f25b35.png) 刷新一下页面,执行的语句如图,看到这些语句是不是特别惊喜,因为我们在SQL注入时也常用这些语句,出现这些执行的语句就有可能会产生注入,观察是否有变量。那么此时的难题又来了,怎么判断哪个是变量呢?FROM后那些是列名和表名、limit后面的为自带参数,这些明显都不是数据库执行语句的变量,而这个127.0.0.1很明显是变量,变量名称为ip。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-0fbe98acf9d67bfaa3d4644db5bda5b0e2474d73.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-0fbe98acf9d67bfaa3d4644db5bda5b0e2474d73.png) 于是寻找首页文件,因为这些语句是加载首页文件而执行的SQL语句,找到首页文件分析这些语句是如何来的。搜索是否有SQL语句:select,发现代码中都没有SQL语句,搜索IP也没有发现任何有用的信息。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-ff79ff7e1f83f98fdaa1419011aaf0542ebcdc8c.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-ff79ff7e1f83f98fdaa1419011aaf0542ebcdc8c.png) 两个都没有的话,这下又该怎么办呢?思考一段时间,于是想到可能存在包含文件,利用包含文件来执行这些语句。现在针对的语句主要是有变量的语句,开始采用全局搜索,搜索刚才执行的特定语句,查找是否有文件有这个语句,发现这里有SQL语句。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e9e0132a49c6c36ecc20a15d5542e1de70da240c.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e9e0132a49c6c36ecc20a15d5542e1de70da240c.png) 在返回查看首页文件,查看是否有文件包含,发现包含了两个文件,意思就是说刚才搜索的SELECT \*FROM ‘dd WHERE ‘ip’这个语句可能是在php/function.php文件中定义。[![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-5eb68513a4cc877b47bb473d4f7b6acd802d2f41.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-5eb68513a4cc877b47bb473d4f7b6acd802d2f41.png) 查看这个文件,进行查找,发现有ywdd这个函数,获取了变量ip,并且SQL语句在该函数中执行。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-a613ebd2a2befc389c99169b5c7cf73a216c6af1.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-a613ebd2a2befc389c99169b5c7cf73a216c6af1.png) 接着确认一下首页文件,查看是否有这个函数,发现确实有引用该函数。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2f92744e806521449fa9d3dae0c66fbb7e32f8b9.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2f92744e806521449fa9d3dae0c66fbb7e32f8b9.png) 刚才我们数据库接收的变量值是127.0.0.1,getip函数获取的参数为什么是127.0.0.1呢?它的值又是从哪里来的呢?全局搜索一下该函数,找到该函数的定义函数,问题又来了,这么多函数都有出现getip函数,怎么确定这个函数getip的定义函数呢。其实很明显可以知道/php/function中的getip函数为定义函数,其他的函数都是调用getip函数。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9c3faa87f6ddf9ae5d41cacadc8df6b663d245bb.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9c3faa87f6ddf9ae5d41cacadc8df6b663d245bb.png) 查看/php/function文件,可以观察到realip为getip函数返回的值。realip是怎么得到127.0.0.1的呢?HTTP\_X-FORWARDED\_FOR是服务器变量,普遍用于获取客户端ip并存入数据库。分析该函数的语句,则realip的值为HTTP\_X-FORWARDED\_FOR变量传入的值,并且没有过滤SQL注入语句。此时,利用HTTP\_X-FORWARDED\_FOR变量来修改realip的值,又怎么修改传入呢? [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-04377405a70ec5d1b118c731b6f3cf02271a72b1.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-04377405a70ec5d1b118c731b6f3cf02271a72b1.png) 使用burpsuite抓取首页文件的数据包,并且添加X-Forwarded-For: 8.8.8.8,这样就可以传入参数。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-c51e748f51cc1a6a2d7880d7e7aa70d634d96c70.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-c51e748f51cc1a6a2d7880d7e7aa70d634d96c70.png) 将其发送至Repeater中,点击发送,发现127.0.0.1改成了8.8.8.8,由于上面的代码并没有过滤SQL注入语句,于是可以确定这个网站存在注入漏洞。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-808304183b5685d2fb680d1e46ff780d2df6a9f7.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-808304183b5685d2fb680d1e46ff780d2df6a9f7.png) 漏洞利用 ---- 这里直接使用终端查看dd这个表来确定有多少个列名,可知有五个列名。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-72ab365c2bc48136dd7e3eec18edf216dae02f84.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-72ab365c2bc48136dd7e3eec18edf216dae02f84.png) 构造SQL中的语句,让它爆出相应数字。 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-a78f1e4d42d1ba6833e85553733e345d91f7c0ca.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-a78f1e4d42d1ba6833e85553733e345d91f7c0ca.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-dfd5a4c547ace490d3a81809b3201ba86d8e13ae.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-dfd5a4c547ace490d3a81809b3201ba86d8e13ae.png) 爆破数据库名,版本,用户,由于这个是SQL注入中的内容,这里就不一一演示。[![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2d738aca0f09ee58184282048affed58954130e7.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2d738aca0f09ee58184282048affed58954130e7.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-6aedc410d15d40872eb602d6fadd8950c672326b.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-6aedc410d15d40872eb602d6fadd8950c672326b.png) 心得 -- 代码审计需要我们平时多注意可能存在漏洞的函数,并不一定要一字不漏的记下每一个普通函数,需要用的时候能够快速通过各种方法找到就行。以前每次学一门语言就是从头到尾学一遍,结果都没有记住啥,深度也不够深,其实个人建议有的时候多去看看那些文章,敲一些经典的实验题,效果可能更好。学安全需要懂的语言非常多,因为人的记忆是有限的,我们要平时善于总结,多去思考。虽说我是一个菜鸡,但是不管自己亦弱或亦强,我们都需要继续向前走。非常感谢奇安信给我们提供一个这么好的平台,超级好评,有错误还会细心的教你改。
发表于 2021-07-02 20:55:52
阅读 ( 5774 )
分类:
漏洞分析
1 推荐
收藏
0 条评论
请先
登录
后评论
Honeypot
17 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!