pwnable.kr—mistake,shellshock,coin1
这三个题目基本主要思路还是看别人的writeup,所以就主要总结自己的收获吧。
解题思路
遇到的问题
1.做coin1的时候怕是个智障,抄别人的代码都能抄错,在给服务器发送数据的时候,数据后边没有”\r\n”,服务器无法正确识别每次客户端发送的数据,所以……GG
2.做shellshock的时候,我自己先了解了一下setresuid和setresgid,曾以为这道题目可能会和linux权限有关系……GG
收获
1.socket通信,python版客户端主要函数:
HOST='0' #如果是localhost
PORT=9007 #记得是整数,不加引号
ADDR=(HOST,PORT)
clientSocket=socket(AF_INET,SOCK_STREAM)
clientSocket.connect(ADDR)
clientSocket.recv(BUFSIZE)
clientSocket.send(data)
2.python正则表达特殊字符含义
^:匹配字符串的开头
$:匹配字符串的末尾
*:匹配0个或多个表达式
\s:匹配任意空白字符;等价于[\t\b\r\f]
3.’\r\n’:\r表示回车(光标回到当前行的起始位置);\n表示换行;如果只有\r的话,后边的内容会覆盖前边的
4.linux终端下复制:ctrl+alt+c;粘贴:ctrl+alt+v;vi中单行删除:esc->:1(待删除行)d;vi中多行删除:esc->1,10d
5.python中str.append()参数应当是Str类型,记得类型匹配
6.在安装python3的时候遇到的知识点:.configure+make+make install。
./configure生成makefile文件,可以通过添加参数(./configure -prefix=/usr,此时执行文件在/usr/bin,资源文件在/usr/share)将软件安装在指定目录下,否则会默认子/usr/local/bin。
make编译(大多数源代码包使用)
make install安装,有些需要先make check
linux下安装应用程序:脚本./configure生成makefile—make编译—make install—make clean
7.setresuid()被执行的条件有:
当前进程的euid是root
三个参数每一个都等于原来id的某一个
setresuid和setresgid的含义分别是:设置real-uid/efficient-uid/saved-uid、设置real-gid/efficient-gid/saved-gid
8.UNIX下SUID和SGID的解析:
文件描述符共10位:9/8/7/6/5/4/3/2/1/0
其中9为文件类型:p命名管道文件;d目录文件;l符号连接文件;s-socket文件;c字符设备文件;b块设备文件;-普通文件
8-6文件所有者权限(r,w,x)
5-3同组用户权限(r,w,x)
2-0其他用户权限(r,w,x)
文件设置SUID/SGID分别表现在文件所有者或同族用户的权限的可执行位(6/3)
9.程序运行时由内核确定进程对资源的访问权限;内核主要根据euid和egid来确定进程对资源访问。
SUID让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。
10.shellshock:
hacker:export X=’ () { echo ” inside X ” ; } ; echo “outside X”; ‘
env:X= () { echo ” inside X ” ; } ; echo “outside X”;
bash:产生一个bash子进程—读取father’s all exported environmental variable , copy到自己的进程空间—注入命令echo “outside X”
仍存在的疑惑
1.env的使用过程中
first: env VAR=’ (){:;};echo bash is vulnerable ’ bash -c “echo bash test”
second:首先env VAR=’ (){:;};echo bash is vulnerable ‘;然后bash
为什么first可以输出bash is vulnerable,但是second就不可以?不都是新建了一个子进程吗?
2.问题1如果使用了export就很好……?export与env指令有待深入了解