代码审计顾名思义就是检查源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞,并提供代码修订措施和建议。
审计套路
审计方法
wooyun-2014-062047.html
wooyun-2014-073244.html
wooyun-2013-045143.html
wooyun-2014-054387.html
include($a.'.php')
,需要截断后面的 .php
gpc off && php < 5.3.4
<iconv()截断>
<PHP技巧之截断>
互联网上 445 端口基本上被过滤
php://input data
等allow_url_include on
,默认是 off
allow_url_include off
条件下 RFI$resetpwd=md5((rand());
对 rand() 函数生成出来的数字进行 MD5
某些平台下( 例如 windows ) RAND_MAX 只有 32768,如果需要的范围大于 32768,那么指定 min 和 max 参数就可以生成大于 RAND_MAX 的数了,或者考虑用 mt_rand() 来替代它
参考漏洞:Thinksaas 找回密码处设计错误利用账户可找回密码 wooyun-2014-050304.html
$encryptstring=md5($this->time.$verification.$auth);
$timetemp=date("Y-m-d H:i:s",$this->time);$auth=util::strcode($timetemp,'ENCODE');`
算法的 KEY 并没有初始化,如果知道了这个时间,就可以生成加密的字符串
参考漏洞:Hdwiki 设计缺陷知邮箱可改密码(包括管理员) wooyun-2014-067410.html
yu.php%00.jpg
yu.jpg/1.php
yu.php.xxx
x.php%81-%99
decode 后仍为 x.php
, windows 下的特性 .php::$data
任意文件删除,任意文件复制,任意文件重命名,任意文件移动,任意文件下载
首先尝试拿到配置文件中的数据库连接账号和密码,然后外链
拿到配置文件,拿到加密解密函数的 key,生成加密字符串,结合具体的代码利用
wooyun-2010-0412.html
wooyun-2014-066459.html
拿到加密函数的 key, 加密一些特殊字符然后拿到加密的字符串
wooyun-2014-071655.html
参考漏洞:phpcms 最新版绕过全局防御暴力注入 wooyun-2014-066138.html
wooyun-2014-080370.html
参考漏洞:PHPCMS最新版 ( V9 ) SQL 注入一枚 wooyun-2013-024984.html
wooyun-2014-072727.html
Content-Disposition:attachment;filename="evil_file.exe;.txt"
分号截断可绕过跳板机的 filter$_GET['a']($_GET['b'])
把用户可控的一些变量,带入到了数据库的各种操作中,并且没有做好过滤,例如:在注册用户的时候检测用户名是否存在,SQL 语句是拼接 SQL
get magic quotes gpc
判断 GPC 是否开启,如果没开启就调用 addslashes 来转义,如果开启就不调用 addslashes',",\,NULL
会在前面添加上一个转义符set names gbk
wooyun-2014-063225.html
从 utf8 转到 gbk,尽从 UTF8 转成 GBK 之后成了 %e5%5c
,对 GET POST COOKIE 做了 addslashes,'
转义后为 \'->%5c %e5%5c5c'
两个 \
,则引号出来
参考漏洞:qibocms 下载系统 SQL 注入一枚 wooyun-2014-055842.html
wooyun-2014-053187.html
参考链接:phpdisk V7 sql 注入 2 wooyun-2014-056822.html
wooyun-2014-055338.html
extract($_POST)
直接从 POST 数组中取出变量,覆盖掉之前的一些变量,覆盖的话,一般是覆盖掉表前缀之类的。
selet * from $pre_admin where xxx
像这种就覆盖掉 $pre,然后直接补全语句注入
参考漏洞:qibocms 分类注入一枚可提升自己为管理 wooyun-2014-053189.html
参考漏洞:phpdisk V7 sql 注入 2 wooyun-2014-051734.html
'"
都替换成空,然后提交之后去掉了 '
,不把 '
替换成空,但是 "
也会被转义,那么提交一个 "
就又剩下了一个转义符了。
参考漏洞:PHPCMS 全版本通杀 SQL 注入漏洞 wooyun-2014-050636.html
'
就变成 \'
,并且这里替换为空的内容 get 来的,那就想办法把 \
替换掉 addslashes 会对 ', ", \, NULL
转义,'
变成 \'
,"
变成 \"
,\
变成 \\
,NULL
变成 \0
, 提交 %00'
会被转义生成 \0\'
,这时候再提交把 0 替换成空,那么就剩下 \\'
,\\
表示 \
的转义,'
单引号也就成功出来了。
参考漏洞:cmseasy 绕过补丁 SQL 注入一枚 wooyun-2014-053198.html
'
替换成空,但是通过又全局有转义 ?<
单引号 '
转义为 \'
,然后替换 '
为空格,留下 \
,注释掉 '
, 破坏原本的 SQL, 用户提交一个 '
全局转义成 \'
, 然后这过滤函数又会把 '
替换成空,那么就留下 \
导致可以吃掉一个单引号。
需要 double query ,两处可控输入
select * from c_admin where username=' admin\' and email=' inject#'wooyun-2014-068853.html
wooyun-2014-062957.html
wooyun-2014-065837.html
wooyun-2014-079041.html
wooyun-2014-080867.html
参考漏洞:qibocms 地方门户系统注入 wooyun-2014-080870.html
参考漏洞:齐博地方门户系统 SQL 注入漏洞 wooyun-2014-079938.html
参考漏洞:齐博整站/地方门户 SQL 注入漏洞 wooyun-2014-080259.html
wooyun-2014-069746.html
参考漏洞:qibocms 多个系统绕过补丁继续注入 wooyun-2014-070072.html
参考漏洞:qibocms全部开源系统 Getshell wooyun-2014-070366.html
参考漏洞:Discuz 5.x 6.x 7.x 前台 SQL 注入漏洞一枚 wooyun-2014-071516.html
$_GET[a]
提交的是一个数组,且含有一个 key 为 0,那么 $a
就是对应的这个 key 的 value,但是这里并没有强制要求为数组。
提交一个字符串就为了 \
, 吃掉一个单引号,然后就在 $b 处写入 inject 可以注入
参考漏洞:qibocms 地方门户系统 wooyun-2014-080875.html
wooyun-2014-060159.html
参考漏洞:PHPEMS (在线考试系统) 设计缺陷 Getshell一枚(官网已 shell )--UC wooyun-2014-061135.html
参考漏洞:最土团购注入一枚可直接提升自己为管理 & 无限刷钱。--CHINABANK wooyun-2014-058479.html
参考漏洞:Destoon Sql 注入漏洞 2(有条件)--TENPAY wooyun-2014-055026.html
参考漏洞:Destoon Sql 注入漏洞一枚(有条件)--TENPAY wooyun-2014-054947.html
参考漏洞:CSDJCMS 程式舞曲最新版 Sql 一枚--TENPAY wooyun-2014-052363.html
wooyun-2014-088872.html
wooyun-2014-080873.html
wooyun-2014-079045.html
insert into table(username) values (a\'');
入库后转义符就会消失,那么就是 a'
, 把这个查询出来,那么出库的就是 a'
, 如果再带入到了查询,那么就成功的引入了单引号导致了注入,很多时候数据库中存储的长度是有限制的。
参考漏洞:phpyun v3.2 (20141226) 两处注入。 wooyun-2014-088872.html
参考漏洞:qibocms 地方门户系统 二次注入#5 wooyun-2014-080877.html
参考漏洞:74cms (20140709) 二枚二次注入 wooyun-2014-068362.html
参考链接:Hdwiki 最新版二次注入一枚 wooyun-2014-067424.html
wooyun-2014-060166.html
参考漏洞:Cmseasy SQL 注射漏洞之三 wooyun-2014-066221.html
https://www.2cto.com/article/201301/182509.html
cutstr($asd,32);
,只允许输入 32 个字符,没有在截取字符的后面加其他字符
提交一个 11111111111'
,被转义后成 11111111111\'
,绕后截取 32 个字符就是 11111111111\
double query 的话,吃掉一个单引号,然后下一个连着的可控变量可以注入
参考漏洞:Hdwiki (20141205) 存在 7 处 SQL 注入漏洞(含之前处理不当安全的漏洞)wooyun-2014-088004.html
wooyun-2014-080723.html
bool-blind order by if([expr],id,name)
#### 敏感逻辑
rand()/mt_rand()
注意种子生成逻辑select <> for update
"1e3" bypass
Magic hash\0 $0
php<7 /e,php<5.4用00截断构造/e,(regex) /e %00
thinkphp url rce本文中提到的漏洞都来自于 wooyun 的历史数据,只提供了漏洞编号而没有提供地址,这个需要大家自行去寻找提供镜像备份的网站,或者下载备份文件自己本地查看,给大家带来的不变请大家见谅。