十一月六日-CTF-PWN
最近打东华杯,因为看不懂c++,所以遭重了。花了一点时间学习C++的反汇编,终于把它拿捏了。
CPPUAF漏洞,在rm函数中,并没有将指针设置为0.所以我们可以将某个chunk free 后然后直接利用md函数修改其fd指针,从而进行unsortbin_attack
add(0),free(0)后可以直接利用未消除的指针进行泄露地址
这里可以选择覆盖tcache_str为大数,下下次分配chunk时将直接进入unsortbin。这里需要格外注意的是,这里并未直接将改tcache_num设置为7 ,而是利用tcache和unsortbin的指针指向相差了0x10,因此被分配到最高地址的chunk被free时将会进入unsortbin,而其上一个被free的chunk仍进入tchche这为之后修改tchche的fd提供了方便
第一次free:
第二次free:
也是因为未清除指针的原因,可以直接读出fd的值然后计算出__free_hook
覆盖tcache的fd为__free_hook,然后连续malloc两个chunk,free掉有“/bin/sh\x00”的chunk
#! /us ...
三个访问Google的方式
1.修改host文件
首先、Hosts它是一个没有扩展名的系统文件,而它的的基本作用就
是将一些我们个人常用的网址和相对应的IP地址建立一个关联“数据库”。
所以,当我们(也就是用户)在浏览器输入一个需要我们登录的网址
时,我们的计算机系统会首先自动的从Hosts文件中寻找对应的IP地址。
如果一旦找到对应的IP地址,我们的系统将会立即打开对应的网页;
如果没有找到,这时候系统将会把网址交给DNS域名解析服务器进行IP地址的解析。
而如果系统发现是被屏蔽的IP或域名,就会禁止打开此网页!
2.设置代理服务器
须送出Request信号来得到回答,然后对方再把信息以bit方式传送
回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有
了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务
器发出请求,Request信号会先送到代理服务器,由代理服务器来取
回浏览器所需要的信息并传送给你的浏览器。
因此代理服务器仅作用于网页,在其他应用上仍使用的真实IP。
3.使用vpn
与代理服务器不同的是VPN可以为全局网络改变IP,其他与代理服务器类似。
所以VPN是居家旅行, ...
Web学习 XSS 跨站漏洞
XSS 跨站漏洞XSS简介alert('xss')
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
产生层面产生层面一般都是在前端,JavaScript代码能干什么,执行之后就会达到相应的效果
函数类比如说php中的脚本的输出函数
常见的输出函数有:print、print_r、echo、printf、sprintf、die、var_dump、var_export
XSS 跨站漏洞分类:
反射型<非持久 ...
unlink
今天复习一下unlink的原理及触发方式,这里主要2.29之前的方法,之后的利用写在off_by_none中。
unlink在合并堆块时,会将被合并的堆块从bin链中取出之后的链将变成FD->bk = BK ; BK->fd = FD , 可以利用这种机制在特定的地址处写入堆块(需要满足FD->bk == p ; BK->fd ==p)
以2014 HITCON stkof作为例题演示
在edit中写入的size是可控的,所以存在溢出漏洞
可以发现chunk的地址被存储在了这个地址head,可以通过伪造chunk及其fd,bk从而将chunk写入该位置。
申请三个堆,用于unlink的堆块不可进入fastbin否则无法触发unlink
伪造fackchunk 其fd = head-0x8 ; bk = head,注意其下一chunk的prevsize 和 inuse都需要修改使其认为fakechunk是其上一chunk.
free造成unlink,FD-bk = BK ; BK->fd = FD (如图)
ad(0x20)
ad(0x30)
ad(0 ...
tcache结构体
利用修改tcache的fd,从而使得tcache
先看一下tcache的源代码:
tcache_get():
static __always_inline void *
tcache_get (size_t tc_idx)
{
tcache_entry *e = tcache->entries[tc_idx];
assert (tc_idx < TCACHE_MAX_BINS);
assert (tcache->entries[tc_idx] > 0);
tcache->entries[tc_idx] = e->next;
--(tcache->counts[tc_idx]);
return (void *) e;
}
tcache_put():
tcache_put (mchunkptr chunk, size_t tc_idx)
{
tcache_entry *e = (tcache_entry *) chunk2mem (chunk);
assert (tc_idx < ...
Web学习 sql注入
知识点:在MYsQL5.o以上版本中,mysql存在一个自带数据库名为information_schema,它是一个存储记录有所有数掘库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。
information_schema.tables: 记录所有表名信息的表information_schema.columns: 记录所有列名信息的表
table__name :表名column_name:列名table_schema:数据库名
group_concat(table_name) 查询所有的表名
猜解列名数量(字段数) order by x (x 变动,查看网页是否正常)
http://219.153.49.228:48354/new_list.php?id=1 order by 1
报错猜解准备(查看可显示的字段)
http://219.153.49.228:48354/new_list.php?id=-1 union select 1,2,3,4
信息收集:
数据库版本: version()
数据库名字: databas ...
buuctf re WP
IDA中的快捷键"r" 将ASC码转化为字符
“h” 将字符转化为asv码
“f5” 查看伪代码
“ c ”
“shift+f12” 查看字符串
“ctrl+x ” 查看ida view -a 界面
“strcmp” 函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果
返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;
若str1>str2,则返回正数。
reverse 1
如图,这个hello world 非常可疑,可能就是flag
str2就是flag,但是有个if函数将所有的o改成了0
reverse 2首先f5查看伪代码
阅读可知flag中的i和r都被依次替换为了1
内涵的软件
这东西看上去就像是flag的样子,去试了试base64和md5都不对,没想到
flag竟然就是flag{49d3c93df25caad81232130f3d2ebfad} ...
缓冲区溢出-CTF-PWN
ida调试快捷键
一字节等于8位或者说8比特
2字节==16位
1字长32位PC的字长是32bit,现在开始成为主流的64位CPU字长是64bit,手机上使用较多的ARM处理器大多数是32位
传参64位: 当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9
32位: 用栈传参
常用寄存器和8086稍有区别,具体如下
常用指令
调试
context.log_level='debug'
gdb.attach(io)
io.send(p)
gdb.attach(p,'b *0x8048600')利用gdb动调,在0x8048600处下了个断点
ROPgadget
ROPgadget --binary ret2syscall --only "pop|ret"
LibcSearcher
libc = LibcSearcher("gets",gets_real_addr)
libcbase = gets_real_addr – obj.dump("fgets&q ...
off_by_none_2.31
在2.29的版本后加入了这样的防护
if (__glibc_unlikely (chunksize(p) != prevsize))
malloc_printerr ("corrupted size vs. prev_size while consolidating");
/* consolidate backward */ if (!prev_inuse(p)) { prevsize = prev_size (p); size += prevsize; p = chunk_at_offset(p, -((long) prevsize)); if (__glibc_unlikely (chunksize(p) != prevsize)) malloc_printerr (“corrupted size vs. prev_size while consolidating”); unlink_chunk (av, p); }
// fd bk
if (__builtin_expect ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment











