代码审计
文章平均质量分 66
从0开始的代码审计之路
Z3r4y
向往自由的web安全萌新;友链:4rih04x.fun
展开
-
【Web】Ctfshow Thinkphp3.2.3代码审计(1)
ThinkPHP在开启DEBUG的情况下会在Runtime目录下生成日志,而且debug很多站都没关,其目录结构为 Application/Runtime/Logs/Home/年份_月份_日期.log。在fetch方法中执行了eval('?访问/Application/Runtime/Logs/Home/21_04_15.log。发现任意命令执行后门:/index.php?题目提示要爆破,而且不超过365次 (1年的天数)查看附件源码 (config.php)发现定义了一个可执行命令的路由规则。原创 2023-11-26 11:17:00 · 355 阅读 · 0 评论 -
【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞
前面审了一些tp3的sql注入,终于到tp5了,要说tp5那最经典的还得是rce下面介绍非强制路由RCE漏洞。原创 2023-12-29 19:49:39 · 1036 阅读 · 0 评论 -
【Web】Ctfshow Thinkphp3.2.3代码审计(2)
这段代码的作用是根据数据库字段类型的定义,对数据进行相应的类型转换,以确保数据的类型与数据库字段类型匹配,从而提高数据的准确性和一致性。比如数据库中的id是int型会进入intval函数,你输入1' union select * # 转换后就成了1。因为$options['where']是一个数组,所以会从if进入_parseType。其实很明显就是让$options['where']不为数组就可以了。所以要用一些路子,不进入到下面的if判断里。因为1是number,所以会让。这是我们不愿意看到的。原创 2023-12-25 23:52:22 · 360 阅读 · 0 评论 -
【Web】Ctfshow Thinkphp3.2.3代码审计(3)
(这里我认为数据库id字段类型为varchar,这样数组条件判断进_parseType()就不会受到数字型或布尔型强制类型转化干扰)发现会进到is_string的判断里,让$options['where']=array("_string"=>"1")之后传入到find(),和web573一样也是以数组形式传参,只不过传入的参数也是数组,我们跟一下代码。键'_string'的首字符为'_',跟进parseThinkWhere()这题与web573的区别在于进find()前先进了where()处理。原创 2023-12-26 11:22:56 · 284 阅读 · 0 评论 -
【Web】Ctfshow Thinkphp3.2.3代码审计(4)
这里是从cookie里读user键对应的值进行反序列化,并将实例化对象与传入的id比较,如果id属性与传入的id相等,则show方法调用底层的eval执行实例化对象的username属性。因此,确保在进行反序列化之前,你需要确保序列化的类定义存在,并且能够被自动加载或手动引入。这里令$name=_content,$from=写的马即可让$_content非空,从而eval()执行php代码。这次where()里直接传了一个数组,省得走if将字符串的值再改为_string的数组了。原创 2023-12-28 01:15:17 · 1144 阅读 · 0 评论