wp-xnuca-2020
XNUCA WP前言这一次比赛虽然只做出了一道pwn,但是感觉收获不错,只够交wp的资格了,线下可能就比较悬。也白票出题人的代码是咋写的^_^,以前也是好奇在获得shell之后是如何实现输入token的。
还有以前也想学一下解释器是怎么实现的, 这次比赛pwn parsec出了个语言解释器, 也给了对应的源码, 源码不是很多, 但是非常精小而强悍。晚上利用该漏洞调试至凌晨4点,第二天才发现原来调试的一直是debug模式的解释器,不得不重新改改heap的偏移,然后后面打远程打不通…泄漏远程heap时,发现远程偏移比本地小0x410,这里卡了好久,,,tcl。下次比赛好好加油!!!
ParseC给了源码
下载
这个题比较有意思, 用被解释的语言写exp。下面是这个解释器实例代码
// Fibonacci sequence
func fun{
if(x <= 2){
return(1);
}
y = 0;
x = x - 1;
y = fun(x);
x = x - 1;
return(y + fun(x ...
linux qq 漏洞调试分析
linux qq 漏洞调试分析QQ调试报告调试者I0gan
blog: http://i0gan.cn
github: https://github.com/i0gan
保护┌[logan☮arch]-(/usr/bin)
└> checksec qq
[!] Unknown configuration section 'update'
[*] '/usr/bin/qq'
Arch: amd64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
FORTIFY: Enabled
问题qq在登录之后在拉去消息和好友列表时出现段错误, 在反映比较慢的电脑上出现几率比较小, 在反映过快的电脑中, 每次基本都直接崩溃.
影响版本2.0.0
原因多线程条件竞争, 导致对象释放重利用, 然而在调用该函数指针时, 会出现内存地址非法调用
证实: 调试时, 在登录之后, 只运行主线程, 阻断其他线程运行 ...
HEAP-2020-姿势学习
HEAP-2020-姿势学习glibc-2.29姿势学习tcache结构//glibc-2.29
typedef struct tcache_entry
{
struct tcache_entry *next;
/* This field exists to detect double frees. */
struct tcache_perthread_struct *key;
} tcache_entry;
//glibc-2.27
typedef struct tcache_entry
{
struct tcache_entry *next;
} tcache_entry;
glibc-2.29在tcache_entry结构体中加上结构体指针key。该key值为tcache_perthread_struct的地址
//glibc-2.29
tcache_put (mchunkptr chunk, size_t tc_idx)
{
tcache_entry *e = (tcache_entry *) chunk2mem (chunk);
assert (t ...
Golang 逃逸分析
Golang 逃逸学习golang的内存管理比较安全,不可直接操作内存,且在编译期间会进行数组越界检查,在运行的时候直接报错。
这篇文章就记录一下golang逃逸的一些相关原理吧。
golang逃逸分析wikiIn compiler optimization, escape analysis is a method for determining the dynamic scope of pointers - where in the program a pointer can be accessed. It is related to pointer analysis and shape analysis.
When a variable (or an object) is allocated in a subroutine, a pointer to the variable can escape to other threads of execution, or to calling subroutines. If an implementation uses tail call ...
反逆向分析
反逆向分析Ollvm0x01 Ollvm介绍OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学安全实验室于2010年6月份发起的一个项目,该项目旨在提供一套开源的针对LLVM的代码混淆工具,以增加逆向工程的难度, 只不过Ollvm仅更新到llvm的4.0,2017年开始就没再更新。
0x02 Ollvm混淆介绍Ollvm混淆主要分成三种模式,这三种模式主要是流程平坦化,指令替换,以及控制流伪造。
流程平坦化 :这个模式主要通过将if-else语句替换成do-while语句,然后通过switch语句来对流程的控制,这样就能模糊基本块之间的前后关系。
指令替换 :这个模式主要通过使用更复杂的指令序列来替换一些标准的二元运算符,从而增加逆向的难度。
控制流伪造 :这个模式主要是会在一个简单的运算中外包好几层if-else的判断,从而增加逆向的难度。
对Ollvm有更深入的理解,可参阅论文《Obfuscating C++ programs via control flow flattening》
0x03 Ollvm编译env: arch-linux
使用apt源安装g++ ...
wp-nu1lctf-2020
NU1L 2020 WPPWNsignin经典的菜单体, 与ddctf的一个pwn非常类似, 打远程超级慢, 打一个小时左右….
void __fastcall __noreturn main(__int64 a1, char **a2, char **a3)
{
int v3; // [rsp+4h] [rbp-Ch]
unsigned __int64 v4; // [rsp+8h] [rbp-8h]
v4 = __readfsqword(0x28u);
setbuf(stdin, 0LL);
setbuf(stdout, 0LL);
setbuf(stderr, 0LL);
while ( 1 )
{
show_menu();
std::istream::operator>>(&std::cin, &v3);
switch ( v3 )
{
case 2:
del();
break;
case 3:
show();
...
西湖论剑-wp
Pwnmmutag本题下载
checksec Arch: amd64-64-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: No PIE (0x3ff000)
Vulsigned __int64 __fastcall rm(int idx)
{
signed __int64 result; // rax
if ( ptr[idx] )
{
free(ptr[idx]);
--ptr[0]; // uaf
result = 0LL;
}
else
{
puts("you need add this content");
result = 1LL;
}
return result;
}
利用漏洞再于uaf漏洞, 因为真正的添加和释放是顺序性的, 若释放不是最后一个chunk, 会造成释 ...
极客巅峰2020
极客巅峰 2020本来都可以进线下的, 但我二进制这边没有输出, 先来个中午时web历史辉煌一刻:
只怪自己太菜, 连累了队伍, 最后掉到后40了….
PWN这次比赛两个盲打, 一个blind heap另一个不知道是啥题, 类似与抓的awd抓的流量包…还有一个是python 的溢出利用这次的pwn只有个bheap有点思路, 其他两个pwn完全没思路, 但是一个也没弄出来, (菜~)。
bheap bheap存在uaf漏洞, double free之后没有报错, 那可以猜想为libc.so.2.26 ~ libc.so.2.27, 且在本地写了个模拟了一个逻辑差不多的程序, 使用dup修改top chunk size 故意报错, 远程也是如此,也很肯定猜想是正确的. 比较麻烦的是如何泄漏libc, 且开辟的次数不能超过10次。若用dup打入IO_FILE泄漏Libc的话, 开辟次数非常多, 加上再次劫持mallo_hook或free_hook,次数就超过10次很多了, 这点问题就把我kill掉了….菜~等wp吧….
REvirus是一个简单的迷宫题.采用4个迷宫, 需要自己根据 ...
wp DownUnderCTF
DownUnderCTF PWN WPplatform
1 [shellthis]There is a backdoor function named get_shell, then use ret2txt way to get shell
exp#!/usr/bin/env python3
#-*- coding:utf-8 -*-
# author: i0gan
# env: pwndocker [skysider/pwndocker (v: 2020/09/09)]
from pwn import *
import os
r = lambda x : io.recv(x)
ra = lambda : io.recvall()
rl = lambda : io.recvline(keepends = True)
ru = lambda x : io.recvuntil(x, drop = True)
s = lambda x : io.send(x)
sl = lambda x : io.sendline(x)
sa = lambda x ...