PHP无框架项目SQL注入挖掘技巧

PHP无框架项目SQL注入挖掘技巧
Yatming的博客1 | 代码审计教学计划: |
SQL靶场的第二关
1 | // 关键代码 |
图1:
定点挖掘关键字总结
1 | 可控变量:那么就可以找接受变量的参数比如说$_GET |
定点挖掘功能点
1 | 比如说我要挖掘文件上传,那么就可以去浏览目标网站存在上传文件的地方,比如说个人中心的上传头像或者其他的,然后抓包分析找到特定文件代码段,进行文件上传代码分析挖掘! |
拓展(视漏洞而定进行挖掘)
1 | 在挖掘SQL注入,进行数据库监控,监控当前页面和数据库交互过程(当前页面刷新执行的SQL语句) |
QQ业务图标点亮系统挖掘-数据库监控追踪
如果这里用了自动审计的话,那么直接就可以找到ywX和ywID这两个函数
那么这里对ywX进行测试
如果不用自动审计,那么直接找select 关键字,这里需要把正则和不区分大小写的勾,勾上
然后我们在查看是谁在调用这个函数,ywX,全局搜索
然后直接访问V144.php文件,发现给出了一条信息:从哪里来,就滚到哪里去
那么审计V144.php这个文件,找到这个关键字
分析这段源码,可以发现这里,先判断domain变量是否不存在sohuanquan变量中,如果是不存在的话,就输出:从哪里来,就滚回哪里去!,那么首先得出domain是怎么来的,从源码中可以知道,这里是得到我们的Referer
,但是从我们抓包来看,在我们发送的数据包中根本就没有这个字段,所以我们可以伪造这个字段
小迪视屏中是使用修改网站本身的前端超链接的方式,进行跳转,从而达到有一个来源字段的目的,这样的方式也同样可以,我这里直接使用burp进行操作了, 从返回的结果来看这里说需要输入完整,那么在次到V144.php的源码中进行查看,查看了之后
可以看到有两个结果,那么怎么判断是哪个呢,按照代码从上到小的原则,首先这里ywX是在第一个请输入完整的判断下面的,第二个请输入完整是在ywX下面的,那么ywX都执行了,怎么会继续判断在我下面的代码呢,所以就是第一个判断,是对的,可以看到首先是判断api是否等于ok,如果等于ok就接着判断,u,p,id这几个字段如果为空的话就输出请输入完整,所以我们继续伪造这几个字段
这里显示的是购买失败,说明我们的结果带入到判断中了,然后就是判断有没有注入
这里首先要进行URL编码,不然不成功,空格–>%20,转码之后将id字段调到最后,因为在进行注入的时候有一个#,会将后面的字段全部注释掉,这里我用的是–%20 ,这里好像不用注释也可以,可以看到v144.php代码中是对ywX有三次调用的,所以这里你进行传参是会执行三次的,而且这里是需要进行盲注的时候,那么如果是时间注入,那么所需要的时候是三倍
不用注释
74CMS3.4
1 | 优秀的CMS对传递的参数都有过滤机制 |
- 过滤机制查找(一般在common的文件中,应为每个传参的地方都需要引用)
- 这里在
include/common.inc.php
文件中,都使用了addslashes_deep
过滤 - 传统的过滤函数
addslashes()
返回在预定义字符之前添加反斜杠的字符串
1 | addslashes_deep负责对用户提交的数据进行转义,以防SQL注入,然而分析addslashes_deep函数后我们就可以发现,该函数只处理数组的值,对数组的key是完全不作任何过滤的,这直接导致了漏洞 |
什么叫二次注入:
1 | 第一步:插入恶意数据--->第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行转义,在写入数据库的时候还是保留原来的数据,但是数据本身包含恶意内容。 |
如果想要满足二次注入的条件,首先是在对我们使用注入的时候进行了转义,那么这里可以用宽字节注入和二次注入,需要同时满足有insert和update的操作,而且这个变量是我们可以控制的。并且不对我们update的操作进行过滤
一是创建建立和更新建立;二是创建账号和修改个人资料,但是个人资料只能修改密码无法修改用户名,因此排除2选择1
创建简历:通过mysql监控,可以知道前面要么只有insert或者update这一种,要么变量不可控
这里我没有复现成功。一直报错
资源
1 | https://blog.1997sty.com/cos/uploads/20220401/ff387a30b325532c40863ca36b39ab47.zip ---> Seay源代码审计系统2.1.zip |