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

Snipaste_2023-06-07_09-42-11

1
2
3
4
5
6
7
8
9
10
#代码审计教学计划:
审计项目漏洞demo->审计思路->完整源码框架->验证并利用漏洞
#代码审计教学内容
PHP,java网站应用,引入框架类开发源码,相关审计工具及插件使用
#代码审计必备知识点:
环境安装搭建使用,相关工具插件安装使用,掌握前期各种漏洞原理及利用
#代码审计开始前的准备:
审计目标的程序名,版本,当前环境(系统,中间件,脚本语言等信息),各种插件等
#代码审计挖掘漏洞根本
可控变量及特定函数,不存在过滤或过滤不严谨存在绕过导致的安全漏洞

SQL靶场的第二关

1
2
3
4
5
6
7
8
9
10
11
12
13
// 关键代码
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
//echo sql;
$result=mysql_query($sql);
$row = mysql_fetch_array($result);


/*
分析如果有一个类似于echo的输出函数在这里,那么当我们写入一个 "<script>alert(1)</script>" 则会有一个xss漏洞,如图1
$result=mysql_query($sql); 这一句就是SQL注入了,因为这里没有对SQL注入进行任何的防护,所以就会导致sql注入
$row = mysql_fetch_array($result); 以数组的形式进行输出
*/

图1:

Snipaste_2023-06-07_10-42-25

定点挖掘关键字总结

1
2
3
可控变量:那么就可以找接受变量的参数比如说$_GET
还可以查找特定函数:输出类的print或者echo,数据库操作函数
特定关键字:select,insert,update,以及其他sql执行语句那么这种关键字找的就是SQL注入漏洞,搜索eval寻找代码执行漏洞

定点挖掘功能点

1
比如说我要挖掘文件上传,那么就可以去浏览目标网站存在上传文件的地方,比如说个人中心的上传头像或者其他的,然后抓包分析找到特定文件代码段,进行文件上传代码分析挖掘!

拓展(视漏洞而定进行挖掘)

1
2
在挖掘SQL注入,进行数据库监控,监控当前页面和数据库交互过程(当前页面刷新执行的SQL语句)
断点调试:访问页面对应代码进行断点调试(执行过程的先后顺序)

QQ业务图标点亮系统挖掘-数据库监控追踪

Snipaste_2023-06-07_11-18-16

Snipaste_2023-06-07_11-19-56

如果这里用了自动审计的话,那么直接就可以找到ywX和ywID这两个函数

Snipaste_2023-06-07_13-20-24

Snipaste_2023-06-07_13-20-29

那么这里对ywX进行测试

如果不用自动审计,那么直接找select 关键字,这里需要把正则和不区分大小写的勾,勾上

Snipaste_2023-06-07_13-22-19

然后我们在查看是谁在调用这个函数,ywX,全局搜索

Snipaste_2023-06-07_13-23-23

Snipaste_2023-06-07_13-24-57

然后直接访问V144.php文件,发现给出了一条信息:从哪里来,就滚到哪里去

那么审计V144.php这个文件,找到这个关键字

Snipaste_2023-06-07_13-26-38

分析这段源码,可以发现这里,先判断domain变量是否不存在sohuanquan变量中,如果是不存在的话,就输出:从哪里来,就滚回哪里去!,那么首先得出domain是怎么来的,从源码中可以知道,这里是得到我们的Referer,但是从我们抓包来看,在我们发送的数据包中根本就没有这个字段,所以我们可以伪造这个字段

Saste_2023-06-07_11-46-19

小迪视屏中是使用修改网站本身的前端超链接的方式,进行跳转,从而达到有一个来源字段的目的,这样的方式也同样可以,我这里直接使用burp进行操作了, 从返回的结果来看这里说需要输入完整,那么在次到V144.php的源码中进行查看,查看了之后

Snipaste_2023-06-07_13-33-34

可以看到有两个结果,那么怎么判断是哪个呢,按照代码从上到小的原则,首先这里ywX是在第一个请输入完整的判断下面的,第二个请输入完整是在ywX下面的,那么ywX都执行了,怎么会继续判断在我下面的代码呢,所以就是第一个判断,是对的,可以看到首先是判断api是否等于ok,如果等于ok就接着判断,u,p,id这几个字段如果为空的话就输出请输入完整,所以我们继续伪造这几个字段

