0x00 写在前面
最近先感冒后发烧,因身体不适很久没有更新学习记录。
从零学习php,最终目的实现代码审计入门,软件采用sublime text,环境使用phpstudy搭建,数据库是navicat,需要有基本的前端基础、简单的php+mysql后端基础、渗透知识和漏洞原理,文章跟随流沙前辈学习记录,看看曾经遥不可及的代码审计能不能慢慢啃下来。
需要有SQL注入漏洞知识,对常见的注入类型要会操作。
本章为代码审计入门学习第三篇,前辈讲解了常见注入类型,这些东西对我还是比较简单,但是既然是学习,就按着过程把SQL注入的常见类型水一遍,没啥技术含量。
0x01 联合注入
order by 用来查询表的字段个数。表中有四列,查询第五列时报错。
union 联合查询。select查询时对应每个字段(也就是列),不能多也不能少。
进入正题,靶场搭建完毕,简单用search传参,发现下面有输出。
打开search.php简单看一下,发现指向search.html
原来作者为了方便学习,直接把输出结果。
回到页面,发现执行的sql语句。闭合过程不写了,直接写过的不少文章都被河蟹。要是日站时候都是这样的注入,做梦都能笑醒。唯一需要注意的是,有时候查表不行的时候可以转十六进制绕一下。
0x02 布尔注入
mid()字符串截取
ord()返回对应的ASCII码函数
length()函数,返回长度
在搜索框闭合然后查询,数据库名为11个字符,简单判断a%' and length(database())>12%23,没啥意思不写了。
要想靠盲注手动一个一个猜解对方的数据库工作量实在太大, 在实际工作中都是拿sqlmap跑,再不济也会用burp来fuzz。
0x03 时间注入
sleep()函数个人理解就是延时,如果延时成功就说明大概率存在,放sqlmap直接跑
if()函数,第一个是条件,true返回第二个,false返回第三个
简单判断 a%' and if(length(database())>1,sleep(5),0) %23 ,不写了
0x04 报错注入
三个报错函数updatexml()、floor()、extractvalue(),之间文章详细研究过updatexml()的原理有兴趣的可以自行看看;extractvalue()类似;floor()研究过但没有写。报错注入有自己一套的报错语法规则,理解即可,不写了。
0x05 insert注入
这里是展示一下insert注入,注入类型远远不止这些。insert注入实际情况不常用也不常见,项目不可能对数据库直接操作,万一搞崩了有责任担当不起;挖洞的话既然都有注入了为啥要用insert,工作一年多没见人用过。
0x06 总结
注入当然还有很多类型,比如堆叠注入、二次注入等等,之前国hw某信面试时也问到了,但是文章在csdn被河蟹并且链接也不可以给,有兴趣了解的同学可以去知乎搜索相同ID。