【黑客】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”是一个黑客语法的俚语词,是指攻破设备或者系统。发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵了。
虽然听起来更加高端,但是网站中的第一题还是比较简单的,下面记录一下我的解题过程,当然,后面的题的解题过程,我也会一一记录在我的博客里面。
先来看一下网站的首页:
很卡通的一些图片,每个图片后面都是一道题,首先点开第一题,fd:
根据对话框中的提示,这题考察的是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代表标准输入stdin,1代表标准输出stdout,2代表标准错误stderr。从输入中传递数据当然最简单,所以只要让fd等于0就行了。所以最终的答案是:
[email protected]:~$ ./fd 4660 LETMEWIN good job :) mommy! I think I know what a file descriptor is!!
拿到flag,把它输入对话框中:(当然,先登陆,没号的话注册一个吧)
这个旗我已经夺过啦,所以不能再夺啦!
好了,到这里我们已经完全知道了pwn是怎么玩的啦!接下来我就要继续我的征程了,这篇就到这里,再见啦~~~
转载请注明出处:http://www.channingbreeze.com/blog-18.html