小白pwn之旅之pwnable07

pwnable----lotto和cmd1

lotto

  1. 連上去看源代碼,發現關鍵代碼
    在這裏插入圖片描述
  2. 分析
    輸入一個 6 字節的字符串,與程序隨機生成的 6 字節字符串比較。
    看第一個for循環這裏是一個acsii碼1-45,但可顯示的是從33-45,
    第二個for循環嵌套的意思是將輸入的6個字節與系統的生成的6個字節只要有一個相同就能cat flag。
  3. 這裏我選的的’’’’’’
    在這裏插入圖片描述

cmd1

  1. 連接上去,看源代碼
#include <stdio.h>
#include <string.h>

int filter(char* cmd){
	int r=0;
	r += strstr(cmd, "flag")!=0;
	r += strstr(cmd, "sh")!=0;
	r += strstr(cmd, "tmp")!=0;
	return r;
}
int main(int argc, char* argv[], char** envp){
	putenv("PATH=/thankyouverymuch");
	if(filter(argv[1])) return 0;
	system( argv[1] );
	return 0;
}

  1. 分析
    strstr:

strstr:C 庫函數 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出現字符串 needle 的位置,不包含終止符 ‘\0’。
該函數返回在 haystack 中第一次出現 needle 字符串的位置,如果未找到則返回 null。

putenv:

putenv是用來改變或增加環境變量的內容。

再根據源代碼,我們可以知道,只要cmd中不包括flag sh tmp,就可以執行到system函數中,此時我們的argv[1]中如果包含有cat flag的話,就可以利用cmd1得到flag。
所以我們期望執行的命令是 /bin/cat flag ,因爲傳遞的參數中不能出現 “flag” ,所以我們可以用通配符, 構造命令:
/bin/cat fla?
在這裏插入圖片描述
3.就能get flag

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章