Said in front
一直想把pwnable.kr 上的题目都刷一遍,一直没有时间, 刚好快要寒假了,
准备开刷,看雪刚好开了pwn版块,嘛,现在开始两个月的时间,把看雪当作
自己的blog来记录吧 ^_^
题目描述
Mommy! what is a file descriptor in Linux?
* try to play the wargame your self but if you are ABSOLUTE beginner, follow this tutorial link: https://www.youtube.com/watch?v=blAxTfcW9VU
ssh fd@pwnable.kr -p2222 (pw:guest)
第一道题目,1 points.挺简单的一道题目,为了练习就直接用汇编来分析,增加自己读汇编的熟练度
analysis
运行题目
❯ ./fd
pass argv[1] a number
要求输入一个参数
❯ ./fd 1234
learn about Linux file IO
输入之后会显示一段字符串
ida打开看看
一个部分一个部分看
__unwind {
push ebp
mov ebp, esp
push edi
push esi
and esp, 0FFFFFFF0h
sub esp, 20h
cmp [ebp+argc], 1 # 判断argc是否 > 1
jg short loc_80484BB # jmp greate than
mov dword ptr [esp], offset s ; "pass argv[1] a number"
call _puts # 没有添加控制台参数输出提示
mov eax, 0
jmp loc_8048559 # 跳到结束的位置
首先是需要有控制台参数
有了控制台参数之后跳到下面
loc_80484BB:
mov eax, [ebp+argv]
add eax, 4 #eax == 第一个控制台参数地址argv[1]
mov eax, [eax]
mov [esp], eax ; nptr
call _atoi # 转换成整数
sub eax, 1234h # 减去 0x1234
mov [esp+18h], eax
mov dword ptr [esp+1Ch], 0
mov dword ptr [esp+8], 20h ; nbytes
mov dword ptr [esp+4], offset buf ; buf
mov eax, [esp+18h] # atoi(argv[1])-0x1234
mov [esp], eax ; fd
call _read
# atoi(argv[1])-0x1234
# buf
# 0x20
mov [esp+1Ch], eax
mov edx, offset aLetmewin ; "LETMEWIN\n"
mov eax, offset buf
mov ecx, 0Ah
mov esi, edx
mov edi, eax
repe cmpsb # strcmp(buf,"LETMEWIN")
setnbe dl
setb al
mov ecx, edx
sub cl, al
mov eax, ecx
movsx eax, al
test eax, eax
jnz short loc_8048548
到这里就很清楚了
将控制台输入的数字将去 0x1234作为 read 函数的 fd, 后面将buf 和
”LETMEWIN“ 做比较,一样的话就运行下面的代码,直接cat flag 出来
mov dword ptr [esp], offset aGoodJob ; "good job :)"
call _puts
mov dword ptr [esp], offset command ; "/bin/cat flag"
call _system
mov dword ptr [esp], 0 ; status
call _exit
不一样就输出刚才的
loc_8048548:
mov dword ptr [esp], offset aLearnAboutLinu ; "learn about Linux file IO"
call _puts
mov eax, 0
linux 文件描述符 stdin ==> 0
stdout ==> 1
stderr ==> 2
所以控制台输入 0x1234也就是 4660 atoi(argv[1])-0x1234=0
然后就可以写buf, 输入 LETMEWIN 即可
❯ ./fd 4660
LETMEWIN
good job :)
/bin/cat: flag: 没有那个文件或目录
okay, 第一道题目搞定,虽然很简单,但是还是记录一下,一点一点加大难度
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课