Snipaste_2023-06-07_13-04-17

这里显示的是购买失败,说明我们的结果带入到判断中了,然后就是判断有没有注入

Snipaste_2023-06-07_13-17-57

这里首先要进行URL编码,不然不成功,空格–>%20,转码之后将id字段调到最后,因为在进行注入的时候有一个#,会将后面的字段全部注释掉,这里我用的是–%20 ,这里好像不用注释也可以,可以看到v144.php代码中是对ywX有三次调用的,所以这里你进行传参是会执行三次的,而且这里是需要进行盲注的时候,那么如果是时间注入,那么所需要的时候是三倍

Snipaste_2023-06-07_13-18-06

不用注释

74CMS3.4

1
2
3
优秀的CMS对传递的参数都有过滤机制

下载地址:https://blog.1997sty.com/cos/uploads/20220401/81ca873ba23525fbfff092de8b6848e9.zip
  • 过滤机制查找(一般在common的文件中,应为每个传参的地方都需要引用)
  • 这里在include/common.inc.php文件中,都使用了addslashes_deep过滤
  • 传统的过滤函数addslashes()返回在预定义字符之前添加反斜杠的字符串
1
addslashes_deep负责对用户提交的数据进行转义,以防SQL注入,然而分析addslashes_deep函数后我们就可以发现,该函数只处理数组的值,对数组的key是完全不作任何过滤的,这直接导致了漏洞

Snipaste_2023-06-07_14-04-43

什么叫二次注入:

1
2
3
4
5
第一步:插入恶意数据--->第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行转义,在写入数据库的时候还是保留原来的数据,但是数据本身包含恶意内容。
第二步:引入恶意数据--->在将数据存入到数据库之后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出恶意数据,没有进行进一步的检验和处理。这样就回造成sql二次注入

例子:
这个骑士cms,有一个会员中心的,功能假设存在二次注入,首先注册一个叫:xiaodi' union select 的用户,即使这中间有魔术引号的阻拦,在进入数据库的时候都会将\,变回原样,那么在执行sql语句的时候就会是如下:insert xiaodi' union select,那么在下次更新用户信息的时候就会变成:update xiaodi' union select xxx,这里的xxx就是你的恶意代码,比如说可以order by x,那么就可以进行注入操作了

如果想要满足二次注入的条件,首先是在对我们使用注入的时候进行了转义,那么这里可以用宽字节注入和二次注入,需要同时满足有insert和update的操作,而且这个变量是我们可以控制的。并且不对我们update的操作进行过滤

一是创建建立和更新建立;二是创建账号和修改个人资料,但是个人资料只能修改密码无法修改用户名,因此排除2选择1

创建简历:通过mysql监控,可以知道前面要么只有insert或者update这一种,要么变量不可控

这里我没有复现成功。一直报错

资源

1
2
3
4
5
6
7
8
9
10
https://blog.1997sty.com/cos/uploads/20220401/ff387a30b325532c40863ca36b39ab47.zip ---> Seay源代码审计系统2.1.zip
https://blog.1997sty.com/cos/uploads/20220401/0b870fa06efc70ee64adc9c9346e6a1b.rar ---> Seay源代码审计系统2.1源码.rar
https://blog.1997sty.com/cos/uploads/20220401/74aa41d25c26b937ef582c0444861d77.rar ---> Seay源代码审计系统插件示例.rar
https://blog.1997sty.com/cos/uploads/20220401/0fdc6de59d9d0449cc14f2f9d0e4c768.rar ---> 代码审计资料整理.rar
https://blog.1997sty.com/cos/uploads/20220401/9aecbbe014607ae5cba01a4af8709e96.zip ---> MySQL-Monitor-master.zip
https://blog.1997sty.com/cos/uploads/20220401/006aa3bdfc83047b186821f4d283efef.zip ---> Maccms8.x-master.zip


参考博客:
https://www.bilibili.com/read/cv14964585?spm_id_from=333.999.0.0