【黑客】pwn简介与入门

作为一个刚刚工作两年的新生代程序员,还是喜欢接触一些新鲜事物的。

前不久买了一个ruff的开发板,可以用js来控制硬件,官网如下https://ruff.io/zh-cn/,然后加了他们的QQ群。群里面高手很多,很多人也像我一样,很快就把板子自带的10种外设都玩遍了,觉得没什么可玩的了,但是里面有一个李同学,对板子做了一次“Hack”,让我们刮目相看。

李同学首先通过wireshark把板子连接的包抓了出来,进行了一些分析。然后通过binwalk把板子的固件给解压了,得到了固件的源码,通过分析发现了里面的一个可以执行任何命令的超级函数,然后,他写了一个UDP Server烧在板子里,通过python客户端进行连接,就可以执行板子上的linux命令了。这是他的博客:https://virusdefender.net/index.php/archives/748/

看了他的博客,我也迫不及待实验了一把,确实是可以的。经过简单的交谈,发现他是搞网络安全的,顿时发现搞安全的似乎和普通的程序员不是在同一个世界,于是决定看看他们的世界,我浏览了他的其他博客。

他除了参加一些安全比赛,平时也会上一些训练网站,比如CTF训练营:http://ctf.idf.cn/,和这个pwn游戏网站:http://pwnable.kr/

什么是CTF?引用网站上的一段话:CTF全称Capture The Flag,即夺旗比赛,衍生自古代军事战争模式,两队人马前往对方基地夺旗,每队人马须在保护好己方旗帜的情况下将对方旗帜带回基地。在如今的计算机领域中,CTF已经成为安(hei)(ke)竞赛的一种重要比赛形式,参赛选手往往需要组队参加,通过团队之间的相互合作使用逆向、解密、取证分析、渗透利用等技术最终取得flag

不过CTF网站的题目相对于一个小白来说,还是有点难度,于是我又看了另外一个网站pwn

Pwn”是一个黑客语法的俚语词,是指攻破设备或者系统。发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵了。

虽然听起来更加高端,但是网站中的第一题还是比较简单的,下面记录一下我的解题过程,当然,后面的题的解题过程,我也会一一记录在我的博客里面。

先来看一下网站的首页:

【黑客】pwn简介与入门

很卡通的一些图片,每个图片后面都是一道题,首先点开第一题,fd

【黑客】pwn简介与入门

根据对话框中的提示,这题考察的是linux中的文件描述符,我们用ssh登陆服务器:

>ssh [email protected] -p2222
The authenticity of host '[pwnable.kr]:2222 ([143.248.249.64]:2222)' can't be es
tablished.
RSA key fingerprint is c7:18:97:4f:24:a1:12:31:09:a1:d0:30:ab:1c:af:5c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[pwnable.kr]:2222,[143.248.249.64]:2222' (RSA) to th
e list of known hosts.
[email protected]'s password:
 ____  __    __  ____    ____  ____   _        ___      __  _  ____
|    |  |__|  ||      /    ||     | |      /  _]    |  |/ ]|    
|  o  )  |  |  ||  _  ||  o  ||  o  )| |     /  [_     |  ' / |  D  )
|   _/|  |  |  ||  |  ||     ||     || |___ |    _]    |     |    /
|  |  |  `  '  ||  |  ||  _  ||  O  ||     ||   [_  __ |     |    
|  |         / |  |  ||  |  ||     ||     ||     ||  ||  .  ||  .  
|__|    \_/\_/  |__|__||__|__||_____||_____||_____||__||__|\_||__|\_|
 
- Site admin : [email protected]
- IRC : irc.smashthestack.org:6667 / #pwnable.kr
- Simply type "irssi" command to join IRC now
- files under /tmp can be erased anytime. make your directory under /tmp
- to use peda, issue `source /usr/share/peda/peda.py` in gdb terminal
Last login: Sun Jun  5 06:00:39 2016 from cm-84.215.106.218.getinternet.no
[email protected]:~$

哈哈,还真能登陆,这样,我们就以fd这个用户身份登陆了pwnable.kr的服务器。来看看用户根目录都有什么?

[email protected]:~$ ls -l
total 20
-r-sr-x--- 1 fd2  fd   7322 Jun 11  2014 fd
-rw-r--r-- 1 root root  418 Jun 11  2014 fd.c
-r--r----- 1 fd2  root   50 Jun 11  2014 flag
-rw-r--r-- 1 root root   12 May 29 09:13 peda-session-fd.txt
[email protected]:~$ cat peda-session-fd.txt
break main

我们看到这个目录下,有四个文件,txt文件中说,**main函数。还有一个flag,答案就在里面,但是我们没有读权限,fd是有可执行权限的。它的源码在fd.c里面。看来秘密都在fd.c里面了,接下来,我们就来看看fd.c里面究竟是什么?

[email protected]:~$ cat fd.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
        if(argc<2){
                printf("pass argv[1] a number
");
                return 0;
        }
        int fd = atoi( argv[1] ) - 0x1234;
        int len = 0;
        len = read(fd, buf, 32);
        if(!strcmp("LETMEWIN
", buf)){
                printf("good job :)
");
                system("/bin/cat flag");
                exit(0);
        }
        printf("learn about Linux file IO
");
        return 0;
 
}

代码写的很简单,从fd这个文件描述符中读取32个字节,如果得到的是“LETMEWIN ”,就会调用系统的cat去读取flag里面的内容,而fd,就是把我们传递给程序的参数减去0x1234

linux中,文件描述符中的0代表标准输入stdin1代表标准输出stdout2代表标准错误stderr。从输入中传递数据当然最简单,所以只要让fd等于0就行了。所以最终的答案是:

[email protected]:~$ ./fd 4660
LETMEWIN
good job :)
mommy! I think I know what a file descriptor is!!

拿到flag,把它输入对话框中:(当然,先登陆,没号的话注册一个吧)

【黑客】pwn简介与入门

这个旗我已经夺过啦,所以不能再夺啦!

好了,到这里我们已经完全知道了pwn是怎么玩的啦!接下来我就要继续我的征程了,这篇就到这里,再见啦~~~

转载请注明出处:http://www.channingbreeze.com/blog-18.